Freigeben über


Einrichtung der externen Anmeldung mit Microsoft-Konto in ASP.NET Core

Von Valeriy Novytskyy und Rick Anderson

In diesem Beispiel wird gezeigt, wie Benutzer sich mit ihrem Geschäfts-, Schul- oder persönlichen Microsoft-Konto mit dem ASP.NET Core-Projekt anmelden können, das auf der vorherigen Seite erstellt wurde.

Erstellen der App im Microsoft Entra Admin Center

Client Secret erstellen

Generieren Sie einen geheimen Clientschlüssel im Microsoft Entra Admin Center, indem Sie die Schritte in Registrieren einer Anwendung bei der Microsoft Identity Platform ausführen: Hinzufügen von Anmeldeinformationen.

Speichern der Microsoft-Client-ID und des geheimen Schlüssels

Speichern Sie vertrauliche Einstellungen wie die Microsoft -Anwendungs-ID (Client-ID) und Geheime Clientschlüssel, die im vorherigen Schritt mit dem Secret Manager erstellt wurden. Führen Sie für dieses Beispiel die folgenden Schritte aus:

  1. Initialisieren Sie das Projekt für den geheimen Speicher gemäß den Anweisungen unter Aktivieren des geheimen Speichers.

  2. Speichern Sie die vertraulichen Einstellungen im lokalen geheimen Speicher mit den geheimen Schlüsseln Authentication:Microsoft:ClientId und Authentication:Microsoft:ClientSecret. Die <client-id> wird im Bereich "Azure App-Registrierungen" unter Anwendungs-ID (Client-ID)aufgeführt. Das <client-secret> ist unter Zertifikate und Geheimnisse als Wert aufgeführt, nicht die Geheimnis-ID.

    dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
    

Das Trennzeichen : funktioniert nicht auf allen Plattformen mit den hierarchischen Schlüsseln von Umgebungsvariablen. Beispielsweise wird das Trennzeichen : von Bash nicht unterstützt. Der doppelte Unterstrich, __, ist:

  • Unterstützt von allen Plattformen.
  • Automatisch durch einen Doppelpunkt :, ersetzt.

Konfigurieren der Microsoft-Kontoauthentifizierung

Fügen Sie den Authentifizierungsdienst zum Programhinzu:

builder.Services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
    microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
    microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
});

Die AddAuthentication(IServiceCollection, String)-Überladung legt die DefaultScheme-Eigenschaft fest. Die AddAuthentication(IServiceCollection, Action<AuthenticationOptions>)-Überladung ermöglicht das Konfigurieren von Authentifizierungsoptionen, die zum Einrichten von Standardauthentifizierungsschemas für verschiedene Zwecke verwendet werden können. Nachfolgende Aufrufe von AddAuthentication setzen zuvor konfigurierte AuthenticationOptions Eigenschaften außer Kraft.

AuthenticationBuilder Erweiterungsmethoden, die einen Authentifizierungshandler registrieren, können nur einmal pro Authentifizierungsschema aufgerufen werden. Überladungen sind vorhanden, die das Konfigurieren der Schemaeigenschaften, des Schemanamens und des Anzeigenamens ermöglichen.

Weitere Informationen zu konfigurationsoptionen, die von der Microsoft-Kontoauthentifizierung unterstützt werden, finden Sie in der MicrosoftAccountOptions API-Referenz. Dies kann verwendet werden, um unterschiedliche Informationen über den Benutzer anzufordern.

Anmelden mit Microsoft-Konto

  • Führen Sie die App aus, und wählen Sie Anmelden aus. Eine Option zum Anmelden mit Microsoft wird angezeigt.
  • Wählen Sie die Option "Bei Microsoft anmelden", um zur Authentifizierung zu Microsoft zu navigieren. Nachdem Sie sich mit Ihrem Microsoft-Konto angemeldet haben, werden Sie gebeten, der App den Zugriff auf Ihre Informationen zu erlauben.
  • Wählen Sie Ja aus, um zurück zur Website zu navigieren, auf der Ihre E-Mail festgelegt werden soll.

Sie sind jetzt mit Ihren Microsoft-Anmeldeinformationen angemeldet.

Mehrere Authentifizierungsanbieter

Wenn die App mehrere Anbieter erfordert, verketten Sie die Anbieter-Erweiterungsmethoden hinter AddAuthentication:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

Weiterleiten von Anforderungsinformationen mit einem Proxy oder Lastenausgleich

Wenn die App hinter einem Proxyserver oder Lastenausgleich bereitgestellt wird, können einige der ursprünglichen Anforderungsinformationen im Anforderungsheader an die App weitergeleitet werden. Diese Informationen umfassen in der Regel das Schema für sichere Anforderungen (https), Host- und Client-IP-Adresse. Apps lesen diese Anforderungsheader nicht automatisch, um die ursprünglichen Anforderungsinformationen zu ermitteln und zu verwenden.

