Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用post请求获取身份验证令牌_C#_Security_Oauth_Jwt_Token - Fatal编程技术网

C# 使用post请求获取身份验证令牌

C# 使用post请求获取身份验证令牌,c#,security,oauth,jwt,token,C#,Security,Oauth,Jwt,Token,我试图通过向url发出post web请求来获取请求验证令牌。api期望用户名/密码作为表单数据有效负载中的凭据 当我单击浏览器上的登录选项时,网络日志显示一个GET请求,其中HTML作为响应,然后是一个POST请求,该请求返回带有用户名/密码和有效负载中的请求令牌的表单数据 尝试使用webrequest模拟流,我正在执行一个简单的post请求,如下所示: public string HttpPost(string url, string post, string refer = "")

我试图通过向url发出post web请求来获取请求验证令牌。api期望用户名/密码作为
表单数据
有效负载中的凭据

当我单击浏览器上的登录选项时,网络日志显示一个
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
请求:


该令牌是一个CSRF令牌,您需要做的是在html响应中查找登录表单,该响应与您的初始get请求一起接收,并确保您正在存储此响应中设置的cookie

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


通过一些正则表达式或htmlagilitypack可以通过编程实现这一点,从而使用fiddler提取该令牌

,您能在这里发布相关请求的日志吗?请求和响应。如果它返回的html与json或XML相反,似乎在mac os上运行fiddler是一件痛苦的事,那么最初的get请求似乎无关紧要。。在Sierra 10.13.1上运行时,是否有其他变通方法可供我们适应?可能是因为它在幕后使用了重定向url机制吗?或者第一个得到的是对cookies的请求?下一个POST请求使用哪一个?更新了问题以包括对第一个GET请求的响应..哇!谢谢你,先生!那正是我要找的。。仔细查看响应后,我能够找到嵌入在输入标记中的令牌。在提取GET响应中隐藏的请求令牌后,我正在向同一uri发送post。但是,它在响应中返回了一些html,我想缺少了一些东西。我需要在我之前得到的帖子的请求头中设置cookie吗?没错!检索Cookie并将其包含在post请求中这是我现在正在尝试的:
fr.getCookies().Add(新Cookie(“\uu RequestVerificationToken”,requestToken,“/”,“somedomain.com”);var htmlPostRes=hrh.HttpPost(“https://uriforserver“,”,“{\”用户名\“:\”334\”,“密码\“:\”131\”,“\\”请求验证登录\“:\”'““+”请求令牌+“\”}”,fr.getCookies())经过一些读取后,.net mvc csrf似乎需要匹配Cookie中的令牌以及请求formdata。。这似乎不起作用。。