Självstudie: Anropa ett skyddat API och visa resultatet
I den föregående självstudien lade du till inloggnings- och utloggningsfunktionerna i programmet. Nu kan du bygga vidare på dessa funktioner för att tillåta att inloggade användare anropar ett skyddat webb-API. I den här självstudien anropar du Microsoft Graph API och visar profilinformation för den inloggade användaren.
I den här självstudien:
- Lägga till kod för att anropa ett skyddat underordnat API
- Köra och testa programmet
Anropa API:et och visa resultatet
Om du vill anropa ett skyddat API bör du först hämta en åtkomsttoken för den aktuella användaren genom att anropa auth.get_token_for_user
på följande sätt:
@app.route("/call_downstream_api")
def call_downstream_api():
token = auth.get_token_for_user(app_config.SCOPE)
if "error" in token:
return redirect(url_for("login"))
# Use access token to call downstream api
api_result = requests.get(
app_config.ENDPOINT,
headers={'Authorization': 'Bearer ' + token['access_token']},
timeout=30,
).json()
return render_template('display.html', result=api_result)
När en användare navigerar till /call_downstream_api
URL-vägen anropar Flask funktionen call_downstream_api()
som först försöker hämta en åtkomsttoken med hjälp av auth.get_token_for_user(app_config.SCOPE)
. Om det finns ett autentiseringsproblem eller ett fel i token omdirigerar du användaren till inloggningssidan för omautentisering.
Om appen hämtar en åtkomsttoken gör den en HTTP-begäran till det underordnade API:et requests.get(...)
med hjälp av metoden. I begäran anges vår underordnade API-URL i app_config.ENDPOINT
. Du skickar även åtkomsttoken i fältet i Authorization
begärandehuvudet.
En lyckad begäran till det underordnade API:et (Microsoft Graph API) returnerar ett JSON-svar som lagras i en api_result
variabel och skickas till mallen display.html
för återgivning.
Lägga till kod för att köra appen
Om du vill köra din app lägger du till följande kodfragment i slutet av din app.py-fil .
if __name__ == "__main__":
app.run()
Testa appen
Följ de här stegen för att testa inloggningen, anropa API och logga ut i webbappen:
Om du inte redan har gjort det ersätter du platshållarvärdena i .env.sample-filen med din Registreringsinformation för Microsoft Entra-appen (klient-ID, klienthemlighet och utfärdar-URL)
Skapa en virtuell miljö för appen:
py -m venv .venv .venv\scripts\activate
Installera kraven med hjälp av
pip
:pip install -r requirements.txt
Kör appen från kommandoraden. Kontrollera att appen körs på samma port som den omdirigerings-URI som du konfigurerade tidigare.
flask run --host=localhost --port=5000
Kopiera https-URL:en som visas i terminalen, https://localhost:5000till exempel , och klistra in den i en webbläsare. Vi rekommenderar att du använder en privat eller inkognito-webbläsarsession.
När inloggningsfönstret visas anger du det konto som du vill logga in med och väljer Nästa:
Webbläsaren omdirigerar dig för att ange ett lösenord för ditt konto. Ange lösenordet och välj Logga in.
I det här läget kan inloggningsflödet variera beroende på vilken säkerhetsinformation din organisation kräver, till exempel multifaktorautentisering med hjälp av en autentiseringsapp.
För Håll dig inloggad kan du välja Antingen Nej eller Ja.
Programmet begär behörighet att behålla åtkomsten till data som du har gett den åtkomst till, logga in dig och läsa din profil. Välj Godkänn för att godkänna dessa behörigheter.
Följande skärmbild visas som anger att du är inloggad i programmet:
Om du vill anropa ett skyddat API och visa resultatet väljer du Anropa ett underordnat API. Ett lyckat anrop till Microsoft Graph API returnerar information om den inloggade användaren enligt följande:
Logga ut från appen
- Välj Logga ut för att logga ut från appen.
- Du uppmanas att välja ett konto att logga ut från. Välj det konto som du använde för att logga in.
- Ett meddelande visas som anger att du har loggat ut. Nu kan du stänga webbläsarfönstret.
Se även
Appen som du skapade använder identitetsbiblioteket, som sammanfattar mest information om Microsoft Authentication Library (MSAL) för Python. Mer information om hur du använder MSAL Python för olika scenarier finns i MSAL Python-dokumentationen.