Erstellen von Python-Apps mit Microsoft Graph und nur app-Authentifizierung
In diesem Tutorial erfahren Sie, wie Sie eine Python-Konsolen-App erstellen, die die Microsoft Graph-API verwendet, um mithilfe der reinen App-Authentifizierung auf Daten zuzugreifen. Die reine App-Authentifizierung ist eine gute Wahl für Hintergrunddienste oder Anwendungen, die auf Daten für alle Benutzer in einer Organisation zugreifen müssen.
Hinweis
Informationen zur Verwendung von Microsoft Graph zum Zugreifen auf Daten im Namen eines Benutzers finden Sie in diesem Tutorial zur (delegierten) Benutzerauthentifizierung.
In diesem Lernprogramm wird Folgendes vermittelt:
Tipp
Alternativ zur Durchführung dieses Tutorials können Sie das GitHub-Repository herunterladen oder klonen und den Anweisungen in der INFODATEI folgen, um eine Anwendung zu registrieren und das Projekt zu konfigurieren.
Voraussetzungen
Bevor Sie mit diesem Tutorial beginnen, sollten Python und pip auf Ihrem Entwicklungscomputer installiert sein.
Sie sollten auch über ein Microsoft-Geschäfts-, Schul- oder Unikonto mit der Rolle "Globaler Administrator" verfügen. Wenn Sie nicht über einen Microsoft 365-Mandanten verfügen, können Sie sich über das Microsoft 365-Entwicklerprogramm für einen mandantenfähigen Mandanten qualifizieren. Weitere Informationen finden Sie in den häufig gestellten Fragen. Alternativ können Sie sich für eine kostenlose 1-monatige Testversion registrieren oder einen Microsoft 365-Plan erwerben.
Hinweis
Dieses Tutorial wurde mit Python-Version 3.10.4 und pip-Version 20.0.2 geschrieben. Die Schritte in diesem Leitfaden funktionieren möglicherweise mit anderen Versionen, die jedoch nicht getestet wurden.
Registrieren der App im Portal
In dieser Übung registrieren Sie eine neue Anwendung in Azure Active Directory, um die reine App-Authentifizierung zu aktivieren. Sie können eine Anwendung über das Microsoft Entra Admin Center oder mithilfe des Microsoft Graph PowerShell SDK registrieren.
Registrieren der Anwendung für die reine App-Authentifizierung
In diesem Abschnitt registrieren Sie eine Anwendung, die die reine App-Authentifizierung mit Clientanmeldeinformationen unterstützt.
Öffnen Sie einen Browser, navigieren Sie zum Microsoft Entra Admin Center , und melden Sie sich mit einem globalen Administratorkonto an.
Wählen Sie im linken Navigationsbereich Microsoft Entra ID aus, erweitern Sie Identität, erweitern Sie Anwendungen, und wählen Sie dann App-Registrierungen aus.
Wählen Sie Neue Registrierung aus. Geben Sie einen Namen für Ihre Anwendung ein,
Graph App-Only Auth Tutorial
z. B. .Legen Sie Unterstützte Kontotypen auf Nur Konten in diesem Organisationsverzeichnis fest.
Lassen Sie URI umleiten leer.
Wählen Sie Registrieren aus. Kopieren Sie auf der Seite Übersicht der Anwendung den Wert der Anwendungs-ID (Client) und der Verzeichnis-ID (Mandanten-ID), und speichern Sie sie. Diese Werte benötigen Sie im nächsten Schritt.
Wählen Sie API-Berechtigungen unter Verwalten aus.
Entfernen Sie die Standardberechtigung User.Read unter Konfigurierte Berechtigungen , indem Sie die Auslassungspunkte (...) in der Zeile auswählen und Berechtigung entfernen auswählen.
Wählen Sie Berechtigung hinzufügen und dann Microsoft Graph aus.
Wählen Sie Anwendungsberechtigungen aus.
Wählen Sie User.Read.All und dann Berechtigungen hinzufügen aus.
Wählen Sie Administratoreinwilligung erteilen für... und dann Ja aus, um die Administratoreinwilligung für die ausgewählte Berechtigung bereitzustellen.
Wählen Sie zertifikate und geheimnisse unter Verwalten und dann Neuer geheimer Clientschlüssel aus.
Geben Sie eine Beschreibung ein, wählen Sie eine Dauer aus, und wählen Sie Hinzufügen aus.
Kopieren Sie das Geheimnis aus der Spalte Wert . Sie benötigen es in den nächsten Schritten.
Wichtig
Dieser geheime Clientschlüssel wird nicht noch einmal angezeigt, stellen Sie daher sicher, dass Sie ihn jetzt kopieren.
Hinweis
Beachten Sie, dass Sie im Gegensatz zu den Schritten bei der Registrierung für die Benutzerauthentifizierung in diesem Abschnitt Microsoft Graph-Berechtigungen für die App-Registrierung konfiguriert haben. Dies liegt daran, dass die reine App-Authentifizierung den Clientanmeldeinformationsflow verwendet, der erfordert, dass Berechtigungen für die App-Registrierung konfiguriert werden. Ausführliche Informationen finden Sie unter .default-Bereich .
Erstellen einer Python-Konsolen-App
Erstellen Sie zunächst eine neue Python-Datei.
Erstellen Sie eine neue Datei mit dem Namen main.py , und fügen Sie den folgenden Code hinzu.
print ('Hello world!')
Speichern Sie die Datei, und verwenden Sie den folgenden Befehl, um die Datei auszuführen.
python3 main.py
Wenn es funktioniert, sollte die App ausgeben
Hello world!
.
Installieren von Abhängigkeiten
Bevor Sie mit dem Vorgang fortfahren, fügen Sie einige zusätzliche Abhängigkeiten hinzu, die Sie später verwenden werden.
- Azure Identity-Clientbibliothek für Python zum Authentifizieren des Benutzers und Abrufen von Zugriffstoken.
- Microsoft Graph SDK für Python (Vorschau), um Aufrufe an Microsoft Graph zu senden.
Führen Sie die folgenden Befehle in Ihrer CLI aus, um die Abhängigkeiten zu installieren.
python3 -m pip install azure-identity
python3 -m pip install msgraph-sdk
Laden von Anwendungseinstellungen
In diesem Abschnitt fügen Sie dem Projekt die Details Ihrer App-Registrierung hinzu.
Erstellen Sie eine Datei im selben Verzeichnis wie main.py namens config.cfg , und fügen Sie den folgenden Code hinzu.
[azure] clientId = YOUR_CLIENT_ID_HERE clientSecret = YOUR_CLIENT_SECRET_HERE tenantId = YOUR_TENANT_ID_HERE
Aktualisieren Sie die Werte gemäß der folgenden Tabelle.
Einstellung Wert clientId
Die Client-ID Ihrer App-Registrierung clientSecret
Der geheime Clientschlüssel Ihrer App-Registrierung tenantId
Die Mandanten-ID Ihrer Organisation Tipp
Optional können Sie diese Werte in einer separaten Datei namens config.dev.cfg festlegen.
Entwerfen der App
In diesem Abschnitt erstellen Sie ein einfaches konsolenbasiertes Menü.
Erstellen Sie eine neue Datei mit dem Namen graph.py , und fügen Sie der Datei den folgenden Code hinzu.
# Temporary placeholder class Graph: def __init__(self, config): self.settings = config
Dieser Code ist ein Platzhalter. Sie implementieren die
Graph
-Klasse im nächsten Abschnitt.Öffnen Sie main.py , und ersetzen Sie den gesamten Inhalt durch den folgenden Code.
import asyncio import configparser from msgraph.generated.models.o_data_errors.o_data_error import ODataError from graph import Graph async def main(): print('Python Graph App-Only Tutorial\n') # Load settings config = configparser.ConfigParser() config.read(['config.cfg', 'config.dev.cfg']) azure_settings = config['azure'] graph: Graph = Graph(azure_settings) choice = -1 while choice != 0: print('Please choose one of the following options:') print('0. Exit') print('1. Display access token') print('2. List users') print('3. Make a Graph call') try: choice = int(input()) except ValueError: choice = -1 try: if choice == 0: print('Goodbye...') elif choice == 1: await display_access_token(graph) elif choice == 2: await list_users(graph) elif choice == 3: await make_graph_call(graph) else: print('Invalid choice!\n') except ODataError as odata_error: print('Error:') if odata_error.error: print(odata_error.error.code, odata_error.error.message)
Fügen Sie am Ende der Datei die folgenden Platzhaltermethoden hinzu. Sie implementieren sie in späteren Schritten.
async def display_access_token(graph: Graph): # TODO return async def list_users(graph: Graph): # TODO return async def make_graph_call(graph: Graph): # TODO return
Fügen Sie die folgende Zeile hinzu, um am Ende der Datei aufzurufen
main
.# Run main asyncio.run(main())
Dadurch wird ein einfaches Menü implementiert und die Auswahl des Benutzers aus der Befehlszeile gelesen.
Hinzufügen einer reinen App-Authentifizierung
In diesem Abschnitt fügen Sie der Anwendung die reine App-Authentifizierung hinzu. Dies ist erforderlich, um das erforderliche OAuth-Zugriffstoken zum Aufrufen von Microsoft Graph abzurufen. In diesem Schritt integrieren Sie die Azure Identity-Clientbibliothek für Python in die Anwendung und konfigurieren die Authentifizierung für das Microsoft Graph SDK für Python (Vorschau).
Die Azure Identity-Bibliothek bietet eine Reihe von TokenCredential
Klassen, die OAuth2-Tokenflows implementieren. Das Microsoft Graph SDK verwendet diese Klassen, um Aufrufe von Microsoft Graph zu authentifizieren.
Konfigurieren des Graph-Clients für die reine App-Authentifizierung
In diesem Abschnitt verwenden Sie die ClientSecretCredential
-Klasse, um mithilfe des Clientanmeldeinformationsflows ein Zugriffstoken anzufordern.
Öffnen Sie graph.py , und ersetzen Sie den gesamten Inhalt durch den folgenden Code.
from configparser import SectionProxy from azure.identity.aio import ClientSecretCredential from msgraph import GraphServiceClient from msgraph.generated.users.users_request_builder import UsersRequestBuilder class Graph: settings: SectionProxy client_credential: ClientSecretCredential app_client: GraphServiceClient def __init__(self, config: SectionProxy): self.settings = config client_id = self.settings['clientId'] tenant_id = self.settings['tenantId'] client_secret = self.settings['clientSecret'] self.client_credential = ClientSecretCredential(tenant_id, client_id, client_secret) self.app_client = GraphServiceClient(self.client_credential) # type: ignore
Dieser Code deklariert zwei private Eigenschaften, ein
ClientSecretCredential
-Objekt und einGraphServiceClient
-Objekt. Die__init__
-Funktion erstellt eine neue Instanz vonClientSecretCredential
und verwendet diese Instanz dann, um eine neue Instanz vonGraphServiceClient
zu erstellen. Jedes Mal, wenn ein API-Aufruf an Microsoft Graph überapp_client
erfolgt, werden die bereitgestellten Anmeldeinformationen verwendet, um ein Zugriffstoken abzurufen.Fügen Sie graph.py die folgende Funktion hinzu.
async def get_app_only_token(self): graph_scope = 'https://graph.microsoft.com/.default' access_token = await self.client_credential.get_token(graph_scope) return access_token.token
Ersetzen Sie die leere
display_access_token
Funktion in main.py durch Folgendes.async def display_access_token(graph: Graph): token = await graph.get_app_only_token() print('App-only token:', token, '\n')
Erstellen Sie die App, und führen Sie sie aus. Geben Sie ein
1
, wenn Sie zur Eingabe einer Option aufgefordert werden. Die Anwendung zeigt ein Zugriffstoken an.Python Graph App-Only Tutorial Please choose one of the following options: 0. Exit 1. Display access token 2. List users 3. Make a Graph call 1 App-only token: eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVDTzRYOWtKYlNLVjVkRzJGenJqd2xvVUcwWS...
Tipp
Nur zu Validierungs- und Debugzwecken können Sie Nur-App-Zugriffstoken mithilfe des Onlinetokenparsers von Microsoft unter https://jwt.msdecodieren. Dies kann nützlich sein, wenn beim Aufrufen von Microsoft Graph Tokenfehler auftreten. Beispielsweise wird überprüft, ob der
role
Anspruch im Token die erwarteten Microsoft Graph-Berechtigungsbereiche enthält.
Benutzer auflisten
In diesem Abschnitt fügen Sie die Möglichkeit hinzu, alle Benutzer in Ihrer Azure Active Directory-Instanz mithilfe der reinen App-Authentifizierung aufzulisten.
Fügen Sie graph.py die folgende Funktion hinzu.
async def get_users(self): query_params = UsersRequestBuilder.UsersRequestBuilderGetQueryParameters( # Only request specific properties select = ['displayName', 'id', 'mail'], # Get at most 25 results top = 25, # Sort by display name orderby= ['displayName'] ) request_config = UsersRequestBuilder.UsersRequestBuilderGetRequestConfiguration( query_parameters=query_params ) users = await self.app_client.users.get(request_configuration=request_config) return users
Ersetzen Sie die leere
list_users
Funktion in main.py durch Folgendes.async def list_users(graph: Graph): users_page = await graph.get_users() # Output each users's details if users_page and users_page.value: for user in users_page.value: print('User:', user.display_name) print(' ID:', user.id) print(' Email:', user.mail) # If @odata.nextLink is present more_available = users_page.odata_next_link is not None print('\nMore users available?', more_available, '\n')
Führen Sie die App aus, und wählen Sie Option 2 aus, um Benutzer aufzulisten.
Please choose one of the following options: 0. Exit 1. Display access token 2. List users 3. Make a Graph call 2 User: Adele Vance ID: 05fb57bf-2653-4396-846d-2f210a91d9cf Email: AdeleV@contoso.com User: Alex Wilber ID: a36fe267-a437-4d24-b39e-7344774d606c Email: AlexW@contoso.com User: Allan Deyoung ID: 54cebbaa-2c56-47ec-b878-c8ff309746b0 Email: AllanD@contoso.com User: Bianca Pisani ID: 9a7dcbd0-72f0-48a9-a9fa-03cd46641d49 Email: None User: Brian Johnson (TAILSPIN) ID: a8989e40-be57-4c2e-bf0b-7cdc471e9cc4 Email: BrianJ@contoso.com ... More users available? True
Code erläutert
Betrachten Sie den Code in der get_users
Funktion.
- Es ruft eine Sammlung von Benutzern ab.
- Wird verwendet
$select
, um bestimmte Eigenschaften anzufordern. - Wird verwendet
$top
, um die Anzahl der zurückgegebenen Benutzer zu begrenzen. -
$orderBy
Verwendet, um die Antwort zu sortieren.
Optional: Fügen Sie Ihren eigenen Code hinzu.
In diesem Abschnitt fügen Sie der Anwendung Ihre eigenen Microsoft Graph-Funktionen hinzu. Dies kann ein Codeausschnitt aus der Microsoft Graph-Dokumentation oder graph-Explorer oder code sein, den Sie erstellt haben. Dieser Abschnitt ist optional.
Aktualisieren der App
Fügen Sie graph.py die folgende Funktion hinzu.
async def make_graph_call(self): # INSERT YOUR CODE HERE return
Ersetzen Sie die leere
list_inbox
Funktion in main.py durch Folgendes.async def make_graph_call(graph: Graph): await graph.make_graph_call()
Auswählen einer API
Suchen Sie eine API in Microsoft Graph, die Sie ausprobieren möchten. Beispiel: Die Api zum Erstellen eines Ereignisses . Sie können eines der Beispiele in der API-Dokumentation verwenden oder Eine eigene API-Anforderung erstellen.
Konfigurieren von Berechtigungen
Überprüfen Sie den Abschnitt Berechtigungen der Referenzdokumentation für Die ausgewählte API, um zu sehen, welche Authentifizierungsmethoden unterstützt werden. Einige APIs unterstützen z. B. keine reinen Apps oder persönlichen Microsoft-Konten.
- Informationen zum Aufrufen einer API mit Benutzerauthentifizierung (wenn die API die (delegierte) Benutzerauthentifizierung unterstützt), finden Sie im Tutorial zur benutzerseitig (delegierten) Authentifizierung .
- Um eine API mit nur app-Authentifizierung aufzurufen (sofern die API dies unterstützt), fügen Sie den erforderlichen Berechtigungsbereich im Azure AD Admin Center hinzu.
Fügen Sie Ihren Code hinzu
Kopieren Sie Ihren Code in die make_graph_call
Funktion in graph.py.
Herzlichen Glückwunsch!
Sie haben das Microsoft Graph-Tutorial für Python abgeschlossen. Nachdem Sie nun über eine funktionierende App verfügen, die Microsoft Graph aufruft, können Sie experimentieren und neue Features hinzufügen.
- Erfahren Sie, wie Sie die (delegierte) Benutzerauthentifizierung mit dem Microsoft Graph Python SDK verwenden.
- Besuchen Sie die Übersicht über Microsoft Graph , um alle Daten anzuzeigen, auf die Sie mit Microsoft Graph zugreifen können.
Python-Beispiele
Liegt ein Problem mit diesem Abschnitt vor? Wenn ja, senden Sie uns Feedback, damit wir den Abschnitt verbessern können.