Freigeben über


Hinzufügen der Benutzerauthentifizierung zu Python-Apps für Microsoft Graph

In diesem Artikel fügen Sie der Anwendung, die Sie unter Erstellen von Python-Apps mit Microsoft Graph erstellt haben, die Benutzerauthentifizierung hinzu. Anschließend verwenden Sie die Microsoft Graph-Benutzer-API, um den authentifizierten Benutzer abzurufen.

Hinzufügen der Benutzerauthentifizierung

Die Azure Identity-Clientbibliothek für Python bietet viele TokenCredential Klassen, die OAuth2-Tokenflows implementieren. Das Microsoft Graph SDK für Python (Vorschau) verwendet diese Klassen, um Aufrufe von Microsoft Graph zu authentifizieren.

Konfigurieren des Graph-Clients für die Benutzerauthentifizierung

Verwenden Sie zunächst die DeviceCodeCredential -Klasse, um mithilfe des Gerätecodeflows ein Zugriffstoken anzufordern.

  1. Öffnen Sie graph.py , und ersetzen Sie den gesamten Inhalt durch den folgenden Code.

    from configparser import SectionProxy
    from azure.identity import DeviceCodeCredential
    from msgraph import GraphServiceClient
    from msgraph.generated.users.item.user_item_request_builder import UserItemRequestBuilder
    from msgraph.generated.users.item.mail_folders.item.messages.messages_request_builder import (
        MessagesRequestBuilder)
    from msgraph.generated.users.item.send_mail.send_mail_post_request_body import (
        SendMailPostRequestBody)
    from msgraph.generated.models.message import Message
    from msgraph.generated.models.item_body import ItemBody
    from msgraph.generated.models.body_type import BodyType
    from msgraph.generated.models.recipient import Recipient
    from msgraph.generated.models.email_address import EmailAddress
    
    class Graph:
        settings: SectionProxy
        device_code_credential: DeviceCodeCredential
        user_client: GraphServiceClient
    
        def __init__(self, config: SectionProxy):
            self.settings = config
            client_id = self.settings['clientId']
            tenant_id = self.settings['tenantId']
            graph_scopes = self.settings['graphUserScopes'].split(' ')
    
            self.device_code_credential = DeviceCodeCredential(client_id, tenant_id = tenant_id)
            self.user_client = GraphServiceClient(self.device_code_credential, graph_scopes)
    

    Dieser Code deklariert zwei private Eigenschaften, ein DeviceCodeCredential -Objekt und ein GraphServiceClient -Objekt. Die __init__ Funktion erstellt eine neue instance von DeviceCodeCredentialund verwendet dann diesen instance, um eine neue instance von GraphServiceClientzu erstellen. Jedes Mal, wenn ein API-Aufruf an Microsoft Graph über user_clienterfolgt, werden die bereitgestellten Anmeldeinformationen verwendet, um ein Zugriffstoken abzurufen.

  2. Fügen Sie graph.py die folgende Funktion hinzu.

    async def get_user_token(self):
        graph_scopes = self.settings['graphUserScopes']
        access_token = self.device_code_credential.get_token(graph_scopes)
        return access_token.token
    
  3. Ersetzen Sie die leere display_access_token Funktion in Standard.py durch Folgendes.

    async def display_access_token(graph: Graph):
        token = await graph.get_user_token()
        print('User token:', token, '\n')
    
  4. 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 eine URL und den Gerätecode an.

    Python Graph Tutorial
    
    Please choose one of the following options:
    0. Exit
    1. Display access token
    2. List my inbox
    3. Send mail
    4. Make a Graph call
    1
    To sign in, use a web browser to open the page https://microsoft.com/devicelogin and
    enter the code RB2RUD56D to authenticate.
    
  5. Öffnen Sie einen Browser, und navigieren Sie zu der angezeigten URL. Geben Sie den angegebenen Code ein, und melden Sie sich an.

    Wichtig

    Achten Sie auf vorhandene Microsoft 365-Konten, die bei Ihrem Browser angemeldet sind, wenn Sie zu https://microsoft.com/deviceloginnavigieren. Verwenden Sie Browserfeatures wie Profile, Gastmodus oder privaten Modus, um sicherzustellen, dass Sie sich als das Konto authentifizieren, das Sie zu Testzwecken verwenden möchten.

  6. Kehren Sie nach Abschluss des Vorgangs zur Anwendung zurück, um das Zugriffstoken anzuzeigen.

    Tipp

    Nur zu Validierungs- und Debugzwecken können Sie Benutzerzugriffstoken (nur für Geschäfts-, Schul- oder Unikonten) decodieren, indem Sie den Onlinetokenparser von Microsoft unter verwendenhttps://jwt.ms. Die Analyse Ihres Tokens kann nützlich sein, wenn beim Aufrufen von Microsoft Graph Tokenfehler auftreten. Beispielsweise wird überprüft, ob der scp Anspruch im Token die erwarteten Microsoft Graph-Berechtigungsbereiche enthält.

Benutzer abrufen

Nachdem die Authentifizierung konfiguriert wurde, können Sie Ihren ersten Microsoft Graph-API-Aufruf durchführen. Fügen Sie Code hinzu, um den Namen und die E-Mail-Adresse des authentifizierten Benutzers abzurufen.

  1. Fügen Sie graph.py die folgende Funktion hinzu.

    async def get_user(self):
        # Only request specific properties using $select
        query_params = UserItemRequestBuilder.UserItemRequestBuilderGetQueryParameters(
            select=['displayName', 'mail', 'userPrincipalName']
        )
    
        request_config = UserItemRequestBuilder.UserItemRequestBuilderGetRequestConfiguration(
            query_parameters=query_params
        )
    
        user = await self.user_client.me.get(request_configuration=request_config)
        return user
    
  2. Ersetzen Sie die leere greet_user Funktion in Standard.py durch Folgendes.

    async def greet_user(graph: Graph):
        user = await graph.get_user()
        if user:
            print('Hello,', user.display_name)
            # For Work/school accounts, email is in mail property
            # Personal accounts, email is in userPrincipalName
            print('Email:', user.mail or user.user_principal_name, '\n')
    

Wenn Sie die App jetzt ausführen, begrüßt Sie die App nach der Anmeldung mit dem Namen.

Hello, Megan Bowen!
Email: MeganB@contoso.com

Code erläutert

Betrachten Sie den Code in der get_user Funktion. Es sind nur wenige Zeilen, aber es sind einige wichtige Details zu beachten.

Zugreifen auf "me"

Die Funktion erstellt eine Anforderung an die Api zum Abrufen von Benutzern . Auf diese API kann auf zwei Arten zugegriffen werden:

GET /me
GET /users/{user-id}

In diesem Fall ruft der Code den GET /me API-Endpunkt auf. Dieser Endpunkt ist eine Verknüpfungsmethode, um den authentifizierten Benutzer abzurufen, ohne seine Benutzer-ID zu kennen.

Hinweis

Da der GET /me API-Endpunkt den authentifizierten Benutzer abruft, ist er nur für Apps verfügbar, die die Benutzerauthentifizierung verwenden. Reine App-Authentifizierungs-Apps können nicht auf diesen Endpunkt zugreifen.

Anfordern bestimmter Eigenschaften

Die Funktion verwendet den Abfrageparameter $select , um die benötigten Eigenschaften anzugeben. Microsoft Graph gibt nur die angeforderten Eigenschaften in der Antwort zurück. In get_usererfolgt das Hinzufügen $select mit dem select -Parameter im MeRequestBuilderGetQueryParameters -Objekt.

Nächster Schritt