Set AUFTRAGGEBER/Benutzer-Kontext zu einem Objekt

Meinen WebAPI 2 Anwendung eine benutzerdefinierte Autorisierungs-filter, welche Prüfungen für einen access-token. Wenn das token vorhanden ist, und die API hat das Attribut, dann kann ich überprüfen, ob es existiert ein Benutzer die Karten an das token an.

Aufgrund der Natur der API, die meisten Methoden laufen im Kontext eines bestimmten Benutzers (z.B. "POST-api/Profil" zu aktualisieren, das Profil eines Benutzers). Um dies zu tun, benötige ich Informationen über die Zielgruppe, die ich aus der access-token.

[Aktuelle Implementierung, geschieht im Attribut vom Typ AuthorizeAttribute]

if( myDBContext.MyUsers.Count( x => x.TheAccessToken == clientProvidedToken ) ){
    IPrincipal principal = new GenericPrincipal( new GenericIdentity( myAccessToken ), new string[] { "myRole" } );
    Thread.CurrentPrincipal = principal;
    HttpContext.Current.User = principal;
    return true;
}

Dies funktioniert gut, und ich bin in der Lage, verwenden Sie dann den access token für eine zweite Suche in der Methode. Da ich aber bereits ein lookup auf auth-Zeit möchte ich nicht verschwenden eine andere DB aufrufen.

[Was ich gerne tun würde (aber offensichtlich nicht funktioniert)]

MyUser user = myDBContext.MyUsers.FirstOrDefault( x => x.TheAccessToken == clientProvidedToken );
if( user != null ){
    //Set *SOME* property to the User object, such that it can be
    //access in the body of my controller method
    //(e.g. /api/profile uses this object to load data)
    HttpContext.Current.User = user;
    return true;
}
InformationsquelleAutor ShaneC | 2013-10-28
Schreibe einen Kommentar