2016-04-08 7 views
0

Ich habe eine REST-API bereits eingerichtet und läuft. Jetzt versuche ich einen Log-Service zu machen.Get Windows angemeldet Benutzer REST Web Api

Die Idee besteht darin, eine Datenbank-Tabelle alle Operationen anzumelden, die vom Benutzer in der Client-App vorgenommen wurden.

Da es für den internen Gebrauch (nur im Intranet) verwendet wird, verwende ich Windows-Authentifizierung (<authentication mode="Windows" />).

Der Protokolldienst arbeitet bereits mit einem Problem. Ich kann den angemeldeten Benutzer nicht erreichen.

Wenn ich die API und die Client-App auf meinem lokalen Computer ausführen, kann ich meinen Benutzer abrufen. Aber wenn ich publiziere, kann ich nicht.

Was ich schon versucht:

string userName = WindowsIdentity.GetCurrent().Name; 

string userName = HttpContext.Current.User.Identity.Name; 

string userName = HttpContext.Current.Request.LogonUserIdentity.Name; 

string userName = Environment.UserName; 

ich alle Arten von Benutzernamen (IUSR, IIS APPPOOL\MyApi, MyApi und auch leer), aber nicht der Benutzer angemeldet Fenster.

Ich habe Windows-Authentifizierung auf IIS aktivieren.

Kann mir jemand sagen, ob das möglich ist? Und wenn ja, wie?

+1

Haben Sie sichergestellt, dass die Standardauthentifizierung deaktiviert ist? Es reicht nicht aus, die Windows-Authentifizierung zu aktivieren, Sie müssen auch die Standardauthentifizierung deaktivieren. Dann sollten die auf HttpContext basierenden funktionieren. Die anderen dienen zum Abrufen des Benutzernamens des Prozesses auf dem Server. – Kevin

+0

Ja, sowohl die grundlegende als auch die anonyme Authentifizierung sind deaktiviert. – lpfx

Antwort

0

In IIS gibt es unter der Authentifizierung/Windows-Authentifizierung eine Aktion "Providers ...". Klicken Sie darauf und bewegen Sie NTLM über Negotiate. Ich musste dies in der Vergangenheit tun, um die Identität des aktuellen Benutzers anstelle der Identität des Anwendungspools zu erhalten.

+0

Ich habe es versucht, aber es hat nicht funktioniert. Vielen Dank. – lpfx

3

Mit der REST-API wird die ASP.Net-Web-API bezeichnet.

Wenn dies der Fall ist, wird User.Identity.Name den Benutzernamen des aktuell authentifizierten Benutzers zurückgeben.

Wenn Sie Ihrem Controller (oder bestimmten Aktionen) nicht das Attribut [Autorisieren] hinzugefügt haben, würde ich dies tun, um den anonymen Zugriff zu verhindern, der Ihnen möglicherweise anzeigt, dass Ihre Konfiguration nicht richtig eingerichtet ist. Wenn dies der Fall ist (wie ich die Hypothese aufstelle), wurden diese Tests mit anonym verbundenen Benutzern durchgeführt.

+0

Wenn ich dem Controller das '[Authorize]' - Attribut hinzufüge und eine Aktion von meiner Client-App aus anrufe, bekomme ich einen 401 (nicht autorisierten) Fehler. Aber wenn ich die URL in meinem Browser eintippe, erhalte ich die Aufforderung, meine Zugangsdaten einzugeben. Wie kann ich die Eingabeaufforderung erhalten, wenn der Client das API zum ersten Mal aufruft? – lpfx

+0

Der Client ist eine App mit kendo ui (Javascript). – lpfx

+0

Vorausgesetzt, Ihre ACL ist ordnungsgemäß eingerichtet, übergibt nur IE NTLM standardmäßig ohne Aufforderung. Ich nehme an, Sie haben mit dieser Annahme nicht mit IE getestet. Für jeden anderen Browser müssen Sie entweder diese Anmeldeinformationen eingeben ODER eine Browsererweiterung und eine Whitelist verwenden, um NTLM-Anmeldeinformationen an diese Site weiterzuleiten. – Bon