我最近将ASP.NET应用程序从Azure的Active Directory配置切换到ASP.NET Identity。在本地测试时我没有遇到任何问题,但是当我发布到Azure时,我收到以下错误:
类型索赔 ' http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' 要么 ' http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider' 未提供的ClaimsIdentity。启用防伪 令牌支持与基于声明的身份验证,请验证 配置的索赔提供商正在提供这两项索赔 它生成的ClaimsIdentity实例。如果配置了声明 提供者使用不同的声明类型作为唯一标识符, 它可以通过设置静态属性来配置 AntiForgeryConfig.UniqueClaimTypeIdentifier。
就配置而言,我的Azure端是否应该更改一些内容?或者我的代码中还有其他我需要的东西吗?
答案 0 :(得分:1)
如果您没有使用ACS作为STS,那么上述错误几乎可以告诉您解决问题所需的内容。
您需要告诉MVC您要使用哪种声明来唯一标识用户。您可以通过设置AntiForgeryConfig.UniqueClaimTypeIdentifier属性(通常在global.asax中的App_Start中)来执行此操作。例如(假设您要使用nameidentifier作为唯一声明):
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
}