Udostępnij za pośrednictwem


Konfiguracja logowania zewnętrznego konta Microsoft przy użyciu platformy ASP.NET Core

Autorzy: 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 6.0 utworzonego na poprzedniej stronie.

Tworzenie aplikacji w portalu deweloperów firmy Microsoft

Jeśli nie masz konta Microsoft, wybierz pozycję Utwórz konto. Po zalogowaniu nastąpi przekierowanie do strony Rejestracje aplikacji:

  • Wybierz pozycję Nowa rejestracja
  • W polu Nazwa wprowadź nazwę.
  • Wybierz opcję Obsługiwane typy kont.
    • Pakiet MicrosoftAccount obsługuje rejestracje aplikacji utworzone przy użyciu opcji "Konta w dowolnym katalogu organizacyjnym" lub "Konta w dowolnym katalogu organizacyjnym i kontach Microsoft" domyślnie.
    • Aby użyć innych opcji, ustaw AuthorizationEndpoint i TokenEndpoint członków MicrosoftAccountOptions używane do inicjowania uwierzytelniania konta Microsoft na adresy URL wyświetlane na stronie Punkty końcowe rejestracji aplikacji po jej utworzeniu (dostępne, klikając punkty końcowe na stronie Przegląd ).
  • W obszarze Identyfikator URI przekierowania wprowadź adres URL programowania z dołączonym ciągiem /signin-microsoft . Na przykład https://localhost:5001/signin-microsoft. Schemat uwierzytelniania firmy Microsoft skonfigurowany w dalszej części tego przykładu automatycznie obsłuży żądania na /signin-microsoft trasie w celu zaimplementowania przepływu OAuth.
  • Wybierz pozycję Zarejestruj

Tworzenie wpisu tajnego klienta

  • W okienku po lewej stronie wybierz pozycję Certyfikaty i wpisy tajne.
  • W obszarze Wpisy tajne klienta wybierz pozycję Nowy klucz tajny klienta
    • Dodaj opis wpisu tajnego klienta.
    • Kliknij przycisk Dodaj.
  • W obszarze Wpisy tajne klienta skopiuj wartość klucza tajnego klienta.

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

Przechowywanie identyfikatora klienta i wpisu tajnego firmy Microsoft

Przechowuj ustawienia poufne, takie jak identyfikator aplikacji firmy Microsoft (klienta) znalezione na stronie Przegląd rejestracji aplikacji i wpisu tajnego klienta utworzonego na stronie Certyfikaty i wpisy tajne za pomocą menedżera wpisów tajnych. 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:Microsoft:ClientId tajnych i Authentication:Microsoft:ClientSecret:

    dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Microsoft: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 :

Konfigurowanie uwierzytelniania konta Microsoft

Dodaj usługę uwierzytelniania do elementu Program:

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

services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
    {
        microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
        microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
    });

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.

Aby uzyskać więcej informacji na temat opcji konfiguracji obsługiwanych przez uwierzytelnianie konta Microsoft, zobacz dokumentację interfejsu MicrosoftAccountOptions API. 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ę przy użyciu firmy Microsoft. Nastąpi przekierowanie do firmy 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 opcję Tak. 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, należy połączyć metody rozszerzenia dostawcy za :AddAuthentication

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

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.

Rozwiązywanie problemów

  • Jeśli dostawca konta Microsoft przekierowuje Cię do strony błędu logowania, zanotuj tytuł błędu i parametry ciągu zapytania opisu bezpośrednio po # (hashtag) w identyfikatorze URI.

    Chociaż komunikat o błędzie wydaje się wskazywać na problem z uwierzytelnianiem firmy Microsoft, najczęstszą przyczyną jest to, że identyfikator URI aplikacji nie pasuje do żadnego z identyfikatorów URI przekierowania określonych dla platformy sieci Web .

  • Jeśli Identity nie skonfigurowano przez wywołanie services.AddIdentity metody w ConfigureServicesmetodzie , próba uwierzytelnienia spowoduje wyjątek ArgumentException: należy podać opcję "SignInScheme". Szablon projektu używany w tym przykładzie gwarantuje, że zostało to zrobione.

  • 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 . Naciśnij pozycję Zastosuj migracje , aby utworzyć bazę danych i odświeżyć, aby kontynuować wklejenie błędu.

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 internetowej w aplikacji internetowej platformy Azure utwórz nowe wpisy tajne klienta w portalu deweloperów firmy Microsoft.
  • Authentication:Microsoft:ClientId Ustaw wartości i Authentication:Microsoft:ClientSecret jako ustawienia aplikacji w witrynie Azure Portal. 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 portalu deweloperów firmy Microsoft

