Konfigurowanie uwierzytelniania w przykładowej aplikacji internetowej wywołującej internetowy interfejs API przy użyciu usługi Azure AD B2C

W tym artykule użyto przykładowej aplikacji internetowej ASP.NET, która wywołuje internetowy interfejs API, aby zilustrować sposób dodawania uwierzytelniania usługi Azure Active Directory B2C (Azure AD B2C) do aplikacji internetowych.

Ważne

Przykładowa aplikacja internetowa ASP.NET, do którego odwołuje się ten artykuł, jest używana do wywoływania internetowego interfejsu API za pomocą tokenu elementu nośnego. Aby zapoznać się z aplikacją internetową, która nie wywołuje internetowego interfejsu API, zobacz Konfigurowanie uwierzytelniania w przykładowej aplikacji internetowej przy użyciu usługi Azure AD B2C.

Omówienie

OpenID Połączenie (OIDC) to protokół uwierzytelniania oparty na protokole OAuth 2.0. Aby bezpiecznie zalogować użytkownika do aplikacji, możesz użyć funkcji OIDC. Ten przykład aplikacji internetowej korzysta z witryny Microsoft Identity Web. Microsoft Identity Web to zestaw bibliotek ASP.NET Core, które upraszczają dodawanie obsługi uwierzytelniania i autoryzacji do aplikacji internetowych, które mogą wywoływać bezpieczny internetowy interfejs API.

Przepływ logowania obejmuje następujące kroki:

  1. Użytkownicy przechodzą do aplikacji internetowej i wybierają pozycję Zaloguj się.

  2. Aplikacja inicjuje żądanie uwierzytelniania i przekierowuje użytkowników do usługi Azure AD B2C.

  3. Użytkownicy zarejestrują się lub zalogują się i zresetuj hasło. Alternatywnie mogą zalogować się przy użyciu konta społecznościowego.

  4. Po zalogowaniu użytkowników usługa Azure AD B2C zwraca kod autoryzacji do aplikacji.

  5. Następnie aplikacja wykonuje następujące czynności:

    a. Wymienia kod autoryzacji do tokenu identyfikatora, tokenu dostępu i tokenu odświeżania.
    b. Odczytuje oświadczenia tokenu identyfikatora i utrwala plik cookie autoryzacji aplikacji.
    c. Przechowuje token odświeżania w pamięci podręcznej do późniejszego użycia.

Omówienie rejestracji aplikacji

Aby umożliwić aplikacji logowanie się za pomocą usługi Azure AD B2C i wywoływanie internetowego interfejsu API, należy zarejestrować dwie aplikacje w katalogu usługi Azure AD B2C.

  • Rejestracja aplikacji internetowej umożliwia aplikacji logowanie się za pomocą usługi Azure AD B2C. Podczas rejestracji należy określić identyfikator URI przekierowania. Identyfikator URI przekierowania to punkt końcowy, do którego użytkownicy są przekierowywani przez usługę Azure AD B2C po zakończeniu uwierzytelniania za pomocą usługi Azure AD B2C. Proces rejestracji aplikacji generuje identyfikator aplikacji, znany również jako identyfikator klienta, który jednoznacznie identyfikuje twoją aplikację. Tworzysz również klucz tajny klienta, którego aplikacja używa do bezpiecznego uzyskiwania tokenów.

  • Rejestracja internetowego interfejsu API umożliwia aplikacji wywoływanie bezpiecznego internetowego interfejsu API. Rejestracja obejmuje zakresy internetowego interfejsu API. Zakresy umożliwiają zarządzanie uprawnieniami do chronionych zasobów, takich jak internetowy interfejs API. Przyznasz aplikacji internetowej uprawnienia do zakresów internetowego interfejsu API. Po zażądaniu tokenu dostępu aplikacja określa żądane uprawnienia w parametrze zakresu żądania.

Architektura i rejestracje aplikacji przedstawiono na poniższym diagramie:

Diagram of a web app with web API call registrations and tokens.

Wywoływanie do internetowego interfejsu API

Po zakończeniu uwierzytelniania użytkownicy wchodzą w interakcję z aplikacją, która wywołuje chroniony internetowy interfejs API. Internetowy interfejs API używa uwierzytelniania tokenu elementu nośnego. Token elementu nośnego to token dostępu uzyskany przez aplikację z usługi Azure AD B2C. Aplikacja przekazuje token w nagłówku autoryzacji żądania HTTPS.

