我们在MVC 5中有一个Web应用程序。它使用OWIN进行身份验证。现在,我们有了这样的情况:请求可能来自特定的服务器,该服务器在http-header中发送用户名(以及一些密码信息,以证明它是正确的服务器)。
在上述情况下,应用程序应在标题字段中使用给定名称对用户(身份)进行身份验证,而无需编写任何cookie或执行其他身份验证操作。我已经在网上搜索过,在我看来,我必须AuthenticationFilter
在FilterConfig中添加一个自定义,然后才能使用在标题字段中找到的特定名称对用户进行身份验证。
测试方面,我尝试了如下所示的代码来强制进行身份验证,但是始终会收到以下异常:
类型为“ http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier ”或“ http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider ”的声明为在提供的ClaimsIdentity上不存在。要通过基于声明的身份验证启用防伪令牌支持,请验证已配置的声明提供程序是否在其生成的ClaimsIdentity实例上同时提供了这两个声明。...
IAuthenticationFilter
-implementation中的测试代码如下所示:
public void OnAuthentication(AuthenticationContext filterContext) {
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, "test"));
claims.Add(new Claim(ClaimTypes.Email, "[email protected]"));
var identity = new ClaimsIdentity(claims,DefaultAuthenticationTypes.ExternalBearer);
var principal = new ClaimsPrincipal(identity);
filterContext.Principal = principal;
}
我是完全走错了路吗还是只是一个小错误?
这是一个小错误,基本上,如果您在MVC中使用AntiForgeryToken,则要求您的身份具有类型为' http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier '或' http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider '
最简单的事情就是将nameidentifier设置为用户唯一的名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句