Freigeben über


Tutorial: Konfigurieren einer ASP.NET Core-Web-App für die Autorisierung und Authentifizierung

Gilt für: Grüner Kreis mit einem weißen Häkchensymbol. Arbeitsgruppenmandanten Grüner Kreis mit einem weißen Häkchensymbol. Externe Mandanten (weitere Informationen)

In diesem Tutorial fügen Sie die Authentifizierungs- und Autorisierungselemente zu einer ASP.NET Core-Web-App hinzu. Im vorherigen Tutorial haben Sie ein ASP.NET Core-Projekt erstellt und für die Authentifizierung konfiguriert.

In diesem Tutorial erfahren Sie:

  • Hinzufügen von Autorisierungs- und Authentifizierungselementen zum Code
  • Aktivieren der Anzeige von Ansprüchen in einem ID-Token
  • Hinzufügen der An- und Abmeldefunktionen

Voraussetzungen

Hinzufügen von Authentifizierungs- und Autorisierungselementen

Die HomeController.cs - und Program.cs Dateien müssen geändert werden, um die Authentifizierungs- und Autorisierungselemente der ASP.NET Core-Web-App hinzuzufügen. Dazu gehören das Verwalten der Startseite, das Hinzufügen der richtigen Namespaces und das Konfigurieren der Anmeldung.

Hinzufügen der Autorisierung zu HomeController.cs

Die Startseite der Anwendung muss über die Möglichkeit verfügen, den Benutzer zu autorisieren. Der Microsoft.AspNetCore.Authorization Namespace stellt die Klassen und Schnittstellen bereit, um die Autorisierung für die Web-App zu implementieren. Das [Authorize] Attribut wird verwendet, um anzugeben, dass nur authentifizierte Benutzer die Web-App verwenden können.

  1. Öffnen Sie in Ihrer Web-App Controller/HomeController.cs, und fügen Sie den folgenden Codeausschnitt am Anfang der Datei hinzu:

    using System.Diagnostics;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    using dotnetcore_webapp.Models;
    
  2. Fügen Sie das [Authorize] Attribut über der HomeController Klassendefinition hinzu, wie im folgenden Codeausschnitt gezeigt:

    [Authorize]
    public class HomeController : Controller
    {
    ...
    

Hinzufügen von Authentifizierungs- und Autorisierungselementen zu Program.cs

Die Program.cs Datei ist der Einstiegspunkt der Anwendung und muss geändert werden, um der Web-App Authentifizierung und Autorisierung hinzuzufügen. Dienste müssen hinzugefügt werden, damit die App die in appsettings.json definierten Einstellungen für die Authentifizierung verwenden kann.

  1. Fügen Sie die folgenden Namespaces am Anfang der Datei hinzu.

    using Microsoft.AspNetCore.Authentication.OpenIdConnect;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc.Authorization;
    using Microsoft.Identity.Web;
    using Microsoft.Identity.Web.UI;
    using System.IdentityModel.Tokens.Jwt;
    
  2. Fügen Sie als Nächstes den Microsoft Identity Web-App-Authentifizierungsdienst hinzu, der die App für die Verwendung von Microsoft Identity für die Authentifizierung konfiguriert.

    // Add services to the container.
    builder.Services.AddControllersWithViews();
    
    // This is required to be instantiated before the OpenIdConnectOptions starts getting configured.
    // By default, the claims mapping will map claim names in the old format to accommodate older SAML applications.
    // This flag ensures that the ClaimsIdentity claims collection will be built from the claims in the token
    JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
    
    // Sign-in users with the Microsoft identity platform
    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(builder.Configuration)
        .EnableTokenAcquisitionToCallDownstreamApi()
        .AddInMemoryTokenCaches();
    
    builder.Services.AddControllersWithViews(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .Build();
        options.Filters.Add(new AuthorizeFilter(policy));
    }).AddMicrosoftIdentityUI();
    
    
  3. Als Nächstes muss die Middleware konfiguriert werden, um die Authentifizierungsfunktionen zu aktivieren. Ersetzen Sie den Rest des Codes durch den folgenden Codeausschnitt.

    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Home/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    app.UseAuthorization();
    
    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    
    app.Run();
    

Hinzufügen der An- und Abmeldefunktionen

