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
中查看如何执行此操作
我现在正在使用云端点和应用引擎开发 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
中查看如何执行此操作