Google 云端点 API 密钥未验证

Google cloud endpoints API key is not verified

我现在正在使用云端点和应用引擎开发 REST API。 我想实施 api 密钥身份验证,但它不起作用。

没有 'key=${API KEY}' 的查询参数看起来不错。

# curl -X POST https://hogehoge.com/test -d '{"key":"value"}'
{
 "code": 16,
 "message": "Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.",
 "details": [
  {
   "@type": "type.googleapis.com/google.rpc.DebugInfo",
   "stackEntries": [],
   "detail": "service_control"
  }
 ]
}

但是任何密钥都可以被授予访问后端的权限。

# curl -X POST https://hogehoge.com/test?key=aaa -d '{"key":"value"}'
POST is sended.

当然,通过 API 管理生成的 API 密钥可以使用。

# curl -X POST https://hogehoge.com/test?key=${realkey} -d '{"key":"value"}'
POST is sended.

云端点文件定义是

swagger: "2.0"
info:
  title: "xxxxxxxxx"
  description: "xxxxxxxxx"
  version: "1.0.0"
host: "hogehoge.com"
schemes:
  - "https"
security: []
paths:
  "/test":
    post:
      description: "test"
      operationId: "test"
      security:
        - api_key: []
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/testRequest'
      responses:
        201:
          description: "Success"
          schema:
            $ref: '#/definitions/testResponse'
definitions:
  testRequest:
    type: object
    required:
      - data
    properties:
      data:
        type: object
        required:
          - key
        properties:
          token:
            type: string
            example: value
            maxLength: 20
  testResponse:
    type: string

securityDefinitions:
  api_key:
    type: "apiKey"
    name: "key"
    in: "query"

我期望只有通过 API 管理生成的密钥才会被授予访问权限。 让我知道如何解决这个问题。

谢谢。

您的项目似乎未启用服务控制 API。

为了检查这一点,您可以 运行

gcloud services list --enabled

如果servicecontrol.googleapis.com没有出现在前面命令的结果中,你应该运行

gcloud services enable servicecontrol.googleapis.com

此外,您可以检查是否已启用 Endpoints 所需的所有服务。您可以在 documentation

中查看如何执行此操作