Authorization: Bearer <access token>

Jeśli zakres tokenu dostępu nie jest zgodny z zakresami internetowego interfejsu API, biblioteka uwierzytelniania uzyskuje nowy token dostępu z poprawnymi zakresami.

Wylogowywanie

Przepływ wylogowania obejmuje następujące kroki:

  1. W aplikacji użytkownicy wyloguj się.
  2. Aplikacja czyści obiekty sesji, a biblioteka uwierzytelniania czyści pamięć podręczną tokenów.
  3. Aplikacja przenosi użytkowników do punktu końcowego wylogowania usługi Azure AD B2C, aby zakończyć sesję usługi Azure AD B2C.
  4. Użytkownicy są przekierowywani z powrotem do aplikacji.

Wymagania wstępne

Komputer z jedną z następujących funkcji:

Krok 1. Konfigurowanie przepływu użytkownika

Gdy użytkownicy próbują zalogować się do aplikacji, aplikacja uruchamia żądanie uwierzytelniania do punktu końcowego autoryzacji za pośrednictwem przepływu użytkownika. Przepływ użytkownika definiuje i kontroluje środowisko użytkownika. Po zakończeniu przepływu użytkownika usługa Azure AD B2C generuje token, a następnie przekierowuje użytkowników z powrotem do aplikacji.

Jeśli jeszcze tego nie zrobiono, utwórz przepływ użytkownika lub zasady niestandardowe. Powtórz kroki, aby utworzyć trzy oddzielne przepływy użytkownika w następujący sposób:

  • Połączony przepływ logowania i rejestracji użytkownika, taki jak susi. Ten przepływ użytkownika obsługuje również środowisko Nie pamiętasz hasła .
  • Przepływ użytkownika do edycji profilu, taki jak edit_profile.
  • Przepływ użytkownika resetowania hasła, taki jak reset_password.

Usługa Azure AD B2C poprzedza B2C_1_ nazwę przepływu użytkownika. Na przykład, susi staje się B2C_1_susi.

Krok 2. Rejestrowanie aplikacji internetowych

W tym kroku utworzysz aplikację internetową i rejestrację aplikacji internetowego interfejsu API oraz określisz zakresy internetowego interfejsu API.

Krok 2.1. Rejestrowanie aplikacji internetowego interfejsu API

Aby utworzyć rejestrację aplikacji internetowego interfejsu API (identyfikator aplikacji: 2), wykonaj następujące kroki:

  1. Zaloguj się w witrynie Azure Portal.

  2. Upewnij się, że używasz katalogu zawierającego dzierżawę usługi Azure AD B2C. Wybierz ikonę Katalogi i subskrypcje na pasku narzędzi portalu.

  3. W ustawieniach portalu | Strona Katalogi i subskrypcje , znajdź katalog usługi Azure AD B2C na liście Nazwa katalogu, a następnie wybierz pozycję Przełącz.

  4. W witrynie Azure Portal wyszukaj i wybierz pozycję Azure AD B2C.

  5. Wybierz pozycję Rejestracje aplikacji, a następnie wybierz pozycję Nowa rejestracja.

  6. W polu Nazwa wprowadź nazwę aplikacji (na przykład my-api1). Pozostaw wartości domyślne dla identyfikatora URI przekierowania i obsługiwanych typów kont.

  7. Wybierz pozycję Zarejestruj.

  8. Po zakończeniu rejestracji aplikacji wybierz pozycję Przegląd.

  9. Zarejestruj wartość identyfikatora aplikacji (klienta) do późniejszego użycia podczas konfigurowania aplikacji internetowej.

    Screenshot that demonstrates how to get a web A P I application I D.

