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
- Fügen Sie dem Projekt das Microsoft.AspNetCore.Authentication.MicrosoftAccount NuGet-Paket hinzu.
- Registrieren Sie die Anwendung im Microsoft Entra Verwaltungsportal, indem Sie die Schritte in Registrieren einer Anwendung bei der Microsoft Identity Platform befolgen.
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:
Initialisieren Sie das Projekt für den geheimen Speicher gemäß den Anweisungen unter Aktivieren des geheimen Speichers.
Speichern Sie die vertraulichen Einstellungen im lokalen geheimen Speicher mit den geheimen Schlüsseln
Authentication:Microsoft:ClientId
undAuthentication: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 Program
hinzu:
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
inConfigureServices
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
undAuthentication: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
- Fügen Sie dem Projekt das Microsoft.AspNetCore.Authentication.MicrosoftAccount NuGet-Paket hinzu.
- Registrieren Sie die Anwendung in der Verwaltungskonsole von Microsoft Entra, indem Sie die Schritte in Registrieren einer Anwendung bei der Microsoft Identity Platform befolgen.
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:
Initialisieren Sie das Projekt für den geheimen Speicher gemäß den Anweisungen unter Aktivieren des geheimen Speichers.
Speichern Sie die vertraulichen Einstellungen im lokalen geheimen Speicher mit den geheimen Schlüsseln
Authentication:Microsoft:ClientId
undAuthentication: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.ConfigureServices
hinzu:
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
inConfigureServices
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
undAuthentication:Microsoft:ClientSecret
als Anwendungseinstellungen im Microsoft Entra Admin Center fest. Das Konfigurationssystem ist für das Lesen von Schlüsseln aus Umgebungsvariablen eingerichtet.