웹 API 프로젝트에서 토큰을 확인하기 위해 일반 인증 프로세스를 무시하고 있습니다. 코드는이 같은 외모 : 나는 컨트롤러에 [Authorize]
속성을 적용 할 때 다음 나중에왜 ClaimsIdentity IsAuthenticated가 항상 false입니까 (웹 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;
}
과, 그것을 승인 실패합니다.
디버그 코드는 동일한 동작을 확인 :
// ALWAYS FALSE!
if (HttpContext.Current.User.Identity.IsAuthenticated) {
// do something
}
왜 내가 유효한 ClaimsIdentity 건설 및 스레드에 할당 한 경우에도 사용자가 인증되지 않은 생각합니까?
MSDN에 따르면 모든 문자열을 추가 할 수 있지만 일반적으로 AuthenticationTypes 클래스에 정의 된 값 중 하나 여야합니다. 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에 표시됩니다. –