次の方法で共有


Microsoft Graph 用の PHP アプリにアプリ専用認証を追加する

この記事では、「Microsoft Graph とアプリ専用認証を使用して PHP アプリをビルドする」で作成したアプリケーションに アプリ専用認証を追加します。

アプリ専用認証用に Graph クライアントを構成する

このセクションでは、 PhpLeagueAuthenticationProvider クラスを使用して、 クライアント資格情報フローを使用してアクセス トークンを要求します。

  1. プロジェクトのルート ディレクトリに GraphHelper.php という名前の新しいファイルを作成します。 次のコードを追加します。

    <?php
    class GraphHelper {
    }
    ?>
    
  2. PHP タグ内に次の using ステートメントを追加します。

    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. メイン.phpの空のinitializeGraph関数次のように置き換えます。

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

このコードは、.env ファイルから情報を読み込み、 ClientCredentialContext オブジェクトと GraphServiceClient オブジェクトの 2 つのプロパティを初期化します。 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. メイン.phpの空のdisplayAccessToken関数次のように置き換えます。

    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 のオンライン トークン パーサーを使用してアプリ専用アクセス トークンをデコードできます。 トークンの解析は、Microsoft Graph を呼び出すときにトークン エラーが発生した場合に役立ちます。 たとえば、トークン内の role 要求に、想定される Microsoft Graph アクセス許可スコープが含まれていることを確認します。

次の手順