我正在一个Web API项目中,为了检查令牌而覆盖了正常的身份验证过程。 代码大致如下:
if ( true ) // validate the token or whatever here
{
var claims = new List<Claim>();
claims.Add( new Claim( ClaimTypes.Name, "MyUser" ) );
claims.Add( new Claim( ClaimTypes.NameIdentifier, "MyUserID" ) );
claims.Add( new Claim( ClaimTypes.Role, "MyRole" ) );
var claimsIdentity = new ClaimsIdentity( claims );
var principal = new ClaimsPrincipal( new[] { claimsIdentity } );
Thread.CurrentPrincipal = principal;
HttpContext.Current.User = principal;
}
然后当我在控制器上应用[Authorize]
属性时,它无法进行授权。
调试代码证实了同样的行为:
// ALWAYS FALSE!
if ( HttpContext.Current.User.Identity.IsAuthenticated ) {
// do something
}
尽管我已经构建了一个有效的ClaimsIdentity并将其分配给线程,为什么它仍然认为用户未经过身份验证?