In einem Web-API-Projekt überschreibe ich den normalen Authentifizierungsprozess, um stattdessen Token zu überprüfen. Der Code sieht ungefähr so aus:
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;
}
Und später, wenn ich das [Authorize]
Attribut auf einen Controller anwende, kann es nicht autorisiert werden.
Debug-Code bestätigt das gleiche Verhalten:
// ALWAYS FALSE!
if ( HttpContext.Current.User.Identity.IsAuthenticated ) {
// do something
}
Warum wird der Benutzer nicht authentifiziert, obwohl ich eine gültige ClaimsIdentity erstellt und dem Thread zugewiesen habe?