Samouczek: logowanie użytkowników do aplikacji internetowej platformy Python Flask przy użyciu platformy tożsamości firmy Microsoft
Dotyczy: Najemcy Workforce
Najemcy zewnętrzni (dowiedzieć się więcej)
Ten samouczek przeprowadzi Cię przez proces zabezpieczania aplikacji internetowej platformy Python Flask.
W tym samouczku:
- 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
- Upewnij się, że masz rejestrację aplikacji w swoim dzierżawcy. Upewnij się, że masz następujące informacje na temat szczegółów rejestracji aplikacji:
- Identyfikator aplikacji (klienta) zarejestrowanej przez Ciebie aplikacji internetowej klienta.
- Identyfikator katalogu (najemcy), w którym zarejestrowano aplikację internetową.
- Wartość sekretu klienta dla utworzonej aplikacji internetowej.
- python 3+.
- programu 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-app
Konfigurowanie ś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\activate
W 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
Dodawanie 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_config
Zainicjuj 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ę
ConfidentialClientApplication
biblioteki 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_required
dostarczonego przez bibliotekę ms_identity_python. Dekoratorlogin_required
gwarantuje, ż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=3000
Moż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.