Udostępnij za pośrednictwem


Samouczek: logowanie użytkowników do aplikacji internetowej platformy Python Flask przy użyciu platformy tożsamości firmy Microsoft

Dotyczy: Zielony okrąg z białym symbolem znacznika wyboru. Najemcy Workforce Zielony okrąg z białym symbolem znacznika wyboru. 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

  1. Utwórz folder do hostowania aplikacji Platformy Flask, na przykład flask-web-app.

  2. Otwórz okno konsoli i przejdź do katalogu swojej aplikacji webowej Flask przy użyciu polecenia.

    cd flask-web-app
    
  3. 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

  1. 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 na http://localhost:3000/getAToken.
  2. 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.

  1. Utwórz plik o nazwie app.py w folderze głównym.

  2. 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
    
  3. 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)
    
  4. 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"]
    )
    
  5. 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. Dekorator login_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

  1. 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.

  2. Otwórz przeglądarkę, a następnie przejdź do http://localhost:3000. Zostanie wyświetlona strona logowania.

  3. 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ę.

  4. 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:

Zrzut ekranu przedstawiający przykładową aplikację internetową platformy Flask po pomyślnym uwierzytelnieniu.

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.