Die Benutzeroberfläche muss aktualisiert werden, um eine benutzerfreundlichere Erfahrung für die An- und Abmeldung zu bieten. In diesem Abschnitt wird gezeigt, wie Sie eine neue Datei erstellen, in der Navigationselemente basierend auf dem Authentifizierungsstatus des Benutzers angezeigt werden. Der Code liest die ID-Token-Ansprüche, um zu überprüfen, ob der Benutzer authentifiziert ist, und verwendet User.Claims, um ID-Token-Ansprüche zu extrahieren.

  1. Erstellen Sie eine neue Datei in Ansichten/Freigegeben, und geben Sie ihr den Namen _LoginPartial.cshtml.

  2. Öffnen Sie die Datei, und fügen Sie den folgenden Code zum Hinzufügen der An- und Abmeldeoberfläche hinzu:

    @using System.Security.Principal
    
    <ul class="navbar-nav">
    @if (User.Identity is not null && User.Identity.IsAuthenticated)
    {
            <li class="nav-item">
                <span class="nav-link text-dark">Hello @User.Claims.First(c => c.Type == "preferred_username").Value!</span>
            </li>
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
            </li>
    }
    else
    {
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
            </li>
    }
    </ul>
    
  3. Öffnen Sie Views/Shared/_Layout.cshtml , und fügen Sie einen Verweis auf _LoginPartial die im vorherigen Schritt erstellte Datei hinzu. Platzieren Sie dies am Ende der navbar-nav Klasse, wie im folgenden Codeausschnitt gezeigt:

    <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
        <ul class="navbar-nav flex-grow-1">
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
            </li>
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
            </li>
        </ul>
        <partial name="_LoginPartial" />
    </div>
    

Verwenden einer benutzerdefinierten URL-Domäne (optional)

Gilt für: Weißer Kreis mit einem grauen X-Symbol. Mitarbeitermieter Grüner Kreis mit einem weißen Häkchensymbol. Externe Mieter (weitere Informationen)

Verwenden Sie eine benutzerdefinierte Domäne, um die Authentifizierungs-URL vollständig zu kennzeichnen. Aus Nutzersicht verbleiben Benutzer während des Authentifizierungsprozesses in Ihrer Domain und werden nicht auf den ciamlogin.com Domainnamen umgeleitet.

Führen Sie die folgenden Schritte aus, um eine benutzerdefinierte Domäne zu verwenden:

  1. Führen Sie die Schritte unter Aktivieren benutzerdefinierter URL-Domänen für Apps in externen Mandanten aus, um eine benutzerdefinierte URL-Domäne für Ihren externen Mandanten zu aktivieren.

  2. Öffnen sie appsettings.json Datei:

    1. Aktualisieren Sie die InstanceTenantId und-Parameter auf eine Authority Eigenschaft.
    2. Fügen Sie dem Authority Wert die folgende Zeichenfolge hinzu https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here. Ersetzen Sie sie Enter_the_Custom_Domain_Here durch Ihre benutzerdefinierte URL-Domäne und Enter_the_Tenant_ID_Here durch Ihre Mandanten-ID. Wenn Sie Ihre Mandanten-ID nicht kennen, finden Sie weitere Informationen unter Auslesen der Details Ihres Mandanten.
    3. Fügen Sie eine knownAuthorities Eigenschaft mit dem Wert [Enter_the_Custom_Domain_Here] hinzu.

Nachdem Sie die Änderungen an Ihrer appsettings.json Datei vorgenommen haben, wenn Ihre benutzerdefinierte URL-Domäne login.contoso.com ist und Ihre Mandanten-ID aaaabbbb-0000-cccc-1111-ddddd222eeeee ist, sollte die Datei ähnlich wie der folgende Codeausschnitt aussehen:

{
  "AzureAd": {
    "Authority": "https://login.contoso.com/aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "ClientId": "Enter_the_Application_Id_Here",
    "ClientCertificates": [
      {
        "SourceType": "StoreWithThumbprint",
        "CertificateStorePath": "CurrentUser/My",
        "CertificateThumbprint": "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"
      }   
    ],
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-callback-oidc",
    "KnownAuthorities": ["login.contoso.com"]
    ...

Nächster Schritt