2017-03-02 5 views
0

J'ai une situation dans laquelle je ne souhaite pas passer l'ID utilisateur connecté dans le paramètre de route API. Par exemple, il existe un point de terminaison WebAPI [GET ou POST] 'api/getUserDetails/{id}'. Cet identifiant est transmis à une autre couche pour obtenir les données de l'utilisateur.Paramètre de routage sécurisé WebAPI 2

public RestResult getUserDetails(int uID) 
{ 
    int uID = getFromHeaderCookie(); 
    var userDetails = someService.GetUserDetail(uID); 
    return userDetails; 
} 

Ici, id est passé en tant que paramètre route et en changeant la valeur Id, tout le monde peut voir les données des autres utilisateurs. Donc maintenant je veux que l'URL soit comme 'api/getUserDetails' et je lis l'ID de l'entête Cookie enregistré au moment de la connexion. en utilisant ActionFilters je peux réussir à obtenir l'Id.

public RestResult getUserDetails() 
    { 
     int uID = getFromHeaderCookie(); 
     var userDetails = someService.GetUserDetail(uID); 
     return userDetails; 
    } 

Cela fonctionne mais ne semble pas bien car il existe d'autres méthodes où je veux sécuriser UserId. Est-il possible de supprimer int uID = getFromHeaderCookie(); et d'utiliser un classeur de modèle personnalisé pour injecter ID utilisateur dans le contrôleur?

Merci à l'avance

Répondre

0

Vous pouvez essayer OAuth, et obtenir des informations utilisateur à partir ClaimsIdentity, juste besoin d'ajouter d'autorisation (comme Bearer AccessToken) lorsque l'URL de la demande.