【发布时间】:2019-07-23 06:44:39
【问题描述】:
我的用例
我在 Google Cloud Platform 上部署了一个 API,使用 Google Cloud Endpoints 作为 API 管理器。对于那些熟悉端点的人,我在GKE 上使用ESP。我的 API 用作部署在 Actions On Google 上的操作的 webhook。在 API 方面,我需要验证请求实际上来自 Actions On Google。
如the doc 中所述,来自 Actions On Google 的请求在 Authorization 标头中包含一个令牌(JWT 格式)
authorization: "<JWT token>"
所以我需要使用 Cloud Endpoints 验证此令牌。
问题
Cloud Endpoints 使用 OpenAPI 2.0(又名 Swagger),specification 仅提及以下安全方案:“basic”、“apiKey”或“oauth2”。 Actions On Google 使用的似乎不是基于其中之一。
我尝试了什么
我尝试使用以下 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 检查 Authorization 标头的值是否以“Bearer”开头,否则它会拒绝请求(code)
我的第二个选择是将 Authorization 标头中的 JWT 视为 API 密钥。但 Cloud Endpoints 仅支持由 GCP 管理的 API 密钥。
我的问题
是否可以使用 Google Cloud Endpoints 验证来自 Actions On Google 的请求?
【问题讨论】:
-
我的意思是,这绝对是可能的。我只是不知道从 AoG 标头传递 JWT 是否可行。也许您想在您的 webhook 中使用定制的 JWT 生成来进行验证。
-
感谢尼克的回答。我很高兴听到这是可能的。我该怎么做?在我的 OpenAPI 定义中,我需要将 JWT 视为“apiKey”还是“oauth2”令牌? (在后者中,Endpoints 以 401 拒绝请求,因为 Authorization 标头不包含“Bearer”HTTP 身份验证类型)
-
我不知道。也许您需要创建一个自定义 JWT 而不是使用您提供的。
标签: oauth-2.0 jwt swagger actions-on-google google-cloud-endpoints