Krok 2.2. Konfigurowanie zakresów aplikacji internetowego interfejsu API

  1. Wybierz utworzoną aplikację my-api1 (identyfikator aplikacji: 2), aby otworzyć stronę Przegląd.

  2. W obszarze Zarządzanie wybierz pozycję Uwidaczniaj interfejs API.

  3. Obok pozycji Identyfikator URI identyfikatora aplikacji wybierz link Ustaw . Zastąp wartość domyślną (GUID) unikatową nazwą (na przykład tasks-api), a następnie wybierz pozycję Zapisz.

    Gdy aplikacja internetowa żąda tokenu dostępu dla internetowego interfejsu API, powinien dodać ten identyfikator URI jako prefiks dla każdego zakresu zdefiniowanego dla interfejsu API.

  4. W obszarze Zakresy zdefiniowane przez ten interfejs API wybierz pozycję Dodaj zakres.

  5. Aby utworzyć zakres definiujący dostęp do odczytu do interfejsu API:

    1. W polu Nazwa zakresu wprowadź ciąg tasks.read.
    2. W przypadku Administracja nazwy wyświetlanej zgody wprowadź odczyt dostępu do interfejsu API zadań.
    3. Aby uzyskać Administracja opis zgody, wprowadź zezwalanie na dostęp do odczytu do interfejsu API zadań.
  6. Wybierz Dodaj zakres.

  7. Wybierz pozycję Dodaj zakres, a następnie dodaj zakres definiujący dostęp do zapisu do interfejsu API:

    1. W polu Nazwa zakresu wprowadź ciąg tasks.write.
    2. W przypadku Administracja nazwy wyświetlanej zgody wprowadź wartość Write access to tasks API (Zapis dostępu do interfejsu API zadań).
    3. Aby uzyskać Administracja opis zgody, wprowadź zezwalanie na dostęp do zapisu do interfejsu API zadań.
  8. Wybierz Dodaj zakres.

Krok 2.3. Rejestrowanie aplikacji internetowej

Aby utworzyć rejestrację aplikacji internetowej, wykonaj następujące czynności:

  1. Wybierz pozycję Rejestracje aplikacji, a następnie wybierz pozycję Nowa rejestracja.

  2. W obszarze Nazwa wprowadź nazwę aplikacji (na przykład webapp1).

  3. W obszarze Obsługiwane typy kont wybierz Konta w dowolnym dostawcy tożsamości lub katalogu organizacyjnym (do uwierzytelniania użytkowników za pomocą przepływów użytkownika).

  4. W obszarze Identyfikator URI przekierowania wybierz pozycję Sieć Web, a następnie w polu Adres URL wprowadź .https://localhost:5000/signin-oidc

  5. W obszarze Uprawnienia zaznacz pole wyboru Udziel zgody administratora na uprawnienia do otwierania i dostępu w trybie offline.

  6. Wybierz pozycję Zarejestruj.

  7. Po zakończeniu rejestracji aplikacji wybierz pozycję Przegląd.

  8. Zarejestruj identyfikator aplikacji (klienta) do późniejszego użycia podczas konfigurowania aplikacji internetowej.

    Screenshot of the web app Overview page for recording your web application ID.

Krok 2.4. Tworzenie wpisu tajnego klienta aplikacji internetowej

Utwórz wpis tajny klienta dla zarejestrowanej aplikacji internetowej. Aplikacja internetowa używa klucza tajnego klienta, aby udowodnić swoją tożsamość, gdy żąda tokenów.

  1. W obszarze Zarządzanie wybierz pozycję Certyfikaty i wpisy tajne.
  2. Wybierz Nowy klucz tajny klienta.
  3. W polu Opis wprowadź opis wpisu tajnego klienta (na przykład clientsecret1).
  4. W obszarze Wygasa wybierz czas trwania, dla którego wpis tajny jest prawidłowy, a następnie wybierz pozycję Dodaj.
  5. Zarejestruj wartość wpisu tajnego. Użyjesz tej wartości do konfiguracji w późniejszym kroku.

Krok 2.5. Udzielanie uprawnień aplikacji internetowej dla internetowego interfejsu API

