Jak uzyskać aktualnego użytkownika w bezpiecznej akcji ApiController, bez przekazywania userName lub userId jako parametru?
Zakładamy, że jest to możliwe, ponieważ jesteśmy w ramach bezpiecznej akcji. Bycie w bezpiecznej akcji oznacza, że użytkownik został już uwierzytelniony, a żądanie ma jego token okaziciela. Biorąc pod uwagę, że WebApi autoryzowało użytkownika, może istnieć wbudowany sposób dostępu do userId bez konieczności przekazywania go jako parametru akcji.
c#
asp.net
asp.net-web-api
asp.net-identity
Shaun Luttin
źródło
źródło
Odpowiedzi:
W WebApi 2 można używać
RequestContext.Principal
z metody na ApiControllerźródło
using Microsoft.AspNet.Identity;
Możesz również uzyskać dostęp do nazwy głównej za pomocą
User
właściwości wApiController
.Zatem poniższe dwa stwierdzenia są zasadniczo takie same:
źródło
Wskazówka leży w automatycznie generowanym kontrolerze konta Webapi2
Miej tę właściwość z getter zdefiniowanym jako
i aby uzyskać UserManager - w WebApi2 - wykonaj jako Romans (czyt. jako AccountController)
Powinno to być zgodne z usługami IIS i trybem samodzielnego hosta
źródło
Żadna z powyższych sugestii nie zadziałała dla mnie. Następujące zrobiły!
Myślę, że istnieje wiele różnych scenariuszy i ten zadziałał dla mnie. Mój scenariusz obejmował frontend AngularJS i aplikację zaplecza Web API 2, oba działające pod kontrolą IIS. Musiałem ustawić obie aplikacje tak, aby działały wyłącznie z uwierzytelnianiem systemu Windows.
Nie ma potrzeby przekazywania żadnych informacji o użytkowniku. Przeglądarka i usługi IIS wymieniają poświadczenia zalogowanego użytkownika, a interfejs API sieci Web ma dostęp do poświadczeń użytkownika na żądanie (zakładam, że z usług IIS).
źródło
Odpowiedź Karan Bhandari jest dobra, ale AccountController dodany w projekcie to najprawdopodobniej plik
Mvc.Controller
. Aby przekonwertować jego odpowiedź do użycia w ApiController, zmieńHttpContext.Current.GetOwinContext()
naRequest.GetOwinContext()
i upewnij się, że dodano następujące 2using
instrukcje:źródło
W .Net Core użyj,
User.Identity.Name
aby uzyskać nazwę użytkownika.źródło
User.Identity.Name
pobiera wartość roszczenia nazwy . To nie jest specyficzne dla Active Directory.Jeśli używasz Asp.Identity UseManager, automatycznie ustawia wartość
na podstawie IdentityUser, którego używasz podczas tworzenia IdentityDbContext .
Jeśli kiedykolwiek implementujesz niestandardową tabelę użytkowników i uwierzytelnianie na okaziciela tokena, sprawdź moją odpowiedź.
Jak uzyskać kontekst użytkownika podczas wywołań Web Api?
Mam nadzieję, że to nadal pomaga. :)
źródło
Lub w oparciu o komentarz Darrela Millera, może najpierw użyj tego do pobrania HttpContext.
Zobacz też:
Jak uzyskać dostęp do HTTPContext z poziomu akcji interfejsu API sieci Web
źródło