Google externe Anmeldung Setup in ASP.NET Core

Von Valeriy Novytskyy und Rick Anderson

In diesem Tutorial wird gezeigt, wie Sie Benutzer*innen die Anmeldung über ihr Google-Konto ermöglichen. Hierzu verwenden Sie das ASP.NET Core-Projekt, das auf der vorherigen Seite erstellt wurde.

Erstellen der Google OAuth 2.0-Client-ID und des Geheimnisses

  • Befolgen Sie die Anleitung unter Google Log-in in Ihre Webanwendung integrieren (Google-Dokumentation).

  • Wechseln Sie zu Google-API und Dienste.

  • Zuerst muss ein Projekt vorhanden sein, möglicherweise müssen Sie eins erstellen. Sobald ein Projekt ausgewählt wurde, öffnen Sie das Dashboard.

  • Gehen Sie im OAuth-Zustimmungsbildschirm des Dashboards wie folgt vor:

    • Wählen Sie Benutzertyp – Extern und dann ERSTELLEN aus.
    • Geben Sie im Dialogfeld App-Informationen einen App-Namen für die App, die E-Mail-Adresse des Benutzersupports und Kontaktinformationen von Entwickler*innen an.
    • Durchlaufen Sie den Schritt Bereiche.
    • Durchlaufen Sie den Schritt Testbenutzer*innen.
    • Überprüfen Sie den OAuth-Zustimmungsbildschirm, und kehren Sie zum Dashboard der App zurück.
  • Wählen Sie im Anwendungsdashboard auf der Registerkarte Anmeldeinformationen die Optionen ANMELDEINFORMATIONEN ERSTELLEN>OAuth-Client-ID aus.

  • Wählen Sie Anwendungstyp>Webanwendung aus, und wählen Sie einen Namen aus.

  • Wählen Sie im Abschnitt Autorisierte Umleitungs-URIs die Option URI HINZUFÜGEN aus, um den Umleitungs-URI festzulegen. Beispiel-Umleitungs-URI: https://localhost:{PORT}/signin-google, wobei der Platzhalter {PORT} für den Port der App steht.

  • Wählen Sie die Schaltfläche ERSTELLEN aus.

  • Speichern Sie die Client-ID und den geheimen Clientschlüssel für die 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 Geheimnisses

Speichern Sie vertrauliche Einstellungen wie die Google-Client-ID und Geheimniswerte im Secret Manager. Gehen Sie für dieses Beispiel wie folgt vor:

  1. Initialisieren Sie das Projekt für den Geheimnisspeicher gemäß den Anweisungen unter Aktivieren des Geheimnisspeichers.

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

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

Das Trennzeichen : funktioniert nicht auf allen Plattformen mit den hierarchischen Schlüsseln von Umgebungsvariablen. Der doppelte Unterstrich __:

  • wird auf allen Plattformen unterstützt. Das Trennzeichen : wird beispielsweise nicht von Bash unterstützt, __ hingegen schon.
  • automatisch durch : ersetzt.

Sie können Ihre API-Anmeldeinformationen und -Nutzung in der API-Konsole verwalten.

Configure Google authentication (Konfigurieren der Google-Authentifizierung)

Fügen Sie der App das NuGet-Paket Microsoft.AspNetCore.Authentication.Google hinzu.

Fügen Sie den Authentifizierungsdienst zu 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()
        .AddGoogle(options =>
        {
            IConfigurationSection googleAuthNSection =
                Configuration.GetSection("Authentication:Google");

            options.ClientId = googleAuthNSection["ClientId"];
            options.ClientSecret = googleAuthNSection["ClientSecret"];
        });
}

Fügen Sie den Authentifizierungsdienst zu Program hinzu:

var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;

services.AddAuthentication().AddGoogle(googleOptions =>
    {
        googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
        googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
    });