Aby udzielić aplikacji (identyfikator aplikacji: 1) uprawnień, wykonaj następujące kroki:

  1. Wybierz Rejestracje aplikacji, a następnie wybierz utworzoną aplikację (identyfikator aplikacji: 1).

  2. W obszarze Zarządzanie wybierz pozycję Uprawnienia interfejsu API.

  3. W obszarze Skonfigurowane uprawnienia wybierz pozycję Dodaj uprawnienie.

  4. Wybierz kartę Moje interfejsy API.

  5. Wybierz interfejs API (identyfikator aplikacji: 2), do którego ma zostać udzielona aplikacja internetowa. Na przykład wprowadź ciąg my-api1.

  6. W obszarze Uprawnienie rozwiń węzeł zadania, a następnie wybierz zdefiniowane wcześniej zakresy (na przykład tasks.read i tasks.write).

  7. Wybierz Przyznaj uprawnienia.

  8. Wybierz pozycję Udziel zgody administratora dla< swojej nazwy> dzierżawy.

  9. Wybierz opcję Tak.

  10. Wybierz pozycję Odśwież, a następnie sprawdź, czy w obszarze Stan dla obu zakresów jest wyświetlana wartość Przyznane dla ... .

  11. Z listy Skonfigurowane uprawnienia wybierz zakres, a następnie skopiuj pełną nazwę zakresu.

    Screenshot of the configured permissions pane, showing that read access permissions are granted.

Krok 3. Pobieranie przykładu aplikacji internetowej

Pobierz plik zip lub uruchom następujące polecenie powłoki Bash, aby sklonować przykładową aplikację internetową z usługi GitHub.

git clone https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2

Wyodrębnij przykładowy plik do folderu, w którym całkowita długość ścieżki wynosi 260 lub mniej znaków.

Krok 4. Konfigurowanie przykładowego internetowego interfejsu API

W folderze przykładowym w folderze 4-WebApp-your-API/4-2-B2C/TodoListService otwórz projekt TodoListService.csproj za pomocą programu Visual Studio lub Visual Studio Code.

W folderze głównym projektu otwórz plik appsettings.json . Ten plik zawiera informacje o dostawcy tożsamości usługi Azure AD B2C. Aplikacja internetowego interfejsu API używa tych informacji do sprawdzania poprawności tokenu dostępu, który aplikacja internetowa przekazuje jako token elementu nośnego. Zaktualizuj następujące właściwości ustawień aplikacji:

Sekcja Key Wartość
AzureAdB2C Wystąpienie Pierwsza część nazwy dzierżawy usługi Azure AD B2C. Na przykład https://contoso.b2clogin.com.
AzureAdB2C Domain Pełna nazwa dzierżawy usługi Azure AD B2C. Na przykład contoso.onmicrosoft.com.
AzureAdB2C ClientId Identyfikator aplikacji internetowego interfejsu API z kroku 2.1.
AzureAdB2C SignUpSignInPolicyId Przepływy użytkownika lub zasady niestandardowe utworzone w kroku 1.

Ostateczny plik konfiguracji powinien wyglądać podobnie do następującego pliku JSON:

{
  "AzureAdB2C": {
    "Instance": "https://contoso.b2clogin.com",
    "Domain": "contoso.onmicrosoft.com",
    "ClientId": "<web-api-app-application-id>",
    "SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
    "SignUpSignInPolicyId": "<your-sign-up-in-policy>"
  },
  // More settings here
}

Krok 4.1. Ustawianie zasad uprawnień

Internetowy interfejs API sprawdza, czy użytkownik uwierzytelniony przy użyciu tokenu elementu nośnego, a token elementu nośnego ma skonfigurowane zaakceptowane zakresy. Jeśli token elementu nośnego nie ma żadnego z tych akceptowanych zakresów, internetowy interfejs API zwraca kod stanu HTTP 403 (Zabronione) i zapisuje w treści odpowiedzi komunikat informujący, które zakresy są oczekiwane w tokenie.

Aby skonfigurować zaakceptowane zakresy, otwórz klasę Controller/TodoListController.cs i ustaw nazwę zakresu bez pełnego identyfikatora URI.

[RequiredScope("tasks.read")]

Krok 4.2. Uruchamianie przykładowej aplikacji internetowego interfejsu API

Aby umożliwić aplikacji internetowej wywołanie przykładowego internetowego interfejsu API, uruchom internetowy interfejs API, wykonując następujące czynności:

  1. Jeśli chcesz to zrobić, przywróć zależności.
  2. Skompiluj i uruchom projekt.
  3. Po skompilaniu projektu program Visual Studio lub Visual Studio Code uruchamia internetowy interfejs API w przeglądarkach o następującym adresie: https://localhost:44332.

Krok 5. Konfigurowanie przykładowej aplikacji internetowej

