Como obtemos o usuário atual, dentro de uma ação ApiController segura, sem passar o userName ou userId como um parâmetro?
Presumimos que esteja disponível, pois estamos em uma ação segura. Estar em uma ação segura significa que o usuário já se autenticou e a solicitação tem seu token de portador. Dado que o WebApi autorizou o usuário, pode haver uma maneira embutida de acessar o userId, sem ter que passá-lo como um parâmetro de ação.
c#
asp.net
asp.net-web-api
asp.net-identity
Shaun Luttin
fonte
fonte
Respostas:
No WebApi 2, você pode usar
RequestContext.Principal
de dentro de um método no ApiControllerfonte
using Microsoft.AspNet.Identity;
Você também pode acessar o principal usando a
User
propriedade emApiController
.Portanto, as duas declarações a seguir são basicamente as mesmas:
fonte
A dica está no controlador de conta gerado automaticamente Webapi2
Tenha esta propriedade com getter definido como
e para obter UserManager - Em WebApi2 -do como Romanos (leia como AccountController) faça
Deve ser compatível com IIS e modo de auto-host
fonte
Nenhuma das sugestões acima funcionou para mim. O seguinte fez!
Acho que há uma grande variedade de cenários e este funcionou para mim. Meu cenário envolveu um front-end AngularJS e um aplicativo back-end Web API 2, ambos em execução no IIS. Tive que definir os dois aplicativos para serem executados exclusivamente na autenticação do Windows.
Não há necessidade de passar nenhuma informação do usuário. O navegador e o IIS trocam as credenciais do usuário conectado e a API da Web tem acesso às credenciais do usuário sob demanda (presumo do IIS).
fonte
A resposta de Karan Bhandari é boa, mas o AccountController adicionado em um projeto é muito provavelmente a
Mvc.Controller
. Para converter sua resposta para uso em um ApiController, altereHttpContext.Current.GetOwinContext()
paraRequest.GetOwinContext()
e certifique-se de ter adicionado as 2using
declarações a seguir :fonte
Em .Net Core, use
User.Identity.Name
para obter a declaração de Nome do usuário.fonte
User.Identity.Name
obtém o valor da afirmação do nome . Não é específico do Active Directory.Se você estiver usando Asp.Identity UseManager, ele define automaticamente o valor de
com base no IdentityUser que você usa na criação do IdentityDbContext .
Se alguma vez você estiver implementando uma tabela de usuário personalizada e autenticação de portador de token owin, por favor, verifique minha resposta.
Como obter o contexto do usuário durante chamadas de API da Web?
Espero que ainda ajude. :)
fonte
Ou, com base no comentário de Darrel Miller, talvez use isso para recuperar o HttpContext primeiro.
Veja também:
Como acessar HTTPContext de dentro de sua ação de API da Web
fonte