Validation chatbot:如何验证来自google hangouts的传入请求

Validation chatbot:如何验证来自google hangouts的传入请求,validation,bearer-token,hangouts-chat,hangouts-api,Validation,Bearer Token,Hangouts Chat,Hangouts Api,我们已经组装了一个google hangouts聊天机器人,为我们的团队提供了一些方便的功能。机器人是“机器人URL”类型的,这意味着hangouts会向应用程序端点发送请求,而我们的应用程序会做出相应的响应。目前,我们正在努力验证来自谷歌的传入请求。每个请求在身份验证报头中都有一个承载令牌,但JWT令牌不进行验证。php客户端库[和在线验证器]都返回错误“无效签名” google client php库的google_AccessToken_Verify类有一个verifyIdToken方法,

我们已经组装了一个google hangouts聊天机器人,为我们的团队提供了一些方便的功能。机器人是“机器人URL”类型的,这意味着hangouts会向应用程序端点发送请求,而我们的应用程序会做出相应的响应。目前,我们正在努力验证来自谷歌的传入请求。每个请求在身份验证报头中都有一个承载令牌,但JWT令牌不进行验证。php客户端库[和在线验证器]都返回错误“无效签名”

google client php库的google_AccessToken_Verify类有一个verifyIdToken方法,我们在本例中使用了该方法[。我们将服务帐户密钥文件的路径和项目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[反映了我们实施此方法的经验。我想获得一些关于我们应该使用哪种方法的一般指导。

我在的帮助下找到了一个可接受的解决方案。google客户端库已经在导入firebase/php jwt,因此我从我链接的问题中遵循了与Jed相同的思路。提取从令牌开始,我使用它来识别正确的公钥。然后我实例化了php jwt库,并对其调用decode方法,传递所需的参数。decode方法还验证签名,并在成功时返回jwt的组件