W folderze przykładowym w folderze 4-WebApp-your-API/4-2-B2C/Client otwórz projekt TodoListClient.csproj za pomocą programu Visual Studio lub Visual Studio Code.

W folderze głównym projektu otwórz appsettings.json plik. Ten plik zawiera informacje o dostawcy tożsamości usługi Azure AD B2C. Aplikacja internetowa używa tych informacji do ustanawiania relacji zaufania z usługą Azure AD B2C, logowania użytkowników i wylogowywanie ich, uzyskiwanie tokenów i ich weryfikowanie. Zaktualizuj następujące właściwości ustawień aplikacji:

Sekcja Key Wartość
AzureAdB2C Wystąpienie Pierwsza część nazwy dzierżawy usługi Azure AD B2C (na przykład https://contoso.b2clogin.com).
AzureAdB2C Domain Pełna nazwa dzierżawy usługi Azure AD B2C (na przykład contoso.onmicrosoft.com).
AzureAdB2C ClientId Identyfikator aplikacji internetowej z kroku 2.3.
AzureAdB2C ClientSecret Wpis tajny aplikacji internetowej z kroku 2.4.
AzureAdB2C SignUpSignInPolicyId Przepływy użytkownika lub zasady niestandardowe utworzone w kroku 1.
Lista zadań do wykonania TodoListScope Zakresy internetowego interfejsu API utworzone w kroku 2.5.
Lista zadań do wykonania TodoListBaseAddress Podstawowy identyfikator URI internetowego interfejsu API (na przykład https://localhost:44332).

Ostateczny plik konfiguracji powinien wyglądać podobnie do następującego kodu JSON:

{
  "AzureAdB2C": {
    "Instance": "https://contoso.b2clogin.com",
    "Domain": "contoso.onmicrosoft.com",
    "ClientId": "<web-app-application-id>",
    "ClientSecret": "<web-app-application-secret>",  
    "SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
    "SignUpSignInPolicyId": "<your-sign-up-in-policy>"
  },
  "TodoList": {
    "TodoListScope": "https://contoso.onmicrosoft.com/api/demo.read",
    "TodoListBaseAddress": "https://localhost:44332"
  }
}

Krok 6. Uruchamianie przykładowej aplikacji internetowej

  1. Skompiluj i uruchom projekt.
  2. Przejdź do https://localhost:5000.
  3. Ukończ proces rejestracji lub logowania.

Po pomyślnym uwierzytelnieniu na pasku nawigacyjnym zobaczysz nazwę wyświetlaną. Aby wyświetlić oświadczenia, które token usługi Azure AD B2C powraca do aplikacji, wybierz pozycję TodoList.

Screenshot of the web app token claims.

Wdrażanie aplikacji

W aplikacji produkcyjnej identyfikator URI przekierowania rejestracji aplikacji jest zazwyczaj publicznie dostępnym punktem końcowym, w którym aplikacja jest uruchomiona, na przykład https://contoso.com/signin-oidc.

W dowolnym momencie możesz dodawać i modyfikować identyfikatory URI przekierowania w zarejestrowanych aplikacjach. Następujące ograniczenia dotyczą identyfikatorów URI przekierowania:

  • Adres URL odpowiedzi musi zaczynać się od schematu https.
  • W adresie URL odpowiedzi jest uwzględniana wielkość liter. Jego wielkość liter musi być zgodna ze wielkością ścieżki adresu URL uruchomionej aplikacji.

Pamięć podręczna tokenów dla aplikacji internetowej

Przykład aplikacji internetowej używa serializacji pamięci podręcznej tokenu w pamięci. Ta implementacja doskonale sprawdza się w przykładach. Jest to również dobre w aplikacjach produkcyjnych, pod warunkiem, że nie masz nic przeciwko utracie pamięci podręcznej tokenów po ponownym uruchomieniu aplikacji internetowej.

W środowisku produkcyjnym zalecamy użycie rozproszonej pamięci podręcznej. Na przykład pamięć podręczna Redis Cache, NCache lub pamięć podręczna programu SQL Server. Aby uzyskać szczegółowe informacje na temat implementacji rozproszonej pamięci podręcznej, zobacz Serializacja pamięci podręcznej tokenów.

Następne kroki