In un progetto API Web sto sostituendo il normale processo di autenticazione per controllare i token. Il codice simile a questa:Perché my ClaimsIdentity IsAuthenticated è sempre false (per Web api Autorizza filtro)?
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;
}
E poi quando applico l'attributo [Authorize]
a un controller, non riesce ad autorizzare.
codice di debug conferma lo stesso comportamento:
// ALWAYS FALSE!
if (HttpContext.Current.User.Identity.IsAuthenticated) {
// do something
}
Perché si pensa che l'utente non è autenticato anche se ho costruito un ClaimsIdentity valido e assegnato al filo?
Sebbene sia possibile aggiungere qualsiasi stringa, secondo MSDN questo dovrebbe essere in genere uno dei valori definiti nella classe AuthenticationTypes. http://msdn.microsoft.com/en-us/library/system.security.claims.claimsidentity.authenticationtype(v=vs.110).aspx –
Esempio: var claimsIdentity = new ClaimsIdentity (rivendicazioni, AuthenticationTypes.Password); –
Il valore della stringa diventa visibile in User.Identity.AuthenticationType –