我使用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'
我没有改变代码中的任何内容,因为它是生成的。可能导致这种情况的原因是什么?
答案 0 :(得分:2)
所以答案就是清除网站的cookie。
据我所知,问题出现了,因为我还在同时开发另一个MVC5应用程序,而且那个使用了一组不同的身份验证代码(基于Active Directory)。
我通过在_LoginPartial类中注释掉@Html.AntiForgeryToken()
行然后加载主页而没有出错来解决这两个应用程序相互干扰。我之后看到的是我已经登录,即使这是应用程序的第一次运行。
清除已解决该问题的cookie,但我绝对不希望两个不同的MVC应用程序共享cookie。但是,这实际上是预期的行为,因为默认情况下,ASP.NET Cookie身份验证将为每个应用程序创建一个名为.AspNet.ApplicationCookie
的cookie。如果您检查ASP站点的cookie,您可以看到:
实际上很容易更改,只需修改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已重命名。