我们整合了一个 google hangouts 聊天机器人,为我们的团队提供一些方便的功能。该机器人属于“机器人 URL”类型,这意味着环聊将请求发送到应用端点,我们的应用会做出适当的响应。目前,我们正在努力验证来自谷歌的传入请求。每个请求的 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 类有一个 verifyIdToken 方法,我们在此示例 [ https://github.com/GoogleCloudPlatform/php-docs-samples/blob/master/auth/src/auth_cloud_explicit.php]中描述了该方法。我们将服务帐户密钥文件的路径和项目 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');
}
我希望谷歌客户端库能够验证谷歌 JWT。这个 github 问题 [ https://github.com/firebase/php-jwt/issues/175]反映了我们实施这种方法的经验。我想获得一些关于我们应该使用哪种方法的一般指导。