Udostępnij za pośrednictwem


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

Przez Valeriy Novytskyy, Rick Anderson i Sharaf Abacery

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 .

Utwórz identyfikator klienta i sekret Google OAuth 2.0

  • Postępuj zgodnie ze wskazówkami w integracja Google Sign-In z aplikacją webową (dokumentacja Google)

  • Przejdź do usług API Google & Services.

  • Najpierw musi istnieć Project. Być może trzeba będzie go utworzyć. Po wybraniu projektu, wejdź do Dashboard.

  • Na ekranie zgody OAuth pulpitu nawigacyjnego:

    • Wybierz typ użytkownika — zewnętrzny i UTWÓRZ.
    • W oknie dialogowym informacje o aplikacji podaj nazwę aplikacji dla aplikacji, adres e-mail pomocy technicznej dla użytkownikówi informacje kontaktowe dewelopera.
    • Wykonaj krok Zakresy.
    • Zapoznaj się z krokiem Testowanie użytkowników.
    • 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 Typ aplikacji>aplikacja internetowa, wybierz nazwę .

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

  • Wybierz przycisk UTWÓRZ.

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

  • Podczas wdrażania strony:

    • Zaktualizuj identyfikator URI przekierowania aplikacji w konsoli Google na wdrożony identyfikator URI przekierowania aplikacji.
    • Utwórz nową rejestrację API Google w konsoli Google dla aplikacji produkcyjnej z jej produkcyjnym identyfikatorem URI przekierowania.

Przechowaj identyfikator klienta Google i tajny klucz

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

  1. Zainicjuj projekt tajnego przechowywania zgodnie z instrukcjami zawartymi w Włączanie tajnego przechowywania.

  2. Przechowuj ustawienia poufne w lokalnym magazynie poufności przy użyciu kluczy tajnych Authentication:Google:ClientId i Authentication:Google:ClientSecret:

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

Separator : nie działa z kluczami hierarchicznymi zmiennych środowiskowych na wszystkich platformach. Na przykład separator : nie jest obsługiwany przez Bash. Podwójne podkreślenie, __, to:

  • Obsługiwane przez wszystkie platformy.
  • Automatycznie zastąpione dwukropkiem :.

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

Konfigurowanie uwierzytelniania google

Wywołanie AddIdentity konfiguruje ustawienia schematu domyślnego. Przeciążenie AddAuthentication(IServiceCollection, String) ustawia właściwość DefaultScheme. Przeciążenie AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) umożliwia skonfigurowanie opcji uwierzytelniania, które mogą służyć do konfigurowania domyślnych schematów uwierzytelniania w różnych celach. Kolejne wywołania AddAuthentication przesłaniają wcześniej skonfigurowane właściwości AuthenticationOptions.

AuthenticationBuilder metody rozszerzeń, które rejestrują procedurę obsługi uwierzytelniania, mogą być wywoływane tylko raz dla danego 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

  • Pobierz link do biblioteki w witrynie Google Developer Library.
  • Następnie przejdź do generowania przycisków Google Developer.
  • Skonfiguruj kontroler tak, aby był zgodny z atrybutem data-login_uri="{HostName}/{ControllerName}/{actionName}", ponieważ przekaże Ci ten link po pomyślnym zalogowaniu.
  • Utwórz kontroler i akcję, która podejmuje jeden argument string credential, który jest zwracany przez firmę Google po zakończeniu procesu logowania.
  • Sprawdź credential przy użyciu następującego wiersza kodu: GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(credential);
  • Spowoduje to pobranie dostępnych informacji o zalogowanym użytkowniku, które mogą być następnie przechowywane w bazie danych.

Zmienianie domyślnego identyfikatora URI wywołania zwrotnego

Segment identyfikatora URI /signin-google jest ustawiony 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 dziedziczonej właściwości RemoteAuthenticationOptions.CallbackPath klasy GoogleOptions.

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 jest skonfigurowana przez wywołanie services.AddIdentity w ConfigureServices, próba uwierzytelnienia skutkuje błędem ArgumentException: musi być podana opcja "SignInScheme". Szablon projektu używany w tym samouczku gwarantuje, że Identity jest skonfigurowany.
  • Jeśli baza danych witryny nie została utworzona przez zastosowanie początkowej migracji, otrzymasz błąd: - Operacja bazy danych nie powiodła się podczas przetwarzania żądania. Wybierz pozycję Zastosuj migracje, aby utworzyć bazę danych, a następnie odśwież stronę, aby przejść przez błąd i kontynuować.
  • Błąd HTTP 500 po pomyślnym uwierzytelnieniu żądania przez dostawcę OAuth 2.0, takiego jak Google: Zobacz ten problem na GitHubie.
  • Jak zaimplementować uwierzytelnianie zewnętrzne za pomocą Google dla React i innych aplikacji typu SPA: zobacz to zgłoszenie 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 ClientSecret w konsoli interfejsu API Google.
  • Ustaw Authentication:Google:ClientId i Authentication:Google:ClientSecret jako ustawienia aplikacji w witrynie Azure Portal. System konfiguracji jest skonfigurowany do odczytu kluczy ze zmiennych środowiskowych.