Udostępnij za pośrednictwem


Konfiguracja logowania zewnętrznego google w usłudze ASP.NET Core

Autorzy: Valeriy Novytskyy i Rick Anderson

W tym samouczku pokazano, jak umożliwić użytkownikom logowanie się przy użyciu konta Google przy użyciu projektu ASP.NET Core utworzonego na poprzedniej stronie.

Tworzenie identyfikatora klienta i wpisu tajnego usługi Google OAuth 2.0

  • Postępuj zgodnie ze wskazówkami zawartymi w artykule Integrowanie logowania Google z aplikacją internetową (dokumentacja google).

  • Przejdź do interfejsu API i usług Google.

  • Najpierw musi istnieć projekt . Być może trzeba będzie go utworzyć. Po wybraniu projektu wprowadź pulpit nawigacyjny.

  • Na ekranie zgody Oauth pulpitu nawigacyjnego:

    • Wybierz pozycję Typ użytkownika — zewnętrzny i UTWÓRZ.
    • W oknie dialogowym Informacje o aplikacji podaj nazwę aplikacji, adres e-mail pomocy technicznej użytkownika i informacje kontaktowe dewelopera.
    • Wykonaj krok Zakresy.
    • Zapoznaj się z krokiem Test users (Użytkownicy testowi).
    • Przejrzyj ekran zgody OAuth i wróć do pulpitu nawigacyjnego aplikacji.
  • Na karcie Poświadczenia pulpitu nawigacyjnego aplikacji wybierz pozycję UTWÓRZ POŚWIADCZENIA>Identyfikator klienta OAuth.

  • Wybierz pozycję Aplikacja typu>aplikacja internetowa, wybierz nazwę.

  • W sekcji Autoryzowane identyfikatory URI przekierowania wybierz pozycję DODAJ identyfikator URI, aby ustawić identyfikator URI przekierowania. Przykładowy identyfikator URI przekierowania: https://localhost:{PORT}/signin-google, gdzie {PORT} symbol zastępczy jest portem aplikacji.

  • Wybierz przycisk CREATE (UTWÓRZ).

  • Zapisz identyfikator klienta i klucz tajny klienta do użycia w konfiguracji aplikacji.

  • Podczas wdrażania lokacji:

    • Zaktualizuj identyfikator URI przekierowania aplikacji w konsoli Google do wdrożonego identyfikatora URI przekierowania aplikacji.
    • Utwórz nową rejestrację interfejsu API Google w konsoli Google dla aplikacji produkcyjnej przy użyciu identyfikatora URI przekierowania produkcyjnego.

Przechowywanie identyfikatora klienta Google i wpisu tajnego

Przechowuj poufne ustawienia, takie jak identyfikator klienta Google i wartości wpisów tajnych za pomocą usługi Secret Manager. W tym przykładzie wykonaj następujące czynności:

  1. Zainicjuj projekt magazynu wpisów tajnych zgodnie z instrukcjami w artykule Włączanie magazynu wpisów tajnych.

  2. Zapisz ustawienia poufne w lokalnym magazynie wpisów tajnych przy użyciu kluczy Authentication:Google:ClientId tajnych i Authentication:Google:ClientSecret:

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

Separator : nie współdziała z kluczami hierarchicznymi zmiennych środowiskowych na wszystkich platformach. Symbol __ (podwójne podkreślenie):

  • Jest obsługiwany przez wszystkie platformy. Na przykład separator : nie jest obsługiwany przez powłokę Bash, a separator __ jest.
  • Jest automatycznie zastępowany przez :

Poświadczenia i użycie interfejsu API można zarządzać w konsoli interfejsu API.

Konfigurowanie uwierzytelniania google

Microsoft.AspNetCore.Authentication.Google Dodaj pakiet NuGet do aplikacji.

Dodaj usługę uwierzytelniania do elementu 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"];
        });
}

Dodaj usługę uwierzytelniania do elementu 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"];
    });

Wywołanie w celu AddIdentity skonfigurowania domyślnych ustawień schematu. Przeciążenie AddAuthentication(IServiceCollection, String) ustawia DefaultScheme właściwość . Przeciążenie AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) umożliwia konfigurowanie opcji uwierzytelniania, które mogą służyć do konfigurowania domyślnych schematów uwierzytelniania w różnych celach. Kolejne wywołania AddAuthentication przesłonięcia wcześniej skonfigurowanych AuthenticationOptions właściwości.

