この記事では、「Microsoft Graph とアプリ専用認証を使用して PHP アプリをビルドする」で作成したアプリケーションに アプリ専用認証を追加します。
アプリ専用認証用に Graph クライアントを構成する
このセクションでは、 PhpLeagueAuthenticationProvider クラスを使用して、 クライアント資格情報フローを使用してアクセス トークンを要求します。
プロジェクトのルート ディレクトリに GraphHelper.php という名前の新しいファイルを作成します。 次のコードを追加します。
<?php class GraphHelper { } ?>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;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']); }メイン.phpの空の
initializeGraph関数を次のように置き換えます。function initializeGraph(): void { GraphHelper::initializeGraphForAppOnlyAuth(); }
このコードは、.env ファイルから情報を読み込み、 ClientCredentialContext オブジェクトと GraphServiceClient オブジェクトの 2 つのプロパティを初期化します。
ClientCredentialContext オブジェクトは要求を認証するために使用され、GraphServiceClient オブジェクトを使用して Microsoft Graph を呼び出します。
クライアント資格情報フローをテストする
次に、 GraphHelperからアクセス トークンを取得するコードを追加します。
次の関数を
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(); }メイン.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); } }アプリをビルドして実行します。 オプションの入力を求められたら、「
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 アクセス許可スコープが含まれていることを確認します。