Jeśli nie masz konta Microsoft, wybierz pozycję Utwórz konto. Po zalogowaniu nastąpi przekierowanie do strony Rejestracje aplikacji:

  • Wybierz pozycję Nowa rejestracja
  • W polu Nazwa wprowadź nazwę.
  • Wybierz opcję Obsługiwane typy kont.
    • Pakiet MicrosoftAccount obsługuje rejestracje aplikacji utworzone przy użyciu opcji "Konta w dowolnym katalogu organizacyjnym" lub "Konta w dowolnym katalogu organizacyjnym i kontach Microsoft" domyślnie.
    • Aby użyć innych opcji, ustaw AuthorizationEndpoint i TokenEndpoint członków MicrosoftAccountOptions używane do inicjowania uwierzytelniania konta Microsoft na adresy URL wyświetlane na stronie Punkty końcowe rejestracji aplikacji po jej utworzeniu (dostępne, klikając punkty końcowe na stronie Przegląd ).
  • W obszarze Identyfikator URI przekierowania wprowadź adres URL programowania z dołączonym ciągiem /signin-microsoft . Na przykład https://localhost:5001/signin-microsoft. Schemat uwierzytelniania firmy Microsoft skonfigurowany w dalszej części tego przykładu automatycznie obsłuży żądania na /signin-microsoft trasie w celu zaimplementowania przepływu OAuth.
  • Wybierz pozycję Zarejestruj

Tworzenie wpisu tajnego klienta

  • W okienku po lewej stronie wybierz pozycję Certyfikaty i wpisy tajne.
  • W obszarze Wpisy tajne klienta wybierz pozycję Nowy klucz tajny klienta
    • Dodaj opis wpisu tajnego klienta.
    • Kliknij przycisk Dodaj.
  • W obszarze Wpisy tajne klienta skopiuj wartość klucza tajnego klienta.

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

Przechowywanie identyfikatora klienta i wpisu tajnego firmy Microsoft

Przechowuj ustawienia poufne, takie jak identyfikator aplikacji firmy Microsoft (klienta) znalezione na stronie Przegląd rejestracji aplikacji i wpisu tajnego klienta utworzonego na stronie Certyfikaty i wpisy tajne za pomocą menedżera wpisów tajnych. 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:Microsoft:ClientId tajnych i Authentication:Microsoft:ClientSecret:

    dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Microsoft: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 :

Konfigurowanie uwierzytelniania konta Microsoft

Dodaj usługę konta Microsoft 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().AddMicrosoftAccount(microsoftOptions =>
    {
        microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
        microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
    });
}

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.

Aby uzyskać więcej informacji na temat opcji konfiguracji obsługiwanych przez uwierzytelnianie konta Microsoft, zobacz dokumentację interfejsu MicrosoftAccountOptions API. 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. Po wybraniu opcji w firmie Microsoft nastąpi przekierowanie do firmy 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, należy połączyć metody rozszerzenia dostawcy za :AddAuthentication

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

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.

Rozwiązywanie problemów

  • Jeśli dostawca konta Microsoft przekierowuje Cię do strony błędu logowania, zanotuj tytuł błędu i parametry ciągu zapytania opisu bezpośrednio po # (hashtag) w identyfikatorze URI.

    Chociaż komunikat o błędzie wydaje się wskazywać na problem z uwierzytelnianiem firmy Microsoft, najczęstszą przyczyną jest to, że identyfikator URI aplikacji nie pasuje do żadnego z identyfikatorów URI przekierowania określonych dla platformy sieci Web .

  • Jeśli Identity nie skonfigurowano przez wywołanie services.AddIdentity metody w ConfigureServicesmetodzie , próba uwierzytelnienia spowoduje wyjątek ArgumentException: należy podać opcję "SignInScheme". Szablon projektu używany w tym przykładzie gwarantuje, że zostało to zrobione.

  • 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 . Naciśnij pozycję Zastosuj migracje , aby utworzyć bazę danych i odświeżyć, aby kontynuować wklejenie błędu.

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 internetowej w aplikacji internetowej platformy Azure utwórz nowe wpisy tajne klienta w portalu deweloperów firmy Microsoft.
  • Authentication:Microsoft:ClientId Ustaw wartości i Authentication:Microsoft:ClientSecret jako ustawienia aplikacji w witrynie Azure Portal. System konfiguracji jest skonfigurowany do odczytu kluczy ze zmiennych środowiskowych.