2016-06-22 9 views
0

Ich habe eine .Net Core RC2 Webanwendung mit VS2015 mit Windows-Authentifizierung erstellt.ASP.NET Core erkennen Mac OS Benutzer

Ich kopierte das Projekt dann auf Mac OSX El Capitan und startete die App über das Terminal.

Die Anwendung startete wie erwartet, jedoch, da die Anwendung auf meinem Mac ausgeführt wird, gibt es keinen Windows-Benutzer zum Anzeigen.

Wie können Sie den Mac-Benutzer zurückgeben und den Namen anzeigen?

Dies wäre auch für Linux-Benutzer nützlich.

Antwort

3

Um den Benutzernamen eines Benutzers erhalten die Website

Sie können von der „Windows-Authentifizierung“ Feature von IIS denken besucht. IIS authentifiziert den Benutzer, der die Website besucht, gegen eine Windows-Domäne und leitet dieses Windows-Authentifizierungstoken anschließend an ASP.NET Core weiter. ASP.NET Core kann diese Funktion nur verwenden, wenn sie mit IIS (oder IIS Express) gehostet wird und die IIS-Integrations-Middleware verwendet. Siehe https://github.com/aspnet/IISIntegration. Da IIS nur Windows ist, ist es nicht möglich, einen Client-Benutzernamen beim Hosten der Website unter Linux oder OSX zu erhalten.

Um den Benutzernamen des Kontos Hosting der Web-Server

Ab .NET-Core 1.0, zu erhalten gibt es keine Cross-Plattform-API für einen Benutzernamen direkt zu bekommen. Wenn Sie Windows verwenden, funktioniert System.Security.Principal.WindowsIdentity, aber das wird PlatformNotSupported auf Linux/MacOS werfen.

Laut Konvention setzen viele Systeme den Benutzernamen in einer Umgebungsvariablen. Sie können System.Environment verwenden, um dies zu holen.

var username = Environment.GetEnvironmentVariable("USERNAME") ?? 
       Environment.GetEnvironmentVariable("USER"); 

Ein anderer aber komplizierter Ansatz ist es, p/aufrufen, um native Systemaufrufe, die Informationen über den Benutzer, wie getpwuid_r (Siehe die Manpages für Linux und OSX.)

+0

Works eine Behandlung zurückbringen, Dank . – shammelburg

+0

Um einen Benutzer für jedes Betriebssystem zurückzugeben, können Sie auch 'User.Identity.Name' hinzufügen -' var username = User.Identity.Name ?? Environment.GetEnvironmentVariable ("USERNAME") ?? Environment.GetEnvironmentVariable ("USER"); ' – shammelburg

+0

@shammelburg Ich habe möglicherweise Ihre ursprüngliche Absicht missverstanden. Möchten Sie den Benutzernamen des Benutzers im Browser abrufen? Oder der Benutzername, auf dem der Server läuft? – natemcmaster