防伪令牌问题已解决但对项目产生影响后很奇怪
Antiforgery token issue resolved but weird after effect on project
我有 2 个 Web 应用程序项目,都位于 TFS 源代码管理中。第一个项目不会导致 AntiForgery 令牌出现问题。
这是错误
类型 'System.InvalidOperationException' 的异常发生在 System.Web.WebPages.dll 但未在用户代码中处理
附加信息:提供的 ClaimsIdentity 中不存在“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' or 'http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider”类型的声明。要通过基于声明的身份验证启用防伪令牌支持,请验证配置的声明提供程序是否在其生成的 ClaimsIdentity 实例上提供这两个声明。如果配置的声明提供程序改为使用不同的声明类型作为唯一标识符,则可以通过设置静态 属性 AntiForgeryConfig.UniqueClaimTypeIdentifier.
来配置它
找到的解决方案是添加
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimsIdentity.DefaultNameClaimType;
项目的 Global.asax.cs 文件不断抛出该错误,所以我这样做并解决了问题。
但是...现在这就是奇怪的部分出现的地方...当我 运行 "fixed" 应用程序时,我以其他 Web 应用程序的用户身份登录。
所以我决定 运行 另一个应用程序并注意到我仍然登录,所以我注销并停止调试。然后进入"fixed"项目,注释掉
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimsIdentity.DefaultNameClaimType;
和项目 运行 正确。
显然,如果我不从其他应用程序注销,就会抛出此错误。
我不知道这是怎么回事,甚至不知道为什么会这样,有什么想法吗?
您收到错误是因为 cookie 是针对 localhost
存储的,这意味着您 运行 的任何应用程序都会尝试使用它。要解决此问题,您需要使您的应用程序使用的 cookie 的名称不同。这是通过 CookieName
属性 完成的。在 App_Start
文件夹中,编辑 Startup.Auth.cs
文件(如果你有不同的模板,它可能会命名不同)并添加一行以设置 cookie 名称:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
//snip
CookieName = "NameOfYourAppForExample"
});
我有 2 个 Web 应用程序项目,都位于 TFS 源代码管理中。第一个项目不会导致 AntiForgery 令牌出现问题。
这是错误
类型 'System.InvalidOperationException' 的异常发生在 System.Web.WebPages.dll 但未在用户代码中处理
附加信息:提供的 ClaimsIdentity 中不存在“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' or 'http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider”类型的声明。要通过基于声明的身份验证启用防伪令牌支持,请验证配置的声明提供程序是否在其生成的 ClaimsIdentity 实例上提供这两个声明。如果配置的声明提供程序改为使用不同的声明类型作为唯一标识符,则可以通过设置静态 属性 AntiForgeryConfig.UniqueClaimTypeIdentifier.
来配置它找到的解决方案是添加
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimsIdentity.DefaultNameClaimType;
项目的 Global.asax.cs 文件不断抛出该错误,所以我这样做并解决了问题。
但是...现在这就是奇怪的部分出现的地方...当我 运行 "fixed" 应用程序时,我以其他 Web 应用程序的用户身份登录。
所以我决定 运行 另一个应用程序并注意到我仍然登录,所以我注销并停止调试。然后进入"fixed"项目,注释掉
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimsIdentity.DefaultNameClaimType;
和项目 运行 正确。
显然,如果我不从其他应用程序注销,就会抛出此错误。
我不知道这是怎么回事,甚至不知道为什么会这样,有什么想法吗?
您收到错误是因为 cookie 是针对 localhost
存储的,这意味着您 运行 的任何应用程序都会尝试使用它。要解决此问题,您需要使您的应用程序使用的 cookie 的名称不同。这是通过 CookieName
属性 完成的。在 App_Start
文件夹中,编辑 Startup.Auth.cs
文件(如果你有不同的模板,它可能会命名不同)并添加一行以设置 cookie 名称:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
//snip
CookieName = "NameOfYourAppForExample"
});