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 Connect (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:
- Użytkownicy przechodzą do aplikacji internetowej i wybierają pozycję Zaloguj się.
- Aplikacja inicjuje żądanie uwierzytelniania i przekierowuje użytkowników do usługi Azure AD B2C.
- Użytkownicy zarejestrują się lub zalogują się, zresetuj hasło lub zalogują się przy użyciu konta społecznościowego.
- Po pomyślnym zalogowaniu użytkowników usługa Azure AD B2C zwraca token identyfikatora do aplikacji.
- 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
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Jeśli jeszcze go nie masz, utwórz dzierżawę usługi Azure AD B2C połączoną z subskrypcją platformy Azure.
- Python 3.8+
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:
Zaloguj się w witrynie Azure Portal.
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 .
W witrynie Azure Portal wyszukaj i wybierz pozycję Azure AD B2C.
Wybierz pozycję Rejestracje aplikacji, a następnie wybierz pozycję Nowa rejestracja.
W obszarze Nazwa wprowadź nazwę aplikacji (na przykład webapp1).
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).
W obszarze Identyfikator URI przekierowania wybierz pozycję Sieć Web, a następnie w polu Adres URL wprowadź .
http://localhost:5000/getAToken
W obszarze Uprawnienia zaznacz pole wyboru Udziel zgody administratora na uprawnienia do otwierania i dostępu w trybie offline.
Wybierz pozycję Zarejestruj.
Wybierz Przegląd.
Zarejestruj identyfikator aplikacji (klienta) do późniejszego użycia podczas konfigurowania aplikacji internetowej.
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.
- W obszarze Zarządzanie wybierz pozycję Certyfikaty i wpisy tajne.
- Wybierz Nowy klucz tajny klienta.
- W polu Opis wprowadź opis wpisu tajnego klienta (na przykład clientsecret1).
- W obszarze Wygasa wybierz czas trwania, dla którego wpis tajny jest prawidłowy, a następnie wybierz pozycję Dodaj.
- 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:
.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 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
W konsoli lub terminalu przejdź do katalogu zawierającego przykład. Na przykład:
cd ms-identity-python-webapp
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)
Aby wyświetlić aplikację internetową uruchomioną na komputerze lokalnym, przejdź do
http://localhost:5000
strony .Wybierz pozycję Zaloguj.
Ukończ proces rejestracji lub logowania.
Po pomyślnym uwierzytelnieniu zobaczysz nazwę wyświetlaną, jak pokazano poniżej:
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:
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:
Zaloguj się w witrynie Azure Portal.
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.
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.
W witrynie Azure Portal wyszukaj i wybierz pozycję Azure AD B2C.
Wybierz pozycję Rejestracje aplikacji, a następnie wybierz pozycję Nowa rejestracja.
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.
Wybierz pozycję Zarejestruj.
Po zakończeniu rejestracji aplikacji wybierz pozycję Przegląd.
Zarejestruj wartość identyfikatora aplikacji (klienta) do późniejszego użycia podczas konfigurowania aplikacji internetowej.
Krok 6.2. Konfigurowanie zakresów
Wybierz utworzoną aplikację my-api1 (identyfikator aplikacji: 2), aby otworzyć stronę Przegląd.
W obszarze Zarządzanie wybierz pozycję Uwidaczniaj interfejs API.
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.
W obszarze Zakresy zdefiniowane przez ten interfejs API wybierz pozycję Dodaj zakres.
Aby utworzyć zakres definiujący dostęp do odczytu do interfejsu API:
- W polu Nazwa zakresu wprowadź ciąg tasks.read.
- W polu Nazwa wyświetlana zgody administratora wprowadź odczyt dostępu do interfejsu API zadań.
- W polu Opis zgody administratora wprowadź wartość Zezwalaj na dostęp do odczytu do interfejsu API zadań.
Wybierz Dodaj zakres.
Wybierz pozycję Dodaj zakres, a następnie dodaj zakres definiujący dostęp do zapisu do interfejsu API:
- W polu Nazwa zakresu wprowadź ciąg tasks.write.
- W polu Nazwa wyświetlana zgody administratora wprowadź ciąg Zapis dostępu do interfejsu API zadań.
- W polu Opis zgody administratora wprowadź wartość Zezwalaj na dostęp do zapisu do interfejsu API zadań.
Wybierz Dodaj zakres.
Krok 6.3. Udzielanie uprawnień aplikacji internetowej
Aby udzielić aplikacji (identyfikator aplikacji: 1) uprawnień, wykonaj następujące kroki:
Wybierz Rejestracje aplikacji, a następnie wybierz utworzoną aplikację (identyfikator aplikacji: 1).
W obszarze Zarządzanie wybierz pozycję Uprawnienia interfejsu API.
W obszarze Skonfigurowane uprawnienia wybierz pozycję Dodaj uprawnienie.
Wybierz kartę Moje interfejsy API.
Wybierz interfejs API (identyfikator aplikacji: 2), do którego ma zostać udzielona aplikacja internetowa. Na przykład wprowadź ciąg my-api1.
W obszarze Uprawnienie rozwiń węzeł zadania, a następnie wybierz zdefiniowane wcześniej zakresy (na przykład tasks.read i tasks.write).
Wybierz Przyznaj uprawnienia.
Wybierz pozycję Udziel zgody administratora dla< swojej nazwy> dzierżawy.
Wybierz opcję Tak.
Wybierz pozycję Odśwież, a następnie sprawdź, czy w obszarze Stan dla obu zakresów jest wyświetlana wartość Przyznane dla ... .
Z listy Skonfigurowane uprawnienia wybierz zakres, a następnie skopiuj pełną nazwę zakresu.
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
W konsoli lub terminalu przejdź do katalogu zawierającego przykład.
Jeśli aplikacja nie jest nadal uruchomiona, uruchom ją ponownie przy użyciu polecenia z kroku 5.
Wybierz pozycję Wywołaj podrzędny interfejs 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
- Dowiedz się, jak skonfigurować opcje uwierzytelniania w aplikacji internetowej w języku Python przy użyciu usługi Azure AD B2C.