W projekcie Web API zastępuję zwykły proces uwierzytelniania, aby zamiast tego sprawdzać tokeny. Kod wygląda mniej więcej tak:Dlaczego moje ClaimsIdentity IsAuthenticated zawsze są fałszywe (w przypadku filtra 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;
}
a potem, kiedy stosuje się atrybut [Authorize]
do sterownika, to nie zezwalają.
debugowania kodu potwierdza ten sam problem:
// ALWAYS FALSE!
if (HttpContext.Current.User.Identity.IsAuthenticated) {
// do something
}
Dlaczego uważasz, że użytkownik nie jest uwierzytelniony chociaż mam zbudowany poprawny ClaimsIdentity i przypisać go do wątku?
Mimo że możesz dodać dowolny ciąg znaków, zgodnie z MSDN to zazwyczaj powinna być jedną z wartości zdefiniowanych w klasie AuthenticationTypes. http://msdn.microsoft.com/en-us/library/system.security.claims.claimsidentity.authenticationtype(vsv.110).aspx –
Przykład: var claimsIdentity = new ClaimsIdentity (claim, AuthenticationTypes.Password); –
Wartość ciągu staje się widoczna w User.Identity.AuthenticationType –