使用 Google 云端点的非 OAuth2 JWT 验证

Non-OAuth2 JWT validation with Google Cloud Endpoints

我的use-case

我在 Google Cloud Platform 上部署了一个 API,Google Cloud Endpoints 作为 API 管理器。对于那些熟悉 Endpoints 的人,我使用的是 ESP on GKE。我的 API 用作部署在 Actions On Google 上的操作的 webhook。在 API 端,我需要验证请求实际上来自 Google 上的操作。

the doc 所述,来自 Actions On Google 的请求在授权 header

中包含令牌(JWT 格式)
authorization: "<JWT token>"

所以我需要使用 Cloud Endpoints 验证此令牌。

问题

Cloud Endpoints 使用 OpenAPI 2.0(又名 Swagger),specification 仅提及以下安全方案:"basic"、"apiKey" 或 "oauth2" . Google 使用的 Actions 似乎不是基于其中之一。

我试过的

我尝试使用以下 OpenAPI 定义将 JWT 视为 OAuth2 令牌:

securityDefinitions:
  ActionsOnGoogle:
    authorizationUrl: ""
    type: "oauth2"
    flow: "implicit"
    x-google-issuer: "https://accounts.google.com"
    x-google-jwks_uri: "https://www.googleapis.com/oauth2/v3/certs"
    audiences: "{{ my-gcp-project-id }}"

它没有工作,因为 Cloud Endpoints ESP 检查授权 header 的值是否以 "Bearer" 开头,否则它会拒绝请求 (code)

我的第二个选择是将授权 header 中的 JWT 视为 API 密钥。但 Cloud Endpoints 仅支持 API 由 GCP 管理的密钥。

我的问题

是否可以使用 Google Cloud Endpoints 验证来自 Actions On Google 的请求?

抱歉,目前 ESP 不支持从这种格式中提取 JWT:

authorization: "<JWT token>"