我现在正在使用云端点和应用程序引擎开发 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 --project your-gcloud-project-name
如果 servicecontrol.googleapis.com 未在上一个命令的结果中列出,您应该运行
gcloud services enable servicecontrol.googleapis.com
此外,您可以检查是否已启用端点所需的所有服务。您可以在文档
中查看如何执行此操作