AuthenticationBuilder metody rozszerzeń rejestrujące procedurę obsługi uwierzytelniania mogą być wywoływane tylko raz dla schematu uwierzytelniania. Istnieją przeciążenia, które umożliwiają konfigurowanie właściwości schematu, nazwy schematu i nazwy wyświetlanej.

Logowanie się przy użyciu usługi Google

  • Uruchom aplikację i wybierz pozycję Zaloguj się. Pojawi się opcja logowania się za pomocą usługi Google.
  • Wybierz przycisk Google, który przekierowuje do google w celu uwierzytelnienia.
  • Po wprowadzeniu poświadczeń Google nastąpi przekierowanie z powrotem do witryny internetowej.

Przekazywanie dalej informacji o żądaniu za pomocą serwera proxy lub modułu równoważenia obciążenia

Jeśli aplikacja jest wdrażana za serwerem proxy lub modułem równoważenia obciążenia, niektóre z pierwotnych informacji o żądaniu mogą zostać przekazane dalej do aplikacji w nagłówkach żądania. Te informacje zazwyczaj obejmują bezpieczny schemat żądań (https), hosta i adres IP klienta. Aplikacje nie odczytują automatycznie tych nagłówków żądań, aby odnaleźć pierwotne informacje o żądaniu i z nich korzystać.

Schemat jest używany do generowania linków, które mają wpływ na przepływ uwierzytelniania przy użyciu zewnętrznych dostawców. W wyniku utraty bezpiecznego schematu (https) aplikacja generuje nieprawidłowe niezabezpieczone adresy URL przekierowania.

Użyj oprogramowania pośredniczącego przekazanych nagłówków, aby udostępnić pierwotne informacje o żądaniu do aplikacji w celu przetworzenia żądania.

Aby uzyskać więcej informacji, zobacz Konfigurowanie platformy ASP.NET Core pod kątem pracy z serwerami proxy i modułami równoważenia obciążenia.

Wielu dostawców uwierzytelniania

Gdy aplikacja wymaga wielu dostawców, należy połączyć metody rozszerzenia dostawcy za :AddAuthentication

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

Aby uzyskać więcej informacji na temat opcji konfiguracji obsługiwanych przez uwierzytelnianie Google, zobacz dokumentację interfejsu GoogleOptions API. Może to służyć do żądania różnych informacji o użytkowniku.

Zmienianie domyślnego identyfikatora URI wywołania zwrotnego

Segment /signin-google identyfikatora URI jest ustawiany jako domyślne wywołanie zwrotne dostawcy uwierzytelniania Google. Domyślny identyfikator URI wywołania zwrotnego można zmienić podczas konfigurowania oprogramowania pośredniczącego uwierzytelniania Google za pośrednictwem odziedziczonej RemoteAuthenticationOptions.CallbackPathGoogleOptions właściwości klasy.

Rozwiązywanie problemów

  • Jeśli logowanie nie działa i nie występują żadne błędy, przełącz się do trybu programowania, aby ułatwić debugowanie problemu.
  • Jeśli Identity nie skonfigurowano przez wywołanie services.AddIdentity metody w ConfigureServicesmetodzie , próba uwierzytelnienia wyników w elemencie ArgumentException: należy podać opcję "SignInScheme". Szablon projektu używany w tym samouczku gwarantuje, że Identity jest skonfigurowany.
  • Jeśli baza danych lokacji nie została utworzona przez zastosowanie migracji początkowej, operacja bazy danych nie powiodła się podczas przetwarzania błędu żądania . Wybierz pozycję Zastosuj migracje , aby utworzyć bazę danych, a następnie odśwież stronę, aby kontynuować wklejenie błędu.
  • Błąd HTTP 500 po pomyślnym uwierzytelnieniu żądania przez dostawcę OAuth 2.0, takiego jak Google: Zobacz ten problem z usługą GitHub.
  • Jak zaimplementować uwierzytelnianie zewnętrzne za pomocą usługi Google dla oprogramowania React i innych aplikacji SPA: Zobacz ten problem z usługą GitHub.

Następne kroki

  • W tym artykule pokazano, jak można uwierzytelnić się w usłudze Google. Możesz stosować podobne podejście do uwierzytelniania z innymi dostawcami wymienionymi na poprzedniej stronie.
  • Po opublikowaniu aplikacji na platformie Azure zresetuj ją ClientSecret w konsoli interfejsu API Google.
  • Authentication:Google:ClientId Ustaw wartości i Authentication:Google:ClientSecret jako ustawienia aplikacji w witrynie Azure Portal. System konfiguracji jest skonfigurowany do odczytu kluczy ze zmiennych środowiskowych.