Das Schema wird bei der Verknüpfungsgenerierung verwendet, die sich auf den Authentifizierungsfluss mit externen Anbietern auswirkt. Wenn das sichere Schema (https) verloren geht, generiert die App falsche unsichere Umleitungs-URLs.

Verwenden Sie Forwarded Headers Middleware, um die ursprünglichen Anforderungsinformationen der App zur Anforderungsverarbeitung zur Verfügung zu stellen.

Weitere Informationen finden Sie unter Konfigurieren Sie ASP.NET Core für die Zusammenarbeit mit Proxyservern und Lastenausgleichern.

Fehlerbehebung

  • Wenn der Microsoft-Kontoanbieter auf eine fehlerhafte Anmeldeseite umleitet, notieren Sie sich den Titel des Fehlers und die Abfragezeichenfolge-Parameter der Beschreibung, die direkt nach dem # (Hashtag) im URI angezeigt werden.

    Obwohl die Fehlermeldung auf ein Problem mit der Microsoft-Authentifizierung hinzuweisen scheint, ist die häufigste Ursache, dass der Anwendungs-URI keinem der Umleitungs-URIs entspricht, die für die Web--Plattform angegeben sind.

  • Wenn Identity nicht durch den Aufruf von services.AddIdentity in ConfigureServices konfiguriert ist, führt der Authentifizierungsversuch zu einer Ausnahme: ArgumentException: Die Option 'SignInScheme' muss angegeben werden. Die in diesem Beispiel verwendete Projektvorlage stellt sicher, dass dies erfolgt.

  • Wenn die Websitedatenbank nicht durch Anwenden der anfänglichen Migration erstellt wurde, tritt der Fehler auf: Ein Datenbankvorgang ist beim Verarbeiten der Anforderung fehlgeschlagen, wodurch der Fehler ausgelöst wurde. Tippen Sie auf Migrationen anwenden, um die Datenbank zu erstellen, und aktualisieren Sie die Ansicht, um nach dem Fehler fortzufahren.

Nächste Schritte

  • In diesem Artikel wurde gezeigt, wie Sie sich bei Microsoft authentifizieren. Folgen Sie einem ähnlichen Ansatz zur Authentifizierung mit anderen Anbietern, die auf der vorherigen Seiteaufgeführt sind.
  • Nachdem die Website in Azure Web App veröffentlicht wurde, erstellen Sie im Microsoft Entra Admin Center einen neuen geheimen Clientschlüssel.
  • Legen Sie die Authentication:Microsoft:ClientId und Authentication:Microsoft:ClientSecret als Anwendungseinstellungen im Microsoft Entra Admin Center fest. Das Konfigurationssystem ist für das Lesen von Schlüsseln aus Umgebungsvariablen eingerichtet.

In diesem Beispiel wird gezeigt, wie Sie Benutzern das Anmelden mit ihrem Geschäfts-, Schul- oder persönlichen Microsoft-Konto mithilfe des ASP.NET Core 3.0-Projekts ermöglichen, das auf der vorherigen Seite erstellt wurde.

Erstellen der App im Microsoft Entra Admin Center

Client-Geheimnis erstellen

Generieren Sie einen geheimen Clientschlüssel im Microsoft Entra Admin Center, indem Sie die Schritte in Registrieren einer Anwendung bei der Microsoft Identity Platform ausführen: Hinzufügen von Anmeldeinformationen.

Speichern der Microsoft-Client-ID und des geheimen Schlüssels

Speichern Sie vertrauliche Einstellungen wie die Microsoft-Anwendung (Client-ID) und das Clientgeheimnis , die Sie im vorherigen Schritt mit dem geheimen Manager erstellt haben. Führen Sie für dieses Beispiel die folgenden Schritte aus:

  1. Initialisieren Sie das Projekt für den geheimen Speicher gemäß den Anweisungen unter Aktivieren des geheimen Speichers.

  2. Speichern Sie die vertraulichen Einstellungen im lokalen geheimen Speicher mit den geheimen Schlüsseln Authentication:Microsoft:ClientId und Authentication:Microsoft:ClientSecret:

    dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
    

Das Trennzeichen : funktioniert nicht auf allen Plattformen mit den hierarchischen Schlüsseln von Umgebungsvariablen. Beispielsweise wird das Trennzeichen : von Bash nicht unterstützt. Der doppelte Unterstrich, __, ist:

  • Unterstützt von allen Plattformen.
  • Automatisch durch einen Doppelpunkt :, ersetzt.

Konfigurieren der Microsoft-Kontoauthentifizierung

Fügen Sie den Microsoft-Kontodienst zum Startup.ConfigureServiceshinzu:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();

    services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
    {
        microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
        microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
    });
}

Die AddAuthentication(IServiceCollection, String)-Überladung legt die DefaultScheme-Eigenschaft fest. Die AddAuthentication(IServiceCollection, Action<AuthenticationOptions>)-Überladung ermöglicht das Konfigurieren von Authentifizierungsoptionen, die zum Einrichten von Standardauthentifizierungsschemas für verschiedene Zwecke verwendet werden können. Nachfolgende Aufrufe von AddAuthentication überschreiben zuvor konfigurierte AuthenticationOptions-Eigenschaften.

