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

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

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

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

  1. Создайте файл в корневом каталоге проекта с именем GraphHelper.php. Добавьте в него указанный ниже код.

    <?php
    class GraphHelper {
    }
    ?>
    
  2. Добавьте следующие using инструкции в теги PHP.

    use Microsoft\Graph\Core\Authentication\GraphPhpLeagueAccessTokenProvider;
    use Microsoft\Graph\Generated\Models;
    use Microsoft\Graph\Generated\Users\UsersRequestBuilderGetQueryParameters;
    use Microsoft\Graph\Generated\Users\UsersRequestBuilderGetRequestConfiguration;
    use Microsoft\Graph\GraphServiceClient;
    use Microsoft\Kiota\Authentication\Oauth\ClientCredentialContext;
    
  3. Добавьте приведенный ниже код в класс GraphHelper.

    private static string $clientId = '';
    private static string $clientSecret = '';
    private static string $tenantId = '';
    private static ClientCredentialContext $tokenContext;
    private static GraphServiceClient $appClient;
    
    public static function initializeGraphForAppOnlyAuth(): void {
        GraphHelper::$clientId = $_ENV['CLIENT_ID'];
        GraphHelper::$clientSecret = $_ENV['CLIENT_SECRET'];
        GraphHelper::$tenantId = $_ENV['TENANT_ID'];
    
        GraphHelper::$tokenContext = new ClientCredentialContext(
            GraphHelper::$tenantId,
            GraphHelper::$clientId,
            GraphHelper::$clientSecret);
    
        GraphHelper::$appClient = new GraphServiceClient(
            GraphHelper::$tokenContext, ['https://graph.microsoft.com/.default']);
    }
    
  4. Замените пустую initializeGraph функцию в main.php следующим кодом.

    function initializeGraph(): void {
        GraphHelper::initializeGraphForAppOnlyAuth();
    }
    

Этот код загружает сведения из ENV-файла и инициализирует два свойства: ClientCredentialContext объект и GraphServiceClient объект . Объект ClientCredentialContext используется для проверки подлинности запросов, а GraphServiceClient объект — для выполнения вызовов Microsoft Graph.

Тестирование потока учетных данных клиента

Затем добавьте код для получения маркера доступа из GraphHelper.

  1. Добавьте к классу GraphHelper следующую функцию:

    public static function getAppOnlyToken(): string {
        // Create an access token provider to get the token
        $tokenProvider = new GraphPhpLeagueAccessTokenProvider(GraphHelper::$tokenContext);
        return $tokenProvider
            ->getAuthorizationTokenAsync('https://graph.microsoft.com')
            ->wait();
    }
    
  2. Замените пустую displayAccessToken функцию в main.php следующим кодом.

    function displayAccessToken(): void {
        try {
            $token = GraphHelper::getAppOnlyToken();
            print('App-only token: '.$token.PHP_EOL.PHP_EOL);
        } catch (Exception $e) {
            print('Error getting access token: '.$e->getMessage().PHP_EOL.PHP_EOL);
        }
    }
    
  3. Выполните сборку и запуск приложения. Введите 1 при появлении запроса на выбор параметра. Приложение отображает маркер доступа, который оно извлекает, используя сведения о проверке подлинности, настроенные ранее в переменных среды.

    $ php main.php
    
    PHP Graph 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.

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