Konfiguracja logowania zewnętrznego konta Microsoft przy użyciu platformy ASP.NET Core
Przez Valeriy Novytskyy i Rick Anderson
W tym przykładzie pokazano, jak umożliwić użytkownikom logowanie się przy użyciu konta służbowego lub osobistego Microsoft przy użyciu projektu ASP.NET Core utworzonego na poprzedniej stronie .
Tworzenie aplikacji w centrum administracyjnym firmy Microsoft Entra
- Dodaj pakiet Microsoft.AspNetCore.Authentication.MicrosoftAccount NuGet do projektu.
- Zarejestruj aplikację w centrum administracyjnym firmy Microsoft Entra, wykonując kroki opisane w Rejestrowanie aplikacji przy użyciu platformy tożsamości firmy Microsoft
Utwórz tajny klucz klienta
Wygeneruj sekret klienta w centrum administracyjnym Microsoft Entra, postępując zgodnie z krokami opisanymi w Rejestrowanie aplikacji przy użyciu platformy tożsamości Microsoft: Dodawanie poświadczeń.
Przechowuj identyfikator klienta i tajny klucz firmy Microsoft
Przechowuj ustawienia poufne, takie jak identyfikator aplikacji Microsoft (klienta) i tajny klucz klienta, utworzony w poprzednim kroku, za pomocą Menedżera Sekretów. W tym przykładzie wykonaj następujące czynności:
Zainicjuj projekt do przechowywania tajnych danych zgodnie z instrukcjami w Włączanie przechowywania tajnych danych.
Przechowuj ustawienia poufne w lokalnym magazynie tajemnic z kluczami tajnymi
Authentication:Microsoft:ClientId
iAuthentication:Microsoft:ClientSecret
.<client-id>
znajduje się w bloku Rejestracje aplikacji platformy Azure w obszarze Identyfikator aplikacji (klienta).<client-secret>
znajduje się na liście w obszarze Certificates & secrets jako Value, a nie Secret ID.dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Microsoft: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
:
.
Konfigurowanie uwierzytelniania konta Microsoft
Dodaj usługę uwierzytelniania do Program
:
builder.Services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
});
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 Metoda rozszerzenia, która rejestruje procedurę obsługi uwierzytelniania, może być wywoływana tylko raz dla każdego schematu uwierzytelniania. Istnieją przeciążenia, które umożliwiają konfigurowanie właściwości schematu, nazwy schematu i nazwy wyświetlanej.
Aby uzyskać więcej informacji na temat opcji konfiguracji obsługiwanych przez uwierzytelnianie konta Microsoft, zobacz dokumentację interfejsu API MicrosoftAccountOptions. Może to służyć do żądania różnych informacji o użytkowniku.
Zaloguj się przy użyciu konta Microsoft
- Uruchom aplikację i wybierz pozycję Zaloguj się. Pojawi się opcja logowania się przy użyciu firmy Microsoft.
- Wybierz, aby zalogować się z Microsoft, aby przejść na stronę Microsoft w celu uwierzytelnienia. Po zalogowaniu się przy użyciu konta Microsoft zostanie wyświetlony monit o zezwolinie aplikacji na dostęp do informacji:
- Wybierz pozycję Tak, aby wrócić do witryny sieci Web, w której ma być ustawiona wiadomość e-mail.
Teraz logujesz się przy użyciu poświadczeń firmy Microsoft.
Wielu dostawców uwierzytelniania
Gdy aplikacja wymaga wielu dostawców, należy łączyć metody rozszerzenia dostawcy w kolejności za AddAuthentication:
services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });
Przekazywanie 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 oryginalne informacje o żądaniu mogą być przekazywane do aplikacji w nagłówkach żądań. Te informacje zwykle obejmują schemat bezpiecznych żądań (https
), host i adres IP klienta. Aplikacje nie odczytują automatycznie tych nagłówków żądań w celu odnajdywania i używania oryginalnych informacji o żądaniu.
Schemat jest używany w generowaniu linków, które wpływa na przepływ uwierzytelniania z zewnętrznymi dostawcami. Utrata bezpiecznego schematu (https
) powoduje wygenerowanie przez aplikację nieprawidłowych niezabezpieczonych adresów URL przekierowania.
Użyj middleware’u Nagłówki Przekazywane, aby udostępnić aplikacji oryginalne informacje o żądaniu na potrzeby przetwarzania żądań.
Aby uzyskać więcej informacji, zobacz Skonfiguruj ASP.NET Core do pracy z serwerami proxy i równoważeniem obciążenia.
Rozwiązywanie problemów
Jeśli dostawca konta Microsoft przekierowuje na stronę błędu logowania, zanotuj tytuł błędu i parametry zapytania opisu znajdujące się bezpośrednio po
#
(hasztag) w identyfikatorze URI.Chociaż komunikat o błędzie wydaje się wskazywać na problem z uwierzytelnianiem Microsoft, najczęstszą przyczyną jest to, że identyfikator URI aplikacji nie odpowiada żadnemu z identyfikatorów URI przekierowania określonych dla platformy internetowej .
Jeśli Identity nie jest skonfigurowana przez wywołanie
services.AddIdentity
wConfigureServices
, próba uwierzytelnienia spowoduje ArgumentException: należy podać opcję "SignInScheme". Szablon projektu używany w tym przykładzie gwarantuje, że zostało to zrobione.Jeśli baza danych witryny nie została utworzona przez zastosowanie migracji początkowej, wystąpi błąd: Operacja bazy danych nie powiodła się podczas przetwarzania żądania. Naciśnij Zastosuj migracje, aby utworzyć bazę danych, a następnie odśwież, aby kontynuować, przechodząc przez błąd.
Następne kroki
- W tym artykule pokazano, jak uwierzytelniać się w firmie Microsoft. Postępuj zgodnie z podobnym podejściem, aby uwierzytelnić się z innymi dostawcami wymienionymi na poprzedniej stronie .
- Po opublikowaniu witryny w aplikacji internetowej Azure, utwórz nowe tajemnice klienta w centrum administracyjnym Microsoft Entra.
- Ustaw
Authentication:Microsoft:ClientId
iAuthentication:Microsoft:ClientSecret
jako ustawienia aplikacji w centrum administracyjnym firmy Microsoft Entra. System konfiguracji jest skonfigurowany do odczytu kluczy ze zmiennych środowiskowych.
W tym przykładzie pokazano, jak umożliwić użytkownikom logowanie się przy użyciu konta służbowego lub osobistego Microsoft przy użyciu projektu ASP.NET Core 3.0 utworzonego na poprzedniej stronie .
Tworzenie aplikacji w centrum administracyjnym firmy Microsoft Entra
- Dodaj pakiet NuGet Microsoft.AspNetCore.Authentication.MicrosoftAccount do projektu.
- Zarejestruj aplikację w centrum administracyjnym firmy Microsoft Entra, wykonując kroki opisane w Rejestrowanie aplikacji przy użyciu platformy tożsamości firmy Microsoft
Utwórz tajny klucz klienta
Wygeneruj wpis tajny klienta w centrum administracyjnym firmy Microsoft Entra, wykonując kroki opisane w Rejestrowanie aplikacji przy użyciu platformy tożsamości Microsoft: Dodawanie poświadczeń.
Przechowuj identyfikator klienta i tajny firmy Microsoft
Przechowuj ustawienia poufne, takie jak identyfikator aplikacji microsoft (klienta) i klucz tajny klienta utworzony w poprzednim kroku za pomocą Secret Manager. W tym przykładzie wykonaj następujące czynności:
Zainicjuj projekt przechowywania tajnych danych zgodnie z instrukcjami w Uruchom przechowywanie tajnych danych.
Przechowuj ustawienia poufne w lokalnym magazynie tajnym przy użyciu kluczy tajnych
Authentication:Microsoft:ClientId
iAuthentication:Microsoft:ClientSecret
.dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Microsoft: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
:
.
Konfigurowanie uwierzytelniania konta Microsoft
Dodaj usługę konta Microsoft do 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().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
});
}
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 rozszerzenia, które rejestrują obsługę uwierzytelniania, mogą być wywoływane tylko raz w ramach danego schematu uwierzytelniania. Istnieją przeciążenia, które umożliwiają konfigurowanie właściwości schematu, nazwy schematu i nazwy wyświetlanej.
Aby uzyskać więcej informacji na temat opcji konfiguracji obsługiwanych przez uwierzytelnianie konta Microsoft, zobacz dokumentację interfejsu API MicrosoftAccountOptions. Może to służyć do żądania różnych informacji o użytkowniku.
Zaloguj się przy użyciu konta Microsoft
Uruchom aplikację i wybierz pozycję Zaloguj się. Pojawi się opcja logowania się przy użyciu firmy Microsoft. Wybierz pozycję Microsoft, aby przejść do witryny Microsoft w celu uwierzytelnienia. Po zalogowaniu się przy użyciu konta Microsoft zostanie wyświetlony monit o zezwolinie aplikacji na dostęp do informacji:
Naciśnij pozycję Tak i nastąpi przekierowanie z powrotem do witryny internetowej, w której można ustawić adres e-mail.
Teraz logujesz się przy użyciu poświadczeń firmy Microsoft.
Wielu dostawców uwierzytelniania
Gdy aplikacja wymaga wielu dostawców, złącz metody rozszerzenia dostawców za AddAuthentication:
services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });
Przekazywanie 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 oryginalne informacje o żądaniu mogą być przekazywane do aplikacji w nagłówkach żądań. Te informacje zwykle obejmują schemat bezpiecznych żądań (https
), host i adres IP klienta. Aplikacje nie odczytują automatycznie tych nagłówków żądań w celu odnajdywania i używania oryginalnych informacji o żądaniu.
Schemat jest używany w generowaniu linków, które wpływają na przepływ uwierzytelniania z zewnętrznymi dostawcami. Utrata bezpiecznego schematu (https
) powoduje wygenerowanie przez aplikację nieprawidłowych niezabezpieczonych adresów URL przekierowania.
Użyj oprogramowania pośredniczącego do przekazywania nagłówków, aby udostępnić aplikacji oryginalne informacje o żądaniu do przetwarzania żądań.
Aby uzyskać więcej informacji, zobacz Konfigurowanie ASP.NET Core do pracy z serwerami proxy i równoważnikami obciążenia.
Rozwiązywanie problemów
Jeśli dostawca usługi kont Microsoft przekierowuje Cię do strony błędu logowania, zanotuj tytuł błędu i parametry ciągu zapytania tytułu i opisu bezpośrednio po
#
(hashtag) w Uri.Chociaż komunikat o błędzie wydaje się wskazywać na problem z uwierzytelnianiem Microsoft, najczęstszą przyczyną jest to, że URI aplikacji nie odpowiada żadnemu z URI przekierowania określonych dla platformy internetowej .
Jeśli Identity nie jest skonfigurowana przez wywołanie
services.AddIdentity
wConfigureServices
, próba uwierzytelnienia spowoduje wystąpienie wyjątku ArgumentException: opcja "SignInScheme" musi być podana. Szablon projektu używany w tym przykładzie gwarantuje, że zostało to zrobione.Jeśli baza danych witryny nie została utworzona przez zastosowanie migracji początkowej, otrzymasz błąd : Operacja bazy danych nie powiodła się podczas przetwarzania żądania. Kliknij Zastosuj migracje, aby utworzyć bazę danych, a następnie odśwież, aby przejść dalej i ominąć błąd.
Następne kroki
- W tym artykule pokazano, jak można uwierzytelnić się w firmie Microsoft. Możesz stosować podobne podejście do uwierzytelniania z innymi dostawcami wymienionymi na poprzedniej stronie .
- Po opublikowaniu witryny na platformie Azure utwórz nowe tajemnice klienta w centrum administracyjnym Microsoft Entra.
- Ustaw
Authentication:Microsoft:ClientId
iAuthentication:Microsoft:ClientSecret
jako ustawienia aplikacji w centrum administracyjnym firmy Microsoft Entra. System konfiguracji jest skonfigurowany do odczytu kluczy ze zmiennych środowiskowych.