5

チームに便利な機能を提供するために、Google ハングアウト チャット ボットを作成しました。ボットは「ボット URL」の種類です。つまり、ハングアウトがリクエストをアプリ エンドポイントに送信し、アプリが適切に応答します。現在、Google からの受信リクエストを検証するのに苦労しています。各リクエストには Authentication ヘッダーにベアラー トークンがありますが、その JWT トークンは検証されません。PHP クライアント ライブラリ [ https://github.com/googleapis/google-api-php-client]とオンライン バリデーター [ https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=]の両方が、エラー「無効な署名」

Google クライアント PHP ライブラリの Google_AccessToken_Verify クラスには、この例 [ https://github.com/GoogleCloudPlatform/php-docs-samples/blob/master/auth/src/auth_cloud_explicit.php ]で説明されているように、これを使用する verifyIdToken メソッドがあります。サービス アカウント キー ファイルのパスとプロジェクト ID を Google クライアント コンストラクターに渡します。次に、受信リクエストのベアラー トークンを verifyIdToken メソッドに渡します。

use Google_Client;

// inside a laravel controller with $request in scope

$bearer_token = $request->bearerToken();
$keyPath = FILE_LOCATION

$client = new Google_Client([
               'keyFilePath' => $keyPath,
               'projectId' => GCP_CLIENT_ID
           ]);

$payload = $client->verifyIdToken($bearer_token);

if(!empty($payload)){

    return $this->call(ParseGoogleChatRequest::class, [$request]);

}else{

     \Log::debug('bad token');

}

Google クライアント ライブラリが Google JWT を検証できることを期待しています。この github の問題 [ https://github.com/firebase/php-jwt/issues/175 ]は、このアプローチを実装した経験を反映しています。どのアプローチを使用する必要があるかについて、一般的なガイダンスを得たいと思います。

4

1 に答える 1