使用发布请求获取身份验证令牌
Posted
技术标签:
【中文标题】使用发布请求获取身份验证令牌【英文标题】:Get auth token using post request 【发布时间】:2018-11-12 04:44:20 【问题描述】:我正在尝试通过向 url 发出 post web 请求来获取请求身份验证令牌。 api 需要用户名/密码作为 form-data
有效负载中的凭据。
当我点击浏览器上的登录选项时,网络日志显示GET
请求以html
作为响应,然后是POST
请求,该请求返回带有用户名/密码和请求令牌的表单数据在有效载荷中。
尝试使用webrequest
模拟流程,我正在做一个简单的post
请求,如下所示:
public string HttpPost(string url, string post, string refer = "")
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
// request.CookieContainer = cJar;
request.UserAgent = UserAgent;
request.KeepAlive = false;
request.Method = "POST";
request.Referer = refer;
byte[] postBytes = Encoding.ASCII.GetBytes(post);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postBytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postBytes, 0, postBytes.Length);
requestStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
return sr.ReadToEnd();
但是,这个请求只返回页面的文本/HTML 标记,就像浏览器请求的第一部分一样。如何让它运行后续的POST
以从端点获取令牌?
编辑 1:
这是第一个GET
请求:
【问题讨论】:
使用fiddler,你能把相关请求的日志贴在这里吗?请求和响应。如果它返回 html 而不是 json 或 xml,则初始 get 请求似乎无关紧要 似乎在 mac os 上运行 fiddler 是一个痛苦的** .. 在 Sierra 10.13.1 上运行,是否有任何其他解决方法可以适应这个?难道是它在后台使用了一些重定向 url 机制?还是第一个 GET 是对 cookie 的请求?哪个用于下一个 POST 请求? 更新了问题以包含第一个 GET 请求的响应.. 【参考方案1】:该令牌是一个 CSRF 令牌,您需要做的是在初始获取请求中收到的 html 响应中找到登录表单,并确保您存储了此响应中设置的 cookie。
然后,您需要在 html 响应中搜索用户名和密码输入字段旁边名为“token”的隐藏输入参数,并使用该元素的值来撰写您的发布请求。
可以使用一些正则表达式或 htmlagilitypack 以编程方式提取该令牌
【讨论】:
哇!谢谢你,先生!这正是我一直在寻找的......在仔细查看响应后,我能够找到嵌入在输入标签中的令牌。 提取隐藏在 GET 响应中的请求令牌后,我正在向同一个 uri 发布帖子。但是,它在响应中返回了一些 html,我猜是缺少了一些东西。我是否必须在我之前获得的 POST 的请求标头中设置 cookie? 没错!检索 cookie 并将其包含在发布请求中 这就是我现在正在尝试的:fr.getCookies().Add(new Cookie("__RequestVerificationToken", requestToken, "/", "somedomain.com")); var htmlPostRes = hrh.HttpPost("https://uriforserver", "\"username\":\"334\",\"password\":\"131\",\"__RequestVerificationToken\":\"'" + requestToken + "'\"", fr.getCookies());
经过一番阅读,似乎 .net mvc csrf 需要匹配 cookie 中的令牌以及请求 formdata .. 这似乎不起作用。 .以上是关于使用发布请求获取身份验证令牌的主要内容,如果未能解决你的问题,请参考以下文章
Axios 拦截器未从 vuex 商店获取当前用户身份验证令牌
OAuth2RestOperations 使用从请求标头获取的令牌,而不是请求身份验证服务器
使用 HTTP 基本身份验证获取 JWT 令牌的安全性如何?