【问题标题】:Antiforgery token issue resolved but weird after effect on project防伪令牌问题已解决,但对项目的影响很奇怪
【发布时间】:2017-02-25 20:33:58
【问题描述】:

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

这是错误

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

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

找到的解决方案是添加

AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimsIdentity.DefaultNameClaimType;

那个项目的 Global.asax.cs 文件一直抛出那个错误,所以我这样做了,它解决了这个问题。

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

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

AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimsIdentity.DefaultNameClaimType;

项目运行正常。

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

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

【问题讨论】:

  • @DavidG,是的。现在我什至无法发布项目
  • @DavidG,我去哪里以及如何去做?顺便说一句,谢谢你的解释
  • @DavidG,谢谢。我做了一些搜索,它很简单:CookieName = "WhateverICallIt";在 Startup.Auth.cs
  • 清理了 cmets 现在一切都在答案中。

标签: c# asp.net asp.net-mvc tfs antiforgerytoken


【解决方案1】:

您收到错误是因为 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"
});

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多