User Identity Name

In meinen Blazor Schulungen drücke ich mich gerne um das Thema Authentifizierung. Erstens sind die 2 Tage ohnehin schon knackig, zweitens ist es eigentlich ein .NET core (.NET 5) Thema und Drittens gibt es so unglaublich viele Varianten.

In beiden Kursen wurde das Intranet als Zielplattform angesprochen. Der Wunsch ist den angemeldeten Windows Benutzer durchzureichen. Etwas was ich praktisch seit Jahrzehnten nicht mehr praktiziere. Die meisten Browser versagten die Unterstützung und Nutzung von außerhalb des Firmennetzes nicht

Erschwerend kommen die zahlreichen Hostingplattformen: Kestrel, IIS Express, IIS und von Docker ganz zu schweigen.

Um das IIS Erlebnis nachzubauen kann man sich selbigen auch auf einer Windows Desktop Maschine installieren. Systemsteuerung – Programme – Windows Features hinzufügen

image

Ich liebe IIS heiß und innig, aber ganz trivial ist das Ding nicht zu konfigurieren. Dazu müssen die .NET core IIS Erweiterungen installiert sein. Zentraler Speicherort der Konfiguration die Datei Web.Config. Hier kann man die Anonyme Anmeldung deaktivieren und Windows aktivieren.

   1:  <system.webServer>
   2:  <security>
   3:    <authentication>
   4:      <anonymousAuthentication enabled="false" />
   5:      <windowsAuthentication enabled="true" />
   6:   </authentication>
   7:  </security>

 

Für den IISExpress wid die Datei launchsettings.json im Projekt genutzt, Diese wird von Visual Studio beim anlegen eines ASP.NET Blazor Projektes erzeugt.

image

Darin werden die identen Einstellungen vorgenommen, eben für den IIS Express lokal.

   1:  {
   2:    "iisSettings": {
   3:      "windowsAuthentication": true,
   4:      "anonymousAuthentication":false,

Nun lässt sich der angemeldete Windows Benutzer per User Objekt auslesen. Noch in der Razor Page _hosts.cshtml des Blazor Projektes.

   1:  <body>
   2:  Name @User.Identity.Name
   3:  <br />
   4:  <component type="typeof(App)"...

Das kann man dann im Browser test ob der Name angezeigt wird. Klappt oder!

Nun wenden wir uns Blazor zu. Da gibt es kein User Objekt, nicht mal einen Http Context, weil das ganze im Hintergrund ja über eine SignalR Connection läuft. Allerdings kann man sich behelfen. Schritt 1 in der startup.cs den Context Accessor beim DI Framework anmelden

   1:  public void ConfigureServices(IServiceCollection services)
   2:   {
   3:  ...
   4:      services.AddHttpContextAccessor();

Als Belohnung kann man nun auf den aktuellen Windows User in der Blazor .razor Component zugreifen. Erst holte man sich eine Referenz aus dem DI Dictionary. Dann lässt sich der HttpContext und daraiuf das User Objekt auslesen.

   1:  @inject IHttpContextAccessor http
   2:  ..
   3:   @http.HttpContext.User.Identity.Name
   4:      

Getestet mit Chrome und Edge. Beim Firefox poppt ein Login Dialog hoch.

Kommentare sind geschlossen