Adicionar autenticação apenas de aplicação a aplicações PHP para o Microsoft Graph

Neste artigo, vai adicionar a autenticação apenas de aplicação à aplicação que criou na compilação de aplicações PHP com o Microsoft Graph e a autenticação apenas de aplicações.

Configurar o cliente do Graph para autenticação apenas de aplicações

Nesta secção, vai utilizar a PhpLeagueAuthenticationProvider classe para pedir um token de acesso com o fluxo de credenciais de cliente.

  1. Crie um novo ficheiro no diretório de raiz do projeto com o nome GraphHelper.php. Adicione o código a seguir.

    <?php
    class GraphHelper {
    }
    ?>
    
  2. Adicione as seguintes using instruções nas etiquetas 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. Adicione o seguinte código à classe 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. Substitua a função initializeGraph vazia em main.php pelo seguinte.

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

Este código carrega informações do ficheiro .env e inicializa duas propriedades, um ClientCredentialContext objeto e um GraphServiceClient objeto. O ClientCredentialContext objeto é utilizado para autenticar pedidos e o GraphServiceClient objeto é utilizado para fazer chamadas para o Microsoft Graph.

Testar o fluxo de credenciais do cliente

Em seguida, adicione código para obter um token de acesso a GraphHelperpartir do .

  1. Adicione a função a seguir à classe 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. Substitua a função displayAccessToken vazia em main.php pelo seguinte.

    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. Crie e execute a aplicação. Introduza 1 quando lhe for pedida uma opção. A aplicação apresenta o token de acesso obtido com as informações de autenticação configuradas anteriormente nas variáveis de ambiente.

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

    Dica

    Apenas para fins de validação e depuração, pode descodificar tokens de acesso apenas de aplicações com o analisador de tokens online da Microsoft em https://jwt.ms. Analisar o token pode ser útil se encontrar erros de token ao chamar o Microsoft Graph. Por exemplo, verificar se a role afirmação no token contém os âmbitos de permissão esperados do Microsoft Graph.

Próxima etapa