【发布时间】:2019-10-11 04:48:15
【问题描述】:
我将 IdentityServer4 与 ASP.NET Core 2.2 一起使用。在登录后方法上,我应用了 ValidateAntiForgeryToken。通常在登录页面上坐 20 分钟到 2 小时后,然后尝试登录它会产生一个空白页面。
如果您查看 Postman 控制台,您会收到 400 Bad Request 消息。然后,我将 AntiForgery 选项上的 Cookie Expiration 设置为 90 天。我能够让页面最多停留 6 个小时并且仍然登录。然而,大约 8 小时后(一夜之间),我在尝试登录后再次收到空白页面。
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login
services.AddAntiforgery(options =>
{
options.Cookie.Expiration = TimeSpan.FromDays(90);
});
我希望能够在登录页面上停留 90 天,这是 cookie 的持续时间,但这不起作用。如何让 AntiforgeryToken 的 cookie 持续整个 90 天或我设置的任何时间并且不会超时或过期?有没有办法捕获这个错误并将用户重定向回登录方法?
【问题讨论】:
-
里面不仅有cookie,还有token。并且 MS 在设置它的 ttl 时有一个开放的issue。但据我了解,默认情况下,只要浏览器保持会话,它就应该存在......但您可以使用他们的开放代码进行检查:)
-
关于改变行为:您可以覆盖过滤器并重定向到具有相同名称的操作,但使用 HttpGet 而不是返回 400 状态
-
我能够在验证失败后使用以下命令控制结果:
await this._antiforgery.IsRequestValidAsync(HttpContext);。目前这对我来说非常有用,而不是使用内置属性。 -
很高兴它对您有用,但总的来说,最好在任何地方使用一些通用方法,您可以通过将您的实现包装到一个新属性中来完成工作,然后在下面将其描述为任何人的答案否则正在寻找类似的解决方案...
-
为什么需要
AntiForgeryToken?你在这里违背了 AntiForgeryToken 的目的,你最好没有一个,而不是拥有这么长的时间。
标签: c# asp.net-core identityserver4 antiforgerytoken