声明使用具有个人用户身份验证的全新模板网站识别身份防伪例外

时间:2017-08-31 11:22:56

标签: asp.net-mvc asp.net-mvc-5

我使用MVC5网页模板创建一个具有个人用户身份验证的新网站,当我尝试运行它时,我得到:

  

System.InvalidOperationException:'类型声明   ' http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier'   要么   ' http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider'   未提供的ClaimsIdentity。启用防伪   令牌支持与基于声明的身份验证,请验证   配置的索赔提供商正在提供这两项索赔   它生成的ClaimsIdentity实例。如果配置了声明   提供者使用不同的声明类型作为唯一标识符,   它可以通过设置静态属性来配置   AntiForgeryConfig.UniqueClaimTypeIdentifier'

我没有改变代码中的任何内容,因为它是生成的。可能导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:2)

所以答案就是清除网站的cookie。

据我所知,问题出现了,因为我还在同时开发另一个MVC5应用程序,而且那个使用了一组不同的身份验证代码(基于Active Directory)。

我通过在_LoginPartial类中注释掉@Html.AntiForgeryToken()行然后加载主页而没有出错来解决这两个应用程序相互干扰。我之后看到的是我已经登录,即使这是应用程序的第一次运行。

清除已解决该问题的cookie,但我绝对不希望两个不同的MVC应用程序共享cookie。但是,这实际上是预期的行为,因为默认情况下,ASP.NET Cookie身份验证将为每个应用程序创建一个名为.AspNet.ApplicationCookie的cookie。如果您检查ASP站点的cookie,您可以看到:

Default Cookie naming in ASP.Net shown in Chrome Cookie inspector window

实际上很容易更改,只需修改Startup.Configuration中的代码即可设置特定CookieName:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "ApplicationCookie",
            LoginPath = new PathString("/Account/Login"),
            CookieName = "yourCookieName"
        });
    }
}

然后,清除网站的Cookie,再次运行它,您应该会看到Cookie已重命名。