AuthenticationBuilder Erweiterungsmethoden, die einen Authentifizierungshandler registrieren, können nur einmal pro Authentifizierungsschema aufgerufen werden. Überladungen sind vorhanden, die das Konfigurieren der Schemaeigenschaften, des Schemanamens und des Anzeigenamens ermöglichen.

Weitere Informationen zu konfigurationsoptionen, die von der Microsoft-Kontoauthentifizierung unterstützt werden, finden Sie in der MicrosoftAccountOptions API-Referenz. Dies kann verwendet werden, um unterschiedliche Informationen über den Benutzer anzufordern.

Anmelden mit Microsoft-Konto

Führen Sie die App aus, und wählen Sie Anmelden aus. Eine Option zum Anmelden mit Microsoft wird angezeigt. Wählen Sie Microsoft aus, um zur Authentifizierung zu Microsoft zu navigieren. Nachdem Sie sich mit Ihrem Microsoft-Konto angemeldet haben, werden Sie aufgefordert, der App zu erlauben, auf Ihre Informationen zuzugreifen.

Tippen Sie auf Ja, und Sie werden zurück zur Website weitergeleitet, auf der Sie Ihre E-Mails festlegen können.

Sie sind jetzt mit Ihren Microsoft-Anmeldeinformationen angemeldet.

Mehrere Authentifizierungsanbieter

Wenn die App mehrere Anbieter erfordert, verketten Sie die Anbietererweiterungsmethoden mit AddAuthentication:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

Weiterleiten von Anforderungsinformationen mit einem Proxy oder Lastenausgleich

Wenn die App hinter einem Proxyserver oder Lastenausgleich bereitgestellt wird, können einige der ursprünglichen Anforderungsinformationen im Anforderungsheader an die App weitergeleitet werden. Diese Informationen umfassen in der Regel das Schema für sichere Anforderungen (https), Host- und Client-IP-Adresse. Apps lesen diese Anforderungsheader nicht automatisch, um die ursprünglichen Anforderungsinformationen zu ermitteln und zu verwenden.

Das Schema wird bei der Verknüpfungsgenerierung verwendet, die sich auf den Authentifizierungsfluss mit externen Anbietern auswirkt. Wenn das sichere Schema (https) verloren geht, generiert die App falsche unsichere Umleitungs-URLs.

Verwenden Sie Forwarded Headers Middleware, um die ursprünglichen Anforderungsinformationen der App zur Anforderungsverarbeitung zur Verfügung zu stellen.

Weitere Informationen finden Sie unter Konfigurieren Sie ASP.NET Core für die Zusammenarbeit mit Proxyservern und Lastverteilern.

Fehlerbehebung

  • Wenn der Microsoft-Kontoanbieter Sie an eine Fehlerseite für die Anmeldung umleitet, beachten Sie die Abfragezeichenfolgenparameter für Fehlertitel und -beschreibung direkt nach dem # (Hashtag) im URI.

    Obwohl die Fehlermeldung auf ein Problem mit der Microsoft-Authentifizierung hinweist, ist die häufigste Ursache, dass der Anwendungs-URI keinem der Umleitungs-URIs entspricht, die für die Webplattform angegeben sind.

  • Wenn Identity nicht durch den Aufruf von services.AddIdentity in ConfigureServices konfiguriert ist, führt der Authentifizierungsversuch zu einer Ausnahme: ArgumentException: Die Option 'SignInScheme' muss angegeben werden. Die in diesem Beispiel verwendete Projektvorlage stellt sicher, dass dies erfolgt.

  • Wenn die Websitedatenbank nicht durch Anwenden der initialen Migration erstellt wurde, kommt es zu dem Fehler Eine Datenbankoperation ist fehlgeschlagen, während die Anforderung bearbeitet wurde. Tippen Sie auf Migrationen anwenden, um die Datenbank zu erstellen, und aktualisieren Sie die Ansicht, um nach dem Fehler fortzufahren.

Nächste Schritte

  • In diesem Artikel wurde gezeigt, wie Sie sich bei Microsoft authentifizieren können. Sie können einem ähnlichen Ansatz folgen, um sich bei anderen Anbietern zu authentifizieren, die auf der vorherigen Seiteaufgeführt sind.
  • Nachdem Sie Ihre Website in Azure Web App veröffentlicht haben, erstellen Sie im Microsoft Entra Admin Center einen neuen geheimen Clientschlüssel.
  • Legen Sie die Authentication:Microsoft:ClientId und Authentication:Microsoft:ClientSecret als Anwendungseinstellungen im Microsoft Entra Admin Center fest. Das Konfigurationssystem ist für das Lesen von Schlüsseln aus Umgebungsvariablen eingerichtet.