Konfigurowanie uwierzytelniania w przykładowej aplikacji internetowej w języku Python przy użyciu usługi Azure AD B2C

W tym artykule użyto przykładowej aplikacji internetowej w języku Python, aby zilustrować sposób dodawania uwierzytelniania usługi Azure Active Directory B2C (Azure AD B2C) do aplikacji internetowych.

Omówienie

OpenID Połączenie (OIDC) to protokół uwierzytelniania oparty na protokole OAuth 2.0. Aby bezpiecznie logować użytkowników do aplikacji, możesz użyć funkcji OIDC. Ten przykład aplikacji internetowej używa pakietu tożsamości dla języka Python , aby uprościć dodawanie obsługi uwierzytelniania i autoryzacji do aplikacji internetowych języka Python.

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ę, zresetuj hasło lub zalogują się przy użyciu konta społecznościowego.
  4. Po pomyślnym zalogowaniu użytkowników usługa Azure AD B2C zwraca token identyfikatora do aplikacji.
  5. Aplikacja wymienia kod autoryzacji za pomocą tokenu identyfikatora, weryfikuje token identyfikatora, odczytuje oświadczenia, a następnie zwraca bezpieczną stronę do użytkowników.

Wymagania wstępne

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 internetowej

Aby umożliwić aplikacji logowanie się za pomocą usługi Azure AD B2C, zarejestruj aplikację w katalogu usługi Azure AD B2C. Zarejestrowanie aplikacji ustanawia relację zaufania między aplikacją a usługą Azure AD B2C.

Podczas rejestracji aplikacji określisz identyfikator URI przekierowania. Identyfikator URI przekierowania to punkt końcowy, do którego użytkownicy są przekierowywani przez usługę Azure AD B2C po uwierzytelnieniu w usłudze Azure AD B2C. Proces rejestracji aplikacji generuje identyfikator aplikacji, znany również jako identyfikator klienta, który jednoznacznie identyfikuje twoją aplikację. Po zarejestrowaniu aplikacji usługa Azure AD B2C używa zarówno identyfikatora aplikacji, jak i identyfikatora URI przekierowania do tworzenia żądań uwierzytelniania.

Krok 2.1. Rejestrowanie aplikacji

Aby utworzyć rejestrację aplikacji internetowej, wykonaj następujące kroki:

  1. Zaloguj się w witrynie Azure Portal.

  2. Jeśli masz dostęp do wielu dzierżaw, wybierz ikonę Ustawienia w górnym menu, aby przełączyć się do dzierżawy usługi Azure AD B2C z menu Katalogi i subskrypcje.

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

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

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

  6. 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).

  7. W obszarze Identyfikator URI przekierowania wybierz pozycję Sieć Web, a następnie w polu Adres URL wprowadź .http://localhost:5000/getAToken

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

  9. Wybierz pozycję Zarejestruj.

  10. Wybierz Przegląd.

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

    Screenshot of the web app Overview page for recording your web app I D.

Krok 2.2. 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 3. Pobieranie przykładu aplikacji internetowej

Pobierz plik zip lub sklonuj przykładową aplikację internetową z usługi GitHub.

git clone https://github.com/Azure-Samples/ms-identity-python-webapp.git

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ładowej aplikacji internetowej

W katalogu głównym projektu wykonaj następujące kroki:

  1. .env Utwórz plik w folderze głównym projektu przy użyciu .env.sample polecenia jako przewodnik.

    FLASK_DEBUG=True
    B2C_TENANT_NAME=<tenant name>
    CLIENT_ID=<client id>
    CLIENT_SECRET=<client secret>
    SIGNUPSIGNIN_USER_FLOW=B2C_1_signupsignin1
    EDITPROFILE_USER_FLOW=B2C_1_profile_editing
    RESETPASSWORD_USER_FLOW=B2C_1_reset_password
    
    Key Wartość
    B2C_TENANT_NAME Pierwsza część nazwy dzierżawy usługi Azure AD B2C (na przykład contoso).
    CLIENT_ID Identyfikator aplikacji internetowego interfejsu API z kroku 2.1.
    CLIENT_SECRET Wartość wpisu tajnego klienta utworzona w kroku 2.2.
    *_USER_FLOW Przepływy użytkownika utworzone w kroku 1.

    Zmienne środowiskowe są przywołyane w pliku app_config.py i są przechowywane w osobnym pliku env , aby zachować je poza kontrolą źródła. Podany plik .gitignore uniemożliwia zaewidencjonowanie pliku env.

