在Web API項目中,我重寫了正常的身份驗證過程來檢查令牌。該代碼看起來是這樣的:爲什麼我的ClaimsIdentity始終是false(對於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並將其分配給線程?
儘管您可以添加任何字符串,但根據MSDN通常應該是AuthenticationTypes類中定義的值之一。 http://msdn.microsoft.com/zh-cn/library/system.security.claims.claimsidentity.authenticationtype(v=vs.110).aspx –
示例:var claimsIdentity = new ClaimsIdentity(claims,AuthenticationTypes.Password); –
字符串的值在User.Identity.AuthenticationType –