C# Identityserver4登录验证AntiforgeryToken

C# Identityserver4登录验证AntiforgeryToken,c#,identityserver4,C#,Identityserver4,我的identityserver4正在工作,但我面临一个不知道如何解决的问题。我从他们的GitHub repo下载了一个示例项目。使用他们的IdentityServer4InMem示例,我能够准确地复制我的体验 如果我运行项目并打开两个具有以下url的选项卡: 如果登录到选项卡1,如果我尝试登录到选项卡2,我会收到HTTP错误400。 我已经研究过它与ValidateAntiForgeryToken有关,如果我去掉注释,我不会得到错误。当然,我在生产中无法做到这一点,因此我正在尝试找到解决方案

我的identityserver4正在工作,但我面临一个不知道如何解决的问题。我从他们的GitHub repo下载了一个示例项目。使用他们的IdentityServer4InMem示例,我能够准确地复制我的体验

如果我运行项目并打开两个具有以下url的选项卡:

如果登录到选项卡1,如果我尝试登录到选项卡2,我会收到HTTP错误400。
我已经研究过它与ValidateAntiForgeryToken有关,如果我去掉注释,我不会得到错误。当然,我在生产中无法做到这一点,因此我正在尝试找到解决方案。

此问题与Identity Server无关

要使用[ValidateAntiForgeryToken],您需要在.cshtml文件中@html.antiforgerytoken,该文件在隐藏字段中创建一个唯一的标记,但在.net core中,您不需要使用@html helper。当您对登录页面发出HttpGet请求时,会生成此隐藏字段的标记,然后当您单击登录按钮时,它就会通过

在您的情况下,当您在浏览器中打开两个选项卡时,它会在get请求上创建令牌。当您从一个选项卡HttpPost请求登录时,您的身份将从匿名用户更改为某个有效用户。在这种情况下,您以前的匿名OS用户令牌将不再有效,它将始终为您提供400状态


此功能可防止在用户通过身份验证后提交任何表单。

Mahesh更多感谢您对问题的精彩解释,我仍然需要解决方法。这与Identity Server有关。我知道Identity Server没有代码问题。在我的例子中,一个用户有多个授权给他们的应用程序,如果他们有4个标签,每个标签上打开一个应用程序。我有一个空闲检查程序,当他们空闲时,它会将他们注销。假设他们空闲了,当他们回来时,他们在所有4个选项卡的登录屏幕上,一旦他们登录其中一个选项卡,他们就会在所有其他3个选项卡上得到错误。我只是想找份工作。再次感谢您的解释。如果您仍然认为它与Identity Server有关,请尝试从[HttpPost]方法中删除[ValidateAntiForgeryToken]属性,一切都会按照您的预期工作。是的,我确实删除了注释,它也可以工作,但我认为这不是正确的方法。我会做更多的研究,看看我是否能发现用户是否经过身份验证。我会尝试找到他们试图登录的应用程序,然后将他们重定向到那里。你使用的是.Net core还是.Net standard?若您使用的是.Net标准,则可以捕获HttpAntiforyException,若用户已通过身份验证,则可以将该用户重定向到登录页面。在登录页面中,验证用户是否已通过身份验证,然后将taht user重定向回returnUrl。您可以像下面这样更新您的登录[HttpGet]。[HttpGet]公共异步任务登录安装returnUrl{//如果用户已通过身份验证,则无需再次登录,因此我们可以将用户重定向到返回URL。如果user.Identity.IsAuthenticated{return RedirectreturnUrl;}//to Do}只是为了更新,我可以使用此示例来解决我的问题。