Durch den Aufruf von AddIdentity werden die Standardschemaeinstellungen konfiguriert. Die AddAuthentication(IServiceCollection, String)-Überladung legt die DefaultScheme-Eigenschaft fest. Die AddAuthentication(IServiceCollection, Action<AuthenticationOptions>)-Überladung ermöglicht das Konfigurieren von Authentifizierungsoptionen, mit deren Hilfe Standardauthentifizierungsschemas für verschiedene Zwecke eingerichtet werden können. Durch nachfolgende Aufrufe von AddAuthentication werden zuvor konfigurierte AuthenticationOptions-Eigenschaften überschrieben.

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

Anmelden mit Google

  • Führen Sie die App aus, und wählen Sie Anmelden aus. Es wird eine Option zum Anmelden mit Google angezeigt.
  • Wählen Sie die Google-Schaltfläche aus, die Sie zur Authentifizierung an Google weiterleitet.
  • Nachdem Sie Ihre Google-Anmeldeinformationen eingegeben haben, werden Sie zur Website zurückgeleitet.

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. Zu diesen Informationen gehören in der Regel das sichere Anforderungsschema (https), den Host und die Client-IP-Adresse. Apps lesen diese Anforderungsheader nicht automatisch, um die ursprünglichen Anforderungsinformationen zu ermitteln und zu verwenden.

Das Schema wird bei der Linkgenerierung verwendet, die den Authentifizierungsflow bei externen Anbietern betrifft. Der Verlust des sicheren Schemas (https) führt dazu, dass die App falsche unsichere Umleitungs-URLs generiert.

Verwenden Sie Middleware für weitergeleitete Header, um der App zur Anforderungsverarbeitung die Informationen der ursprünglichen Anforderung verfügbar zu machen.

Weitere Informationen finden Sie unter Konfigurieren von ASP.NET Core für die Arbeit mit Proxyservern und Lastenausgleichen.

Mehrere Authentifizierungsanbieter

Wenn die App mehrere Anbieter erfordert, verketten Sie die Erweiterungsmethoden für Anbieter nach AddAuthentication:

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

Weitere Informationen zu Konfigurationsoptionen, die von der Google-Authentifizierung unterstützt werden, finden Sie in der API-Referenz zu GoogleOptions. Dies kann verwendet werden, um verschiedene Informationen über den Benutzer anzufordern.

Ändern des Standardrückruf-URI

Der URI-Segment /signin-google als den standardrückruf des Google-Authentifizierungsanbieter festgelegt ist. Sie können den Standardrückruf-URI ändern, wenn Sie die Middleware für die Google-Authentifizierung über die geerbte RemoteAuthenticationOptions.CallbackPath-Eigenschaft der GoogleOptions-Klasse konfigurieren.

Problembehandlung

  • Wenn die Anmeldung nicht funktioniert und Sie keine Fehler erhalten, wechseln Sie zum Entwicklungsmodus, um das Debuggen des Problems zu erleichtern.
  • 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 Tutorial verwendete Projektvorlage stellt sicher, dass Identity konfiguriert wird.
  • 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 erfolgreicher Authentifizierung der Anforderung durch den OAuth 2.0-Anbieter wie Google: Informationen finden Sie in diesem GitHub-Issue.
  • Implementieren der externen Authentifizierung mit Google für React und andere SPA-Apps: Informationen finden Sie in diesem GitHub-Issue.

Nächste Schritte

  • In diesem Artikel wurde gezeigt, wie Sie mit Google authentifiziert werden können. Führen Sie einen ähnlichen Ansatz für die Authentifizierung mit anderen Anbietern aufgeführt, auf die Vorgängerseite.
  • Nachdem Sie die App in Azure veröffentlicht haben, setzen Sie das ClientSecret in der Google-API-Konsole zurück.
  • Legen Sie die Authentication:Google:ClientId und Authentication:Google:ClientSecret Anwendungseinstellungen im Azure-Portal. Das Konfigurationssystem ist zum Lesen von Schlüsseln aus Umgebungsvariablen eingerichtet.