我们在MVC 5中有一个Web应用程序。它使用OWIN进行身份验证。现在我们得到的情况是,请求可能来自特定服务器,该服务器在http-header中发送用户名(以及一些加密信息以证明它是正确的服务器)。
在上述情况下,应用程序应在头字段中使用给定名称对用户(身份)进行身份验证,而不编写任何cookie或执行其他身份验证操作。我在网上搜索过,在我看来,我必须在FilterConfig中添加一个自定义AuthenticationFilter
,然后能够使用标题字段中找到的特定名称对用户进行身份验证。
测试方面,我尝试使用类似下面的代码来强制进行身份验证,但总是会遇到以下异常:
提供的ClaimsIdentity中没有“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier”或“http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider”类型的声明。要使用基于声明的身份验证启用防伪令牌支持,请验证配置的声明提供程序是否在其生成的ClaimsIdentity实例上提供这两个声明。 ... 的
IAuthenticationFilter
- 实现中的测试代码如下所示:
public void OnAuthentication(AuthenticationContext filterContext) {
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, "test"));
claims.Add(new Claim(ClaimTypes.Email, "test@test.local"));
var identity = new ClaimsIdentity(claims,DefaultAuthenticationTypes.ExternalBearer);
var principal = new ClaimsPrincipal(identity);
filterContext.Principal = principal;
}
我完全走错了轨道还是只是一个小错误?
答案 0 :(得分:2)
这是一个小错误,基本上如果您在MVC中使用AntiForgeryToken,它要求您的身份声明类型为“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier”或“http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider”
最简单的方法就是将nameidentifier设置为您用户的唯一名称。