c# - Identityserver4 登录 ValidateAntiForgeryToken
问题描述
我有 identityserver4 工作,但我遇到了一个我不知道如何解决的问题。我从他们的 GitHub 存储库 ( https://github.com/IdentityServer/IdentityServer4.Templates ) 下载了一个示例项目。使用他们的 IdentityServer4InMem 示例,我能够准确地复制我所经历的。
如果我运行该项目并使用以下 URL 打开两个选项卡: http://localhost:5000/Account/Login
如果登录到选项卡 1,如果我尝试登录到选项卡 2,我会收到 HTTP 错误 400。我研究过它与 ValidateAntiForgeryToken 有关,如果我取消注释,我不会收到错误消息。当然我不能在生产中做到这一点,所以我正在努力寻找解决方案。
解决方案
此问题与 Identity Server 无关。
要使用 [ValidateAntiForgeryToken],您需要在 .cshtml 文件中使用 @html.antiforgerytoken(),它会在隐藏字段中创建唯一令牌,但在 .net 核心中,您不需要使用 @html 帮助程序。当您对登录页面发出 HttpGet 请求时,会生成此隐藏字段的令牌,然后在您单击登录按钮时通过。
在您的情况下,当您在浏览器中打开两个选项卡时,它会在获取请求时创建令牌。而且,当您从一个选项卡(HttpPost 请求)登录时,您的身份将从匿名用户更改为某个有效用户,在这种情况下,您以前的匿名用户令牌不再有效,它总是会给您 400 状态。
此功能可防止跨站点请求伪造,从而避免在用户通过身份验证后提交任何表单。
推荐阅读
- django - Django 管理模板错误
- c++ - Qt 使小部件的字体大小与分辨率无关
- google-cloud-platform - 云函数设置限制最大实例
- .net - Docker compose 未为 appsettings.json 部分设置数组环境设置
- docker - Docker 保护包含二进制文件和源代码的镜像和容器
- spring-boot - 从 GCP-Datastore 获取 LIST 的数据
- git - 如何使用 git cherry pick 继续
- sql - 如何编写 SQL 查询以根据另一列 2 的值返回列 1 值
- python - 发生 OOM 时,HPC 上的 MultiWorkerMirroredStrategy 挂起
- php - Ubuntu Phpmyadmin - 没有收到要导入的数据。要么没有提交文件名,