Добавление проверки подлинности только для приложений в приложения Python для Microsoft Graph

В этой статье описано, как добавить проверку подлинности только для приложений в приложение, созданное в разделе Создание приложений Python с помощью Microsoft Graph и проверки подлинности только для приложений.

Клиентская библиотека удостоверений Azure для Python предоставляет множество TokenCredential классов, реализующих потоки маркеров OAuth2. Пакет SDK Microsoft Graph для Python (предварительная версия) использует эти классы для проверки подлинности вызовов Microsoft Graph.

Настройка клиента Graph для проверки подлинности только для приложений

В этом разделе вы используете ClientSecretCredential класс для запроса маркера доступа с помощью потока учетных данных клиента.

  1. Откройте graph.py и замените все его содержимое следующим кодом.

    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
    

    Этот код объявляет два частных свойства: ClientSecretCredential объект и GraphServiceClient объект . Функция __init__ создает новый экземпляр ClientSecretCredential, а затем использует его для создания нового экземпляра GraphServiceClient. Каждый раз, когда вызов API выполняется к Microsoft Graph через app_client, он использует предоставленные учетные данные для получения маркера доступа.

  2. Добавьте следующую функцию в graph.py.

    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
    
  3. Замените пустую display_access_token функцию в main.py на следующую.

    async def display_access_token(graph: Graph):
        token = await graph.get_app_only_token()
        print('App-only token:', token, '\n')
    
  4. Выполните сборку и запуск приложения. Введите 1 при появлении запроса на выбор параметра. Приложение отображает маркер доступа.

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

    Совет

    Только для проверки и отладки можно декодировать маркеры доступа только для приложений с помощью средства синтаксического анализа токенов Майкрософт в сети по адресу https://jwt.ms. Анализ маркера может оказаться полезным, если при вызове Microsoft Graph возникают ошибки маркера. Например, убедитесь, что role утверждение в маркере содержит ожидаемые области разрешений Microsoft Graph.

Следующее действие