Google Cloud Endpoints 通过 API 键入 header

Google Cloud Endpoints pass API key in header

根据 Cloud Endpoint docs,您似乎必须将 URL 中的 API 键作为查询参数传递。

然而,这使我们容易受到中间人攻击。我想知道是否有一种方法可以通过在 header 中传递 API 键来让它工作。

我正在开发一个简单的应用程序,它还没有集成任何 sign-in 方法。 Cloud Endpoints 中是否有其他身份验证方式,我不需要添加任何现有的 sign-in 方法,但能够安全地使用 API 密钥。

API 密钥通常不安全。

对于 server-to-server 通信,确保通信安全的方法之一是使用 HTTPS 和 IP 白名单。

然而,为了(browser or mobile client)-to-server通信,我们需要在客户端存储API密钥,当然它会暴露给人们。

为了 Google Cloud Endpoints 的安全客户端-服务器通信,请尝试添加身份验证方法,例如 Firebase 或 Google ID。

我试图按照 openAPI v2 spec

中的描述来定义它
securityDefinitions:
  api_key:
    type: "apiKey"
    name: "x-key"
    in: "header"

我在部署 Cloud Endpoint 定义时收到此错误消息。

WARNING: service.yaml: apiKey 'x-key' is ignored. Only apiKey with 'name' as 'key' and 'in' as 'query' are supported

所以,这是不可能的。

我发现实际上,它 是可能的(至少对于 Google API 网关,我稍后可能会尝试看看它如何与云端点)。

请注意,header 使用的名称是:

'X-API-Key'(或'x-api-key',不区分大小写)。

这样对我来说效果很好。

是的,可以在 header 中指定 API 键。

这是 Google 关于 API 键定义限制的文档的摘录:

When specifying an API key in the security definitions object in your OpenAPI document, Endpoints requires one of the following schemes:

  • The name is key and the in is query
  • The name is api_key and the in is query
  • The name is x-api-key and the in is header

请参阅此 link 以获取更多信息和示例: https://cloud.google.com/endpoints/docs/openapi/openapi-limitations