Jeu de Capital/Contexte de l'Utilisateur à un Objet Utilisateur

Mon WebAPI 2 application a une coutume autorisation filtre qui recherche un jeton d'accès. Si le jeton est présent, et de l'API a l'attribut, puis-je vérifier s'il existe un utilisateur qui correspond à ce jeton.

En raison de la nature de l'API, la plupart des méthodes sont exécutées dans le contexte d'un utilisateur en particulier (c'est à dire "POST api/profil" pour mettre à jour un profil utilisateur). Pour ce faire, j'ai besoin d'informations sur la cible de l'utilisateur que je reçois dans le jeton d'accès.

[En cours de mise en Œuvre, qui se passe à l'intérieur de l'attribut de type 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;
}

Cela fonctionne très bien, et je suis en mesure d'utiliser ensuite le jeton d'accès pour faire une deuxième recherche dans la Méthode. Mais depuis que je l'ai déjà effectuer une recherche à l'auth temps, je ne veux pas perdre une autre DB appel.

[Ce que j'aimerais faire (mais de toute évidence ne fonctionne pas)]

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;
}

OriginalL'auteur ShaneC | 2013-10-28

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *