使用发布请求获取身份验证令牌

时间:2018-06-02 04:51:09

标签: c# security oauth jwt token

我正在尝试通过向网址发布网络请求来获取请求身份验证令牌。 api期望用户名/密码作为form-data有效负载中的凭据。

当我点击浏览器上的登录选项时,网络日志会显示GET请求HTML作为响应,然后是POST请求,该请求返回表单数据用户名/密码和有效负载中的请求令牌。

Network log from browser..

尝试使用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请求:

enter image description here

1 个答案:

答案 0 :(得分:1)

令牌是一个CSRF令牌,您需要做的是在初始获取请求中收到的html响应中找到登录表单,并确保您存储在此响应中设置的cookie。 / p>

然后,您需要在html响应中搜索用户名和pw输入字段旁边名为“token”的隐藏输入参数,并使用该元素的值来撰写您的帖子请求。

使用某些正则表达式或htmlagilitypack可以以编程方式执行此操作以提取该令牌