Comment obtenir l'utilisateur actuel, dans une action ApiController sécurisée, sans passer le userName ou userId en tant que paramètre?
Nous supposons que cela est disponible, car nous sommes dans une action sécurisée. Être dans une action sécurisée signifie que l'utilisateur s'est déjà authentifié et que la demande a son jeton de support. Étant donné que WebApi a autorisé l'utilisateur, il peut y avoir un moyen intégré d'accéder à userId, sans avoir à le passer en tant que paramètre d'action.
c#
asp.net
asp.net-web-api
asp.net-identity
Shaun Luttin
la source
la source
Réponses:
Dans WebApi 2, vous pouvez utiliser à
RequestContext.Principal
partir d'une méthode sur ApiControllerla source
using Microsoft.AspNet.Identity;
Vous pouvez également accéder au principal en utilisant la
User
propriété surApiController
.Les deux déclarations suivantes sont donc fondamentalement les mêmes:
la source
Un indice réside dans le contrôleur de compte généré automatiquement par Webapi2
Définissez cette propriété avec getter comme
et pour obtenir UserManager - Dans WebApi2 - faites comme les Romains (lisez comme AccountController)
Cela devrait être compatible en mode IIS et auto-hôte
la source
Aucune des suggestions ci-dessus n'a fonctionné pour moi. Ce qui suit a fait!
Je suppose qu'il existe une grande variété de scénarios et celui-ci a fonctionné pour moi. Mon scénario impliquait un frontend AngularJS et une application backend Web API 2, tous deux fonctionnant sous IIS. J'ai dû configurer les deux applications pour qu'elles s'exécutent exclusivement sous l'authentification Windows.
Pas besoin de transmettre des informations utilisateur. Le navigateur et IIS échangent les informations d'identification de l'utilisateur connecté et l'API Web a accès aux informations d'identification de l'utilisateur à la demande (à partir d'IIS, je présume).
la source
La réponse de Karan Bhandari est bonne, mais le AccountController ajouté dans un projet est très probablement un
Mvc.Controller
. Pour convertir sa réponse pour une utilisation dans un ApiController changezHttpContext.Current.GetOwinContext()
enRequest.GetOwinContext()
et assurez-vous d'avoir ajouté les 2using
instructions suivantes:la source
Dans .Net Core, utilisez
User.Identity.Name
pour obtenir la revendication de nom de l'utilisateur.la source
User.Identity.Name
obtient la valeur de la revendication de nom . Ce n'est pas spécifique à Active Directory.Si vous utilisez Asp.Identity UseManager, il définit automatiquement la valeur de
basé sur IdentityUser que vous utilisez pour créer IdentityDbContext .
Si jamais vous implémentez une table utilisateur personnalisée et une authentification du porteur de jeton owin, veuillez vérifier ma réponse.
Comment obtenir le contexte utilisateur lors des appels Web Api?
J'espère que ça aide encore. :)
la source
Ou sur la base du commentaire de Darrel Miller, utilisez peut-être ceci pour récupérer d'abord le HttpContext.
Voir également:
Comment accéder à HTTPContext depuis votre action d'API Web
la source