¿Cómo obtenemos el usuario actual, dentro de una acción segura de ApiController, sin pasar el nombre de usuario o el ID de usuario como parámetro?
Asumimos que esto está disponible, porque estamos dentro de una acción segura. Estar en una acción segura significa que el usuario ya se ha autenticado y la solicitud tiene su token de portador. Dado que WebApi ha autorizado al usuario, puede haber una forma integrada de acceder al userId, sin tener que pasarlo como un parámetro de acción.
c#
asp.net
asp.net-web-api
asp.net-identity
Shaun Luttin
fuente
fuente
Respuestas:
En WebApi 2 puede usar
RequestContext.Principal
desde un método en ApiControllerfuente
using Microsoft.AspNet.Identity;
También puede acceder al principal utilizando la
User
propiedad enApiController
.Entonces, las siguientes dos declaraciones son básicamente las mismas:
fuente
La pista radica en el controlador de cuenta generado automáticamente Webapi2
Tener esta propiedad con getter definido como
y para obtener UserManager - En WebApi2 -hace como Romanos (lea como AccountController) haga
Esto debería ser compatible en IIS y en modo de autohost
fuente
Ninguna de las sugerencias anteriores funcionó para mí. ¡Lo siguiente hizo!
Supongo que hay una amplia variedad de escenarios y este funcionó para mí. Mi escenario involucró una interfaz AngularJS y una aplicación de backend Web API 2, ambas ejecutándose bajo IIS. Tuve que configurar ambas aplicaciones para que se ejecutaran exclusivamente bajo la autenticación de Windows.
No es necesario pasar ninguna información de usuario. El navegador y IIS intercambian las credenciales del usuario que ha iniciado sesión y la API web tiene acceso a las credenciales del usuario a pedido (de IIS, supongo).
fuente
La respuesta de Karan Bhandari es buena, pero es muy probable que el AccountController agregado en un proyecto sea un
Mvc.Controller
. Para convertir su respuesta para su uso en un cambio ApiControllerHttpContext.Current.GetOwinContext()
aRequest.GetOwinContext()
y asegúrese de que haya añadido los 2 siguientesusing
afirmaciones:fuente
En .Net Core, se usa
User.Identity.Name
para obtener el reclamo de nombre del usuario.fuente
User.Identity.Name
obtiene el valor de la reclamación de nombre . No es específico de Active Directory.Si está utilizando Asp.Identity UseManager, establece automáticamente el valor de
basado en IdentityUser que utiliza para crear IdentityDbContext .
Si alguna vez está implementando una tabla de usuario personalizada y una autenticación de portador de token propio, verifique mi respuesta.
¿Cómo obtener el contexto del usuario durante las llamadas de Web Api?
Espero que todavía ayude. :)
fuente
O según el comentario de Darrel Miller, tal vez use esto para recuperar primero el HttpContext.
Ver también:
Cómo acceder a HTTPContext desde la acción de su API web
fuente