如何验证来自 HTTP 请求的 Google Cloud Task 令牌?

Posted

技术标签:

【中文标题】如何验证来自 HTTP 请求的 Google Cloud Task 令牌?【英文标题】:How do I verify a Google Cloud Task token from an HTTP request? 【发布时间】:2020-09-09 20:55:39 【问题描述】:

我正在尝试实现Google Cloud Task queues with a HTTP Target。我已经为 App Engine 使用了队列,但在迁移到 Cloud Run 时,我希望使用相同的队列系统。我已经实现了调度程序代码,但与 App Engine 不同,我不能信任标头,所以我知道我需要使用身份验证令牌验证请求,但我很难理解它?我也在做很多假设。我正在尝试用 php 构建它,所以如果可能的话,最好在 PHP 中看到一个示例,但即使只是流程的一些 Psuedo 代码也会很有用。

我的第一个假设是最好使用 OIDC 令牌?基于:

如果您在目标服务中编写自己的代码来验证 令牌,您应该使用 OIDC 令牌。有关什么的更多信息 这需要,请参阅 OpenID Connect,尤其是验证 ID 令牌。

为此,我已经 read the linked heading,但老实说,这对我来说并不是很清楚。

其次,令牌将在 Authorization 标头中作为 Bearer <token>?

第三,我想我应该使用类似包firebase/php-jwt 的东西来解码令牌。但是我该如何准确解码呢?我的服务 JSON 文件只有一个私钥,我需要从云控制台获取公钥吗?一旦我这样做了,我需要查看令牌的特定部分来验证请求吗?还是我可以将其解码为有效的 JSON 就足够了?

每次我阅读一些关于如何做到这一点的文档时,我都认为我离答案越来越近了,但我现在花费的时间比我想要的要长得多,而且当谷歌文档很少时,这有点令人沮丧似乎只是指出我需要做什么。

【问题讨论】:

【参考方案1】:
    可以参考链接:https://developer.okta.com/blog/2019/05/07/php-token-authentication-jwt-oauth2-openid-connect

有关如何使用身份验证令牌创建用于云运行的 http 任务的更多信息。请注意,代码是针对 python、jave、GO 和 node.js 给出的。但它会让您了解流程。

    授权标头(https://developer.okta.com/docs/reference/api/oidc/)的请求示例:

curl -v -X POST -H "授权:承载 $access_token" "https://baseUrl/userinfo"

    有关如何解码令牌的信息:

https://developer.okta.com/blog/2019/05/07/php-token-authentication-jwt-oauth2-openid-connect

【讨论】:

以上是关于如何验证来自 HTTP 请求的 Google Cloud Task 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过HTTP请求验证Google Cloud Vision

验证来自签名 jar 的 http 请求

如何在未经身份验证的情况下从 Google Play 商店请求应用程序信息

从 Google Chat POST 请求验证 JWT

如何在组件之间共享来自 http 响应的数据?

如何使用颤振在 django 中进行 google、facebook 身份验证