C# 我如何通过';application/x-www-form-urlencoded-params';通过响应重定向获取?
我有一张这样的表格:C# 我如何通过';application/x-www-form-urlencoded-params';通过响应重定向获取?,c#,asp.net-mvc,razor,oauth,C#,Asp.net Mvc,Razor,Oauth,我有一张这样的表格: <form action="@Model.AuthUrl" method="GET" class="login-bottom"> <p> <input type="hidden" name="response_type" value="code" /> <input type="hidden" na
<form action="@Model.AuthUrl" method="GET" class="login-bottom">
<p>
<input type="hidden" name="response_type" value="code" />
<input type="hidden" name="client_id" value="Model.AppKey" />
<input type="hidden" name="redirect_uri" value="@Model.RedirectUri" />
<input type="hidden" name="state" value="@ViewBag.State" />
<input type="hidden" name="ReturnUrl" value="@ViewBag.ReturnUrl" />
<button type="submit" class="btn btn-primary">Click Here</button>
</p>
</form>
点击这里
我们在应用程序中使用它来执行第三方OAuth身份验证。这个很好用。但是,我们偶尔会遇到@ViewBag.State
变量的问题。此变量保存我们生成的值,以防止跨站点伪造。因此,当第三方将我们引导回@Model.RedirectUri
(托管在我们的域中)时,我们验证这个值
当此页面在用户屏幕上停留超过20分钟时,就会出现问题(我们将@ViewBag.State
变量存储在会话
中,以供稍后验证,该变量将在20分钟后过期)。基本上,会话中的状态
变量会变得过时
在客户端进行身份验证并重定向回我们的站点后,我们检查状态值,如果已经过了20分钟,该值就消失了,因此我们的系统生成一个错误并指示他们再次进行身份验证
我希望能够在用户单击按钮时动态地将表单变量传递给第三方身份验证页面。我的第一个想法是将其包装在一个控制器中,并执行返回响应.Redirect()代码>到第三方身份验证页面。但是,第三方身份验证要求我们通过application/x-www-form-urlencoded params
传递您在表单中看到的变量,而我似乎找不到以这种方式传递这些变量的方法。是否有一种方法可以通过响应以这种方式传递这些变量。重定向
或者有没有更好的方法来处理这个流,这样我就不会让state变量过时?(最好没有客户端脚本)您可以使用HttpClient或HttpWebRequest发送数据吗?您不能。重定向响应由客户端处理,该客户端(如果是web浏览器)只对提供的位置执行GET请求(无正文)。我能想到的唯一解决方案是利用javascript客户端。谢谢@Federico Dipuma。您知道吗,这是通过第三方使用身份验证服务时的标准吗?奇怪的是,如果没有变量过时的可能性,就无法将用户引导到auth页面。