我们已经组合了一个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类具有一个verifyIdToken方法,我们在此示例[https://github.com/GoogleCloudPlatform/php-docs-samples/blob/master/auth/src/auth_cloud_explicit.php]中对此进行了描述。我们将服务帐户密钥文件的路径和项目ID传递到google client构造函数中。然后,将传入请求的承载令牌传递给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]反映了我们实施此方法的经验。我想获得关于应该使用哪种方法的一般指导。
答案 0 :(得分:0)
借助another SO question,我找到了可以接受的解决方案。谷歌客户端库已经在导入firebase / php-jwt,所以我遵循与我链接到的问题中的Jed相同的思路。从令牌中提取KID,我用它来标识正确的公钥from this url。然后,我实例化了php-jwt库,并在其上调用了debug方法,并传递了所需的参数。解码方法还会验证签名,并在成功后返回JWT的组件。