Wie erhalten wir den aktuellen Benutzer innerhalb einer sicheren ApiController-Aktion, ohne den Benutzernamen oder die Benutzer-ID als Parameter zu übergeben?
Wir gehen davon aus, dass dies verfügbar ist, da wir uns in einer sicheren Aktion befinden. Wenn Sie sich in einer sicheren Aktion befinden, hat sich der Benutzer bereits authentifiziert und die Anfrage hat ihr Inhaber-Token. Da WebApi den Benutzer autorisiert hat, gibt es möglicherweise eine integrierte Möglichkeit, auf die Benutzer-ID zuzugreifen, ohne sie als Aktionsparameter übergeben zu müssen.
c#
asp.net
asp.net-web-api
asp.net-identity
Shaun Luttin
quelle
quelle
Antworten:
In WebApi 2 können Sie
RequestContext.Principal
innerhalb einer Methode auf ApiController verwendenquelle
using Microsoft.AspNet.Identity;
Sie können auch über die
User
Eigenschaft auf auf den Principal zugreifenApiController
.Die folgenden zwei Aussagen sind also grundsätzlich gleich:
quelle
Hinweis liegt in Webapi2 automatisch generierten Account Controller
Haben Sie diese Eigenschaft mit Getter definiert als
und um UserManager - In WebApi2 zu erhalten - tun Sie es wie Römer (gelesen als AccountController)
Dies sollte im IIS- und Self-Host-Modus kompatibel sein
quelle
Keiner der oben genannten Vorschläge hat bei mir funktioniert. Folgendes hat getan!
Ich denke, es gibt eine Vielzahl von Szenarien und diese hat für mich funktioniert. Mein Szenario umfasste ein AngularJS-Frontend und eine Web API 2-Backend-Anwendung, die beide unter IIS ausgeführt wurden. Ich musste beide Anwendungen so einstellen , dass sie ausschließlich unter Windows-Authentifizierung ausgeführt werden.
Keine Notwendigkeit, Benutzerinformationen weiterzugeben. Der Browser und IIS tauschen die angemeldeten Benutzeranmeldeinformationen aus, und die Web-API hat bei Bedarf Zugriff auf die Benutzeranmeldeinformationen (von IIS, nehme ich an).
quelle
Karan Bhandaris Antwort ist gut, aber der in einem Projekt hinzugefügte AccountController ist sehr wahrscheinlich a
Mvc.Controller
. Um seine Antwort für die Verwendung in einem ApiControllerHttpContext.Current.GetOwinContext()
zu konvertieren, ändern Sie dieseRequest.GetOwinContext()
und stellen Sie sicher, dass Sie die folgenden 2using
Anweisungen hinzugefügt haben :quelle
Verwenden Sie
User.Identity.Name
in .Net Core , um den Namensanspruch des Benutzers abzurufen.quelle
User.Identity.Name
Ruft den Wert des Namensanspruchs ab . Es ist nicht Active Directory-spezifisch.Wenn Sie Asp.Identity UseManager verwenden, wird der Wert von automatisch festgelegt
basierend auf IdentityUser, den Sie beim Erstellen des IdentityDbContext verwenden .
Wenn Sie jemals eine benutzerdefinierte Benutzertabelle implementieren und eine Token-Inhaber-Authentifizierung besitzen, überprüfen Sie bitte meine Antwort.
Wie erhalte ich den Benutzerkontext während Web-API-Aufrufen?
Hoffe es hilft noch. :) :)
quelle
Oder verwenden Sie dies basierend auf Darrel Millers Kommentar, um zuerst den HttpContext abzurufen.
Siehe auch:
So greifen Sie über Ihre Web-API-Aktion auf HTTPContext zu
quelle