首页 > 解决方案 > Identityserver4 登录 ValidateAntiForgeryToken

问题描述

我有 identityserver4 工作,但我遇到了一个我不知道如何解决的问题。我从他们的 GitHub 存储库 ( https://github.com/IdentityServer/IdentityServer4.Templates ) 下载了一个示例项目。使用他们的 IdentityServer4InMem 示例,我能够准确地复制我所经历的。

如果我运行该项目并使用以下 URL 打开两个选项卡: http://localhost:5000/Account/Login

如果登录到选项卡 1,如果我尝试登录到选项卡 2,我会收到 HTTP 错误 400。我研究过它与 ValidateAntiForgeryToken 有关,如果我取消注释,我不会收到错误消息。当然我不能在生产中做到这一点,所以我正在努力寻找解决方案。

标签: c#identityserver4

解决方案


此问题与 Identity Server 无关。

要使用 [ValidateAntiForgeryToken],您需要在 .cshtml 文件中使用 @html.antiforgerytoken(),它会在隐藏字段中创建唯一令牌,但在 .net 核心中,您不需要使用 @html 帮助程序。当您对登录页面发出 HttpGet 请求时,会生成此隐藏字段的令牌,然后在您单击登录按钮时通过。

在您的情况下,当您在浏览器中打开两个选项卡时,它会在获取请求时创建令牌。而且,当您从一个选项卡(HttpPost 请求)登录时,您的身份将从匿名用户更改为某个有效用户,在这种情况下,您以前的匿名用户令牌不再有效,它总是会给您 400 状态。

此功能可防止跨站点请求伪造,从而避免在用户通过身份验证后提交任何表单。


推荐阅读