Einrichtung der externen Google-Anmeldung in ASP.NET Core
Von Valeriy Novytskyy, Rick Anderson und Sharaf Abacery
In diesem Lernprogramm erfahren Sie, wie Sie benutzern ermöglichen, sich mit ihrem Google-Konto mit dem ASP.NET Core-Projekt anzumelden, das auf der vorherigen Seite erstellt wurde.
Erstellen der Google OAuth 2.0-Client-ID und des geheimen Schlüssels
Befolgen Sie die Anleitung in zur Integration von Google Sign-In in Ihre Web-App (Google-Dokumentation)
Wechseln Sie zu Google API & Services.
Zuerst muss ein Projekt vorhanden sein, möglicherweise müssen Sie eins erstellen. Sobald ein Projekt ausgewählt ist, öffnen Sie das Dashboard .
Im OAuth-Zustimmungsbildschirm des Dashboards:
- Wählen Sie Benutzertyp – Extern und dann ERSTELLEN aus.
- Geben Sie im Dialogfeld App-Informationen einen App-Namen für die App an, eine E-Mail für den Benutzersupportund Kontaktinformationen des Entwicklers.
- Durchlaufen Sie den Schritt Bereiche.
- Durchlaufen Sie den Schritt Testbenutzer*innen.
- Überprüfen Sie den OAuth-Zustimmungsbildschirm und kehren Sie zurück zum Dashboard der App .
Wählen Sie im Anwendungsdashboard auf der Registerkarte Anmeldeinformationen die Optionen ANMELDEINFORMATIONEN ERSTELLEN>OAuth-Client-ID aus.
Wählen Sie den Anwendungstyp>Webanwendungaus und wählen Sie einen Namen.
Wählen Sie im Abschnitt Autorisierte Umleitungs-URIs die Option URI HINZUFÜGEN aus, um den Umleitungs-URI festzulegen. Beispielumleitungs-URI:
https://localhost:{PORT}/signin-google
, wobei der{PORT}
Platzhalter der Port der App ist.Wählen Sie die Schaltfläche ERSTELLEN aus.
Speichern Sie die Client-ID und das Client-Geheimnis zur Verwendung in der App-Konfiguration.
Bei der Bereitstellung der Website können Sie einen der folgenden Schritte ausführen:
- Aktualisieren Sie den Umleitungs-URI der App in der Google-Konsole auf den bereitgestellten Umleitungs-URI der App.
- Erstellen Sie für die Produktions-App mit dem zugehörigen Produktionsumleitungs-URI eine neue Google-API-Registrierung in der Google-Konsole.
Speichern der Google-Client-ID und des geheimen Schlüssels
Speichern Sie vertrauliche Einstellungen wie die Google-Client-ID und geheime Werte mit Secret Manager. 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:Google:ClientId
undAuthentication:Google:ClientSecret
:dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"
Das Trennzeichen :
funktioniert nicht mit hierarchischen Schlüsseln der Umgebungsvariablen auf allen Plattformen. Beispielsweise wird das Trennzeichen :
von Bash nicht unterstützt. Der doppelte Unterstrich, __
, ist:
- Unterstützt von allen Plattformen.
- Automatisch durch einen Doppelpunkt
:
, ersetzt.
Sie können Ihre API-Anmeldeinformationen und -verwendung in der API-Konsoleverwalten.
Konfigurieren der Google-Authentifizierung
- Fügen Sie der App das
Google.Apis.Auth.AspNetCore3
NuGet-Paket hinzu. - Fügen Sie den Authentifizierungsdienst zum
program.cs
hinzu: - Folgen sie
Add Authtication for asp.net app
Der Aufruf von AddIdentity konfiguriert die Standardschemaeinstellungen. 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 die zuvor konfigurierten 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.
Mit Google anmelden
- Rufen Sie einen Link zur Bibliothek unter Google Developer Library-Link ab, um einen Link zur Bibliothek zu erhalten.
- Wechseln Sie dann zu Google Developer Button Generation
- Richten Sie ihren Controller so ein, dass er mit
data-login_uri="{HostName}/{ControllerName}/{actionName}"
Attrbute übereinstimmt, da er nach der erfolgreichen Anmeldung Sie an diesen Link weiterleitt. - Erstellen Sie einen Controller und eine Aktion, die ein Argument
string credential
verwendet, das von Google nach Abschluss des Anmeldevorgangs zurückgegeben wird. - Überprüfen Sie die
credential
mithilfe der folgenden Codezeile:GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(credential);
- Dadurch werden die verfügbaren Informationen zum angemeldeten Benutzer abgerufen, die dann in einer Datenbank gespeichert werden können.
Ändern des Standardrückruf-URI
Das URI-Segment /signin-google
wird als Standardrückruf des Google-Authentifizierungsanbieters festgelegt. Sie können den Standardrückruf-URI ändern, indem Sie die Google-Authentifizierungsmiddleware über die geerbte RemoteAuthenticationOptions.CallbackPath-Eigenschaft der GoogleOptions-Klasse konfigurieren.
Fehlerbehebung
- Wenn die Anmeldung nicht funktioniert und Sie keine Fehler erhalten, wechseln Sie zum Entwicklungsmodus, um das Problem einfacher zu debuggen.
- 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 Lernprogramm verwendete Projektvorlage stellt sicher, dass Identity konfiguriert ist. - Wenn die Standortdatenbank nicht erstellt wurde, indem die ursprüngliche Migration anwenden, erhalten Sie Fehler bei ein Datenbankvorgang beim Verarbeiten der Anforderung Fehler. Wählen Sie Migrationen anwenden aus, um die Datenbank zu erstellen, und aktualisieren Sie die Ansicht, um nach dem Fehler fortzufahren.
- HTTP 500-Fehler nach der erfolgreichen Authentifizierung der Anforderung durch den OAuth 2.0-Anbieter wie Google: Siehe dieses GitHub-Problem.
- So implementieren Sie die externe Authentifizierung mit Google für React und andere SPA-Apps: Siehe dieses GitHub-Problem.
Nächste Schritte
- In diesem Artikel wurde gezeigt, wie Sie sich bei Google 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 die App in Azure veröffentlicht haben, setzen Sie die
ClientSecret
in der Google-API-Konsole zurück. - Legen Sie die
Authentication:Google:ClientId
undAuthentication:Google:ClientSecret
als Anwendungseinstellungen im Azure-Portal fest. Das Konfigurationssystem ist für das Lesen von Schlüsseln aus Umgebungsvariablen eingerichtet.