Udostępnij za pośrednictwem


Samouczek: wywoływanie interfejsu API programu Microsoft Graph z poziomu aplikacji internetowej platformy Python Flask

Dotyczy: Zielony okrąg z białym znakiem wyboru. Dzierżawcy usługi Workforce Zielony okrąg z białym znakiem wyboru. Dzierżawcy zewnętrzni (więcej na ten temat)

W tym samouczku wywołasz interfejs API programu Microsoft Graph z poziomu aplikacji internetowej platformy Python Flask. W poprzednim samouczku dodałeś funkcje logowania i wylogowania do aplikacji. Po zalogowaniu się użytkownik uzyskuje token dostępu w celu wywołania interfejsu API programu Microsoft Graph.

W tym samouczku wykonasz następujące elementy:

  • Aktualizowanie istniejącej aplikacji internetowej platformy Python Flask w celu uzyskania tokenu dostępu
  • Użyj tokenu dostępu, aby wywołać interfejs API programu Microsoft Graph.

Warunki wstępne

Wykonaj kroki opisane w Samouczek: dodawanie logowania do aplikacji internetowej platformy Python Flask przy użyciu platformy tożsamości firmy Microsoft.

Definiowanie zakresów i punktu końcowego interfejsu API

W tym przykładzie wywołamy interfejs API programu Microsoft Graph, aby uzyskać informacje o profilu zalogowanego użytkownika. Jeśli Twoja aplikacja znajduje się w dzierżawie związanej z zatrudnieniem, podczas logowania użytkownik wyraża zgodę na zakresy uprawnień wymagane przez aplikację w celu uzyskania dostępu do interfejsu API programu Microsoft Graph. Jeśli aplikacja znajduje się w dzierżawie zewnętrznej, upewnij się, że udzielasz zgody administratora w imieniu użytkowników w swojej dzierżawie. Następnie aplikacja używa tokenu dostępu do wywoływania interfejsu API i wyświetlania wyników.

W pliku .env dodaj wywoływany punkt końcowy i zakresy wymagane do wywołania interfejsu API programu Microsoft Graph:

SCOPE=User.Read
ENDPOINT=https://graph.microsoft.com/v1.0/me

Przeczytaj nowe konfiguracje w aplikacji, aktualizując plik app_config.py.

# other configs go here
SCOPE = os.getenv("SCOPE")
ENDPOINT = os.getenv("ENDPOINT")

Wywoływanie chronionego interfejsu API

  1. Przekaż punkt końcowy interfejsu API do strony głównej. To pozwala na wywołanie punktu końcowego. Zaktualizuj trasę /, aby wyglądała tak, jak pokazano w poniższym fragmencie kodu:

    @app.route("/")
    @auth.login_required
    def index(*, context):
        return render_template(
            'index.html',
            user=context['user'],
            title="Flask Web App Sample",
            api_endpoint=os.getenv("ENDPOINT") # added this line
        )
    
  2. Wywołaj chroniony interfejs API programu Microsoft Graph, jak pokazano w poniższym fragmencie kodu. Przekazujemy listę zakresów, których aplikacja musi używać. Jeśli zakresy są obecne, kontekst zawiera token dostępu. Token dostępu jest używany do wywoływania podrzędnego interfejsu API. Dodaj ten kod do pliku app.py:

    @app.route("/call_api")
    @auth.login_required(scopes=os.getenv("SCOPE", "").split())
    def call_downstream_api(*, context):
        api_result = requests.get(  # Use access token to call a web api
            os.getenv("ENDPOINT"),
            headers={'Authorization': 'Bearer ' + context['access_token']},
            timeout=30,
        ).json() if context.get('access_token') else "Did you forget to set the SCOPE environment variable?"
        return render_template('display.html', title="API Response", result=api_result)
    

    Jeśli aplikacja pomyślnie uzyskuje token dostępu, wysyła żądanie HTTP do podrzędnego interfejsu API przy użyciu metody requests.get(...). W żądaniu nasz adres URL interfejsu API podrzędnego jest określony w app_config.ENDPOINT, a token dostępu przekazany w polu Authorization nagłówka żądania.

    Poprawne żądanie do interfejsu API programu Microsoft Graph zwraca odpowiedź w formacie JSON, która jest przechowywana w zmiennej api_result i przekazywana do szablonu display.html w celu renderowania.

Wyświetlanie wyników interfejsu API

Utwórz plik o nazwie display.html w folderze szablonów. Na tej stronie zostanie wyświetlony wynik wywołania punktu końcowego programu Microsoft Graph. Dodaj następujący kod do pliku display.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Microsoft Identity Python Web App: API</title>
</head>
<body>
    <a href="javascript:window.history.go(-1)">Back</a> <!-- Displayed on top of a potentially large JSON response, so it will remain visible -->
    <h1>{{title}}</h1>
    <pre>{{ result |tojson(indent=4) }}</pre> <!-- Just a generic json viewer -->
</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, który zarejestrowałeś 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.

Wywoływanie interfejsu API

  1. Wybierz link Wywołaj API na stronie głównej. Aplikacja wywołuje interfejs API programu Microsoft Graph, aby uzyskać informacje o profilu zalogowanego użytkownika. Aplikacja wyświetla wynik wywołania interfejsu API.

  2. Wybierz opcję Wyloguj, aby wylogować się z aplikacji. Zostanie wyświetlony monit o wybranie konta do wylogowania. Wybierz konto użyte do zalogowania się.

Materiał referencyjny

ms_identity_python abstrakuje szczegóły biblioteki MSAL. Aby uzyskać więcej informacji, zobacz dokumentację MSAL dla Pythona. Ten materiał referencyjny ułatwia zrozumienie sposobu inicjowania aplikacji i uzyskiwania tokenów przy użyciu biblioteki MSAL Python.