Web APIプロジェクトでは、代わりにトークンをチェックするための通常の認証プロセスをオーバーライドしています。コードは次のようになります。なぜ私のClaimsIdentity IsAuthenticatedは常にfalseです(Web API Authorizeフィルタ用)?
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クラスで定義されている値の1つである必要があります。 http://msdn.microsoft.com/en-us/library/system.security.claims.claimsidentity.authenticationtype(v=vs.110).aspx –
例:var claimsIdentity = new ClaimsIdentity(claims、AuthenticationTypes.Password); –
文字列の値がUser.Identity.AuthenticationTypeに表示されます –