Google externe Anmeldung Setup in ASP.NET Core

Von Valeriy Novytskyy und Rick Anderson

In diesem Tutorial erfahren Sie, wie Sie Es Benutzern ermöglichen, sich mit ihrem Google-Konto mithilfe ASP.NET Core auf der vorherigen Seite erstellten Projekt anmelden.

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

  • Befolgen Sie die Anweisungen unter Integrieren von Google Sign-In in Ihre Web-App (Google-Dokumentation).

  • Wechseln Sie zu Google API & Services.

  • Ein Project muss zuerst vorhanden sein. Möglicherweise müssen Sie einen erstellen. Sobald ein Projekt ausgewählt ist, geben Sie das Dashboard ein.

  • Auf dem OAuth-Zustimmungsbildschirm des Dashboards:

    • Wählen Sie Benutzertyp – Extern undCREATE aus.
    • Geben Sie im Dialogfeld App-Informationen einen App-Namen für die App, eine E-Mail-Adresse für den Benutzersupport und Kontaktinformationen für Entwickler an.
    • Gehen Sie den Schritt Bereiche schrittweise durch.
    • Gehen Sie den Schritt Testbenutzer schrittweise durch.
    • Überprüfen Sie den OAuth-Zustimmungsbildschirm , und wechseln Sie zurück zum Dashboard der App.
  • Wählen Sie auf der Registerkarte Anmeldeinformationen des Anwendungsdashboards CREATE CREDENTIALSOAuth client ID (ANMELDEINFORMATIONEN ERSTELLENOAuth-Client-ID>) aus.

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

  • Wählen Sie im Abschnitt Autorisierte Umleitungs-URIs die Option ADD URI aus , um den Umleitungs-URI festlegen. 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 den geheimen Clientgeheimnis für die Verwendung in der Konfiguration der App.

  • Beim Bereitstellen des Standorts:

    • Aktualisieren Sie den Umleitungs-URI der App in der Google-Konsole auf den bereitgestellten Umleitungs-URI der App.
    • Erstellen Sie eine neue Google-API-Registrierung in der Google-Konsole für die Produktions-App mit dem Umleitungs-URI für die Produktion.

Store der Google-Client-ID und des Geheimnisses

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

Store sensible Einstellungen wie die Google-Client-ID und geheimniswerte mit Secret Manager. Führen Sie für dieses Beispiel die folgenden Schritte aus:

  1. Initialisieren Sie das Projekt für die Speicherung geheimer Schlüssel wie unter Aktivieren des Geheimnisspeichers.

  2. Store sie die sensiblen Einstellungen im lokalen Geheimnisspeicher mit den geheimen Schlüsseln und Authentication:Google:ClientId anAuthentication: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 die Verwendung in der API-Konsole verwalten.

Konfigurieren von Google-Authentifizierung

Fügen Sie den Authentifizierungsdienst zu hinzu Startup.ConfigureServices:

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 hinzu Program:

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"];
    });

Der Aufruf von AddIdentity konfiguriert die Standardschemaeinstellungen. Die - AddAuthentication(IServiceCollection, String) Überladung legt die -Eigenschaft DefaultScheme 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 zum Überschreiben AddAuthentication zuvor konfigurierter AuthenticationOptions Eigenschaften.

AuthenticationBuilder Erweiterungsmethoden, die einen Authentifizierungshandler registrieren, können pro Authentifizierungsschema nur einmal aufgerufen werden. Überladungen sind vorhanden, 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. Eine Option zum Anmelden mit Google wird angezeigt.
  • Wählen Sie die Schaltfläche Google aus, die zur Authentifizierung an Google umgeleitet wird.
  • Nachdem Sie Ihre Google-Anmeldeinformationen eingegeben haben, werden Sie zurück zur Website weitergeleitet.

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 Anbietererweiterungsmethoden hinter 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 GoogleOptions API-Referenz. 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, während Sie die Middleware für die Google-Authentifizierung über die geerbte RemoteAuthenticationOptions.CallbackPath Eigenschaft der -Klasse GoogleOptions konfigurieren.

Problembehandlung

  • Wenn die Anmeldung nicht funktioniert und keine Fehler auftreten, wechseln Sie in den Entwicklungsmodus, um das Debuggen des Problems zu vereinfachen.
  • Wenn Identity nicht durch Aufrufen services.AddIdentity von in ConfigureServiceskonfiguriert wird, führt der Versuch der Authentifizierung zu ArgumentException: Die Option "SignInScheme" muss angegeben werden. Die in diesem Tutorial verwendete Projektvorlage stellt sicher, Identity dass 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 Seite, um nach dem Fehler fortzufahren.

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 in der ClientSecret Google API Console 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.