Krok 5. Uruchamianie przykładowej aplikacji internetowej

  1. W konsoli lub terminalu przejdź do katalogu zawierającego przykład. Na przykład:

    cd ms-identity-python-webapp
    
  2. Zainstaluj wymagane pakiety z PyPi i uruchom aplikację internetową na komputerze lokalnym, uruchamiając następujące polecenia:

    python -m pip install -r requirements.txt
    python -m flask run --host localhost --port 5000
    

    W oknie konsoli zostanie wyświetlony numer portu uruchomionej lokalnie aplikacji:

     * Debug mode: on
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Running on `http://localhost:5000/` (Press CTRL+C to quit)
    
  3. Aby wyświetlić aplikację internetową uruchomioną na komputerze lokalnym, przejdź do http://localhost:5000strony .

  4. Wybierz pozycję Zaloguj.

    Screenshot showing the sign-in flow.

  5. Ukończ proces rejestracji lub logowania.

  6. Po pomyślnym uwierzytelnieniu zobaczysz nazwę wyświetlaną, jak pokazano poniżej:

    Screenshot showing the web app token's display name claim.

Krok 6. Wywoływanie internetowego interfejsu API

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

  • Rejestracja aplikacji internetowej (Python) utworzona już w kroku 2. Ta rejestracja aplikacji umożliwia aplikacji logowanie się 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ę. Na przykład identyfikator aplikacji: 1.

  • Rejestracja internetowego interfejsu API umożliwia aplikacji wywoływanie chronionego internetowego interfejsu API. Rejestracja uwidacznia uprawnienia internetowego interfejsu API (zakresy). Proces rejestracji aplikacji generuje identyfikator aplikacji, który jednoznacznie identyfikuje internetowy interfejs API (na przykład identyfikator aplikacji: 2). Przyznaj aplikacji (identyfikator aplikacji: 1) uprawnienia do zakresów internetowego interfejsu API (identyfikator aplikacji: 2).

Rejestracje aplikacji i architektura aplikacji zostały opisane na następujących diagramach:

Diagram describing a web app with web API, registrations, and tokens.

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.

Krok 6.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 6.2. Konfigurowanie zakresów

  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 6.3. Udzielanie uprawnień aplikacji internetowej

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 6.4. Konfigurowanie internetowego interfejsu API

Ten przykład uzyskuje token dostępu z odpowiednimi zakresami, których aplikacja internetowa może używać dla internetowego interfejsu API. Ten przykład nie działa jako internetowy interfejs API. Zamiast tego należy użyć istniejącego internetowego interfejsu API lub utworzyć nowy. Aby zapoznać się z samouczkiem dotyczącym tworzenia internetowego interfejsu API w dzierżawie usługi B2C, zobacz Włączanie uwierzytelniania we własnym internetowym interfejsie API przy użyciu usługi Azure AD B2C.

Krok 6.5. Konfigurowanie przykładowej aplikacji przy użyciu internetowego interfejsu API

Otwórz plik app_config.py. Ten plik zawiera informacje o dostawcy tożsamości usługi Azure AD B2C. Zaktualizuj następujące właściwości ustawień aplikacji:

Key Wartość
ENDPOINT Identyfikator URI internetowego interfejsu API (na przykład https://localhost:6000/hello).
SCOPE Utworzone zakresy internetowego interfejsu API (na przykład ["https://contoso.onmicrosoft.com/tasks-api/tasks.read", https://contoso.onmicrosoft.com/tasks-api/tasks.write"]).

Krok 6.6. Uruchamianie przykładowej aplikacji

  1. W konsoli lub terminalu przejdź do katalogu zawierającego przykład.

  2. Jeśli aplikacja nie jest nadal uruchomiona, uruchom ją ponownie przy użyciu polecenia z kroku 5.

  3. Wybierz pozycję Wywołaj podrzędny interfejs API.

    Screenshot showing how to call a web API.

Krok 7. Wdrażanie aplikacji

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

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 przekierowania musi zaczynać się od schematu https.
  • W adresie URL przekierowania jest uwzględniana wielkość liter. Jego wielkość liter musi być zgodna ze wielkością ścieżki adresu URL uruchomionej aplikacji.

Następne kroki