Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:
Najemcy pracowników
Najemcy zewnętrzni (dowiedz się więcej)
Ten samouczek przeprowadzi Cię przez proces zabezpieczania aplikacji internetowej platformy Python Flask.
W tym samouczku nauczysz się następujących rzeczy:
- Tworzenie projektu platformy Python Flask
- Instalowanie wymaganych zależności
- Konfigurowanie aplikacji internetowej platformy Flask do korzystania z platformy tożsamości firmy Microsoft na potrzeby uwierzytelniania
- Przetestuj doświadczenia logowania i wylogowania w swojej aplikacji internetowej Flask
Warunki wstępne
- Najemca zasobów pracowniczych. Możesz użyć swojego katalogu domyślnego lub skonfigurować nowego najemcę.
- Zarejestruj nową aplikację w centrum administracyjnym usługi Microsoft Entra, skonfigurowaną tylko dla kont w tym katalogu organizacyjnym. Aby uzyskać więcej informacji, zobacz Rejestrowanie aplikacji . Zapisz następujące wartości na stronie Przegląd aplikacji do późniejszego użycia:
- Identyfikator aplikacji (klienta)
- Identyfikator katalogu (klienta)
- Dodaj wpis tajny klienta do rejestracji aplikacji. Nie używaj wpisów tajnych klienta w aplikacjach produkcyjnych. Zamiast tego użyj certyfikatów lub poświadczeń federacyjnych. Aby uzyskać więcej informacji, zobacz Dodawanie poświadczeń do aplikacji.
- python 3+.
- Visual Studio Code lub innego edytora kodu.
Tworzenie projektu platformy Flask
Utwórz folder do hostowania aplikacji Platformy Flask, na przykład flask-web-app.
Otwórz okno konsoli i przejdź do katalogu swojej aplikacji webowej Flask przy użyciu polecenia.
cd flask-web-appKonfigurowanie środowiska wirtualnego
W zależności od systemu operacyjnego uruchom następujące polecenia, aby skonfigurować środowisko wirtualne i aktywować je:
W przypadku systemu operacyjnego Windows:
py -m venv .venv .venv\scripts\activateW przypadku systemu operacyjnego macOS lub Linux:
python3 -m venv .venv source .venv/bin/activate
Instalowanie zależności aplikacji
Aby zainstalować zależności aplikacji, uruchom następujące polecenia:
pip install flask
pip install python-dotenv
pip install requests
pip install "ms_identity_python[flask] @ git+https://github.com/azure-samples/ms-identity-python@0.9"
Biblioteka ms_identity_python instalowana automatycznie instaluje bibliotekę Microsoft Authentication Library (MSAL) dla języka Python jako jej zależność. Biblioteka MSAL Python to narzędzie, które umożliwia uwierzytelnianie użytkowników i zarządzanie tokenami dostępu.
Po zainstalowaniu wymaganych bibliotek zaktualizuj plik wymagań, uruchamiając następujące polecenie:
pip freeze > requirements.txt
Konfigurowanie aplikacji pod kątem uwierzytelniania
Aplikacje internetowe, które logują użytkowników przy użyciu platformy tożsamości firmy Microsoft, są konfigurowane za pośrednictwem pliku konfiguracji env. Na platformie Python Flask musi określić następujące wartości:
| Zmienna środowiskowa | Description |
|---|---|
AUTHORITY |
Adres URL instancji chmury, pod którą zarejestrowano aplikację. Format: https://{Instance}/{TenantId}. Użyj jednej z następujących wartości wystąpienia:- https://login.microsoftonline.com/ (Chmura publiczna platformy Azure)- https://login.microsoftonline.us/ (Azure US Government)- https://login.microsoftonline.de/ (Microsoft Entra Germany)- https://login.partner.microsoftonline.cn/ (Microsoft Entra China, obsługiwany przez firmę 21Vianet) |
TENANT_ID |
Identyfikator dzierżawcy, w którym zarejestrowano aplikację. Wybierz identyfikator klienta z rejestracji aplikacji lub użyj jednego z następujących: - organizations: logowanie użytkowników na dowolnym koncie służbowym lub szkolnym- common: logowanie użytkowników przy użyciu dowolnego konta służbowego lub osobistego Microsoft- consumers: logowanie użytkowników tylko przy użyciu konta osobistego Microsoft |
CLIENT_ID |
Identyfikator aplikacji (klienta) uzyskanej z rejestracji aplikacji. |
CLIENT_SECRET |
Wartość tajna uzyskana z dodawania poświadczeń w centrum administracyjnym Microsoft Entra. |
REDIRECT_URI |
Identyfikator URI, w którym platforma tożsamości firmy Microsoft wysyła tokeny zabezpieczające po uwierzytelnieniu. |
Aktualizowanie pliku konfiguracji
Utwórz plik env w folderze głównym, aby bezpiecznie przechowywać konfigurację aplikacji. Plik .env powinien zawierać następujące zmienne środowiskowe:
CLIENT_ID="<Enter_your_client_id>" CLIENT_SECRET="<Enter_your_client_secret>" AUTHORITY="https://login.microsoftonline.com/<Enter_tenant_id>" REDIRECT_URI="<Enter_redirect_uri>"Zastąp symbole zastępcze następującymi wartościami:
- Zastąp
<Enter_your_client_id>identyfikatorem aplikacji (klienta) zarejestrowanej aplikacji internetowej klienta. - Zastąp
<Enter_tenant_id>identyfikatorem katalogu (dzierżawcy) , gdzie zarejestrowałeś swoją aplikację internetową. - Zastąp
<Enter_your_client_secret>wartością tajnego klucza klienta dla aplikacji internetowej, którą utworzyłeś. W tym samouczku używamy tajemnic do celów demonstracyjnych. W środowisku produkcyjnym należy użyć bezpieczniejszych metod, takich jak certyfikaty lub poświadczenia tożsamości federacyjnej. - Zastąp
<Enter_redirect_uri>identyfikatorem URI przekierowania, który został wcześniej zarejestrowany. Samouczek ten ustawia ścieżkę identyfikatora URI przekierowania nahttp://localhost:3000/getAToken.
- Zastąp
Utwórz plik app_config.py, aby odczytać zmienne środowiskowe i dodać inne potrzebne konfiguracje.
import os AUTHORITY = os.getenv("AUTHORITY") CLIENT_ID = os.getenv("CLIENT_ID") CLIENT_SECRET = os.getenv("CLIENT_SECRET") REDIRECT_URI = os.getenv("REDIRECT_URI") SESSION_TYPE = "filesystem" # Tells the Flask-session extension to store sessions in the filesystem. Don't use in production apps.
Konfigurowanie punktów końcowych aplikacji
Na tym etapie utworzysz punkty końcowe aplikacji internetowej i dodasz logikę biznesową do aplikacji.
Utwórz plik o nazwie app.py w folderze głównym.
Zaimportuj wymagane zależności w górnej części pliku app.py.
import os import requests from flask import Flask, render_template from identity.flask import Auth import app_configZainicjuj aplikację Flask i skonfiguruj ją tak, aby korzystała z typu przechowywania sesji określonego w pliku app_config.py.
app = Flask(__name__) app.config.from_object(app_config)Zainicjuj klienta aplikacji. Aplikacja internetowa platformy Flask jest poufnym klientem. Przekazujemy tajny klucz klienta, ponieważ poufni klienci mogą bezpiecznie go przechowywać. Pod maską biblioteka tożsamości wywołuje klasę
ConfidentialClientApplicationbiblioteki MSAL.auth = Auth( app, authority=app.config["AUTHORITY"], client_id=app.config["CLIENT_ID"], client_credential=app.config["CLIENT_SECRET"], redirect_uri=app.config["REDIRECT_URI"] )Dodaj wymagane endpointy do aplikacji Flask. Aplikacja internetowa używa przepływu kodu autoryzacji do logowania użytkownika. Biblioteka nakładki ms_identity_python ułatwia interakcję z biblioteką MSAL, co ułatwia dodawanie logowania i wylogowywania w aplikacji. Dodajemy stronę indeksu i chronimy ją przy użyciu dekoratora
login_requireddostarczonego przez bibliotekę ms_identity_python. Dekoratorlogin_requiredgwarantuje, że tylko uwierzytelnieni użytkownicy będą mogli uzyskać dostęp do strony indeksu.@app.route("/") @auth.login_required def index(*, context): return render_template( 'index.html', user=context['user'], title="Flask Web App Sample", )Obecność użytkownika jest zagwarantowana, ponieważ oznaczyliśmy ten widok za pomocą
@login_required.
Tworzenie szablonów aplikacji
Utwórz folder o nazwie templates w folderze głównym. W folderze templates utwórz plik o nazwie index.html. Jest to strona główna aplikacji. Dodaj następujący kod do pliku index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<h2>Welcome {{ user.get("name") }}!</h2>
<img src="https://github.com/Azure-Samples/ms-identity-python-webapp-django/raw/main/static/topology.png" alt="Topology">
<ul>
{% if api_endpoint %}
<!-- If an API endpoint is declared and scopes defined, this link will show. We set this in the call an API tutorial. For this tutorial, we do not define this endpoint. -->
<li><a href='/call_api'>Call an API</a></li>
{% endif %}
<li><a href="{{ url_for('identity.logout') }}">Logout</a></li>
</ul>
<hr>
<footer style="text-align: right">{{ title }}</footer>
</body>
</html>
Uruchamianie i testowanie przykładowej aplikacji internetowej
W terminalu uruchom następujące polecenie:
python3 -m flask run --debug --host=localhost --port=3000Możesz użyć wybranego portu. Ten port powinien być podobny do portu URI przekierowania zarejestrowanego wcześniej.
Otwórz przeglądarkę, a następnie przejdź do
http://localhost:3000. Zostanie wyświetlona strona logowania.Zaloguj się przy użyciu konta Microsoft, wykonując kroki. Użytkownik jest proszony o podanie adresu e-mail i hasła w celu zalogowania się.
Jeśli aplikacja potrzebuje jakichkolwiek zakresów, zostanie wyświetlony ekran zgody. Aplikacja żąda uprawnień do utrzymania dostępu do danych, do których zezwolisz na dostęp i do logowania. Wybierz pozycję Zaakceptuj. Ten ekran nie jest wyświetlany, jeśli nie zdefiniowano żadnych zakresów.
Po zalogowaniu się lub utworzeniu konta nastąpi przekierowanie z powrotem do aplikacji internetowej. Zostanie wyświetlona strona podobna do poniższego zrzutu ekranu:
Wybierz pozycję Wyloguj, aby wylogować się z aplikacji. Zostanie wyświetlony monit o wybranie konta do wylogowania. Wybierz konto użyte do zalogowania się.
Użyj niestandardowej domeny adresu URL (opcjonalnie)
Najemcy zasobów pracowniczych nie obsługują niestandardowych domen URL.