c# - 使用 post 请求获取授权 token

标签 c# security oauth jwt token

我正在尝试通过向 url 发出 post web 请求来获取请求身份验证 token 。该 api 需要用户名/密码作为 form-data 有效负载中的凭据。

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

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 以从端点获取 token ?

编辑 1:

这是第一个 GET 请求:

enter image description here

最佳答案

token 是一个 CSRF token ,您需要做的是在初始 get 请求收到的 html 响应中找到登录表单,并确保您存储了在此响应中设置的 cookie。

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

可以使用一些正则表达式或 htmlagilitypack 以编程方式提取该标记

关于c# - 使用 post 请求获取授权 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50653618/

相关文章:

c# - 使变量成为必需的 - 以逃避 NullReferenceException?

php - 使用数据库级 MD5 函数是否比应用程序级函数具有更大的安全风险?

c - Microsoft SDL 和 memcpy 弃用

php - 如何在 PHP 中使用 StackOverflow API V 2.2 获取问题

c# - 带有 viewbag 的 MVC 数据集

c# - 是否可以在HTTP get请求的头部分传递参数?

security - Git:删除存储库中文件的所有修订,并替换为新文件

java - OAuth token 请求 - 从 responseentity 获取 access_token

java - 获取用 Java 或 Groovy 填充的有效 oauth_signature 的绝对最小代码?

c# - 使用 HttpClient 获取 Bearer Token