gpt4 book ai didi

c# - 防伪 token 问题已解决但对项目产生影响后很奇怪

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:20 26 4
gpt4 key购买 nike

我有 2 个 Web 应用程序项目,都位于 TFS 源代码管理中。第一个项目不会导致 AntiForgery token 出现问题。

这是错误

System.Web.WebPages.dll 中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理

附加信息:类型为“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier”的声明' 或 ' http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider ' 不存在于提供的 ClaimsIdentity 中。要通过基于声明的身份验证启用防伪 token 支持,请验证配置的声明提供程序是否在其生成的 ClaimsIdentity 实例上提供这两个声明。如果配置的声明提供程序改为使用不同的声明类型作为唯一标识符,则可以通过设置静态属性 AntiForgeryConfig.UniqueClaimTypeIdentifier 对其进行配置。

找到的解决方案是添加

AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimsIdentity.DefaultNameClaimType;

那是不断抛出该错误的项目的 Global.asax.cs 文件,所以我这样做并解决了问题。

但是...现在这就是奇怪的部分出现的地方...当我运行“固定”应用程序时,我以其他 Web 应用程序的用户身份登录。

所以我决定运行另一个应用程序并注意到我仍然登录,所以我注销并停止调试。然后进入“固定”项目并注释掉

AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimsIdentity.DefaultNameClaimType;

并且项目运行正常。

显然,如果我不从其他应用程序注销,则会抛出此错误。

我不知道这是怎么回事,甚至不知道为什么会这样,有什么想法吗?

最佳答案

你收到错误是因为 cookie 存储在 localhost 上,这意味着你运行的任何应用程序都会尝试使用它。要解决此问题,您需要使您的应用程序使用的 cookie 的名称不同。这是通过 CookieName 完成的属性(property)。在App_Start 文件夹中,编辑Startup.Auth.cs 文件(如果您有不同的模板,它的名称可能会有所不同)并添加一行以设置cookie 名称:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
//snip
CookieName = "NameOfYourAppForExample"
});

关于c# - 防伪 token 问题已解决但对项目产生影响后很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40076555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com