我需要一個非常安全的雲端功能,因此我嘗試將其放在 API 網關後面。當我直接在標頭中傳遞不記名令牌來呼叫該函數時,該函數工作正常:
https://us-central1-<my-project>.cloudfunctions.net/<my-hello-function>
不過,我想允許它透過 API 網關與 API 令牌一起使用(然後做一些比說「你好」更有用的事情):
https://my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats&key=<my-API-token>
當我嘗試調用它時,我得到:
{ "code": 404, "message": "路徑與任何要求 URI 範本不符。" }
我的 API 網關設定檔:
swagger: "2.0"
info:
title: my-gateway
version: "1.0.0"
basePath: "/v1"
schemes:
- "https"
produces:
- application/json
paths:
/stats:
get:
tags:
- "stats"
summary: "get service stats"
description: "Returns statistics"
operationId: "hello_world"
#produces:
#- "application/json"
parameters:
- name: "since"
in: "header"
description: "Date to retrieve information"
required: false
type: "string"
format: "date"
x-google-backend:
address: https://us-central1-<my-project>.cloudfunctions.net/<my-hello-function>
path_translation: CONSTANT_ADDRESS
protocol: h2
responses:
"200":
description: "successful operation"
schema:
$ref: "#"
"400":
description: "Invalid datetime supplied"
"404":
description: "Unknown path"
security:
- api_key: []
securityDefinitions:
api_key:
type: "apiKey"
name: "api_key"
in: "query"
definitions:
ApiResponse:
type: "object"
properties:
code:
type: "integer"
format: "int32"
type:
type: "string"
message:
type: "string"
少了什麼?我究竟做錯了什麼?
答案1
希望你一切順利。
我不是專家,但是在閱讀文件並再次檢查您的程式碼片段後,不應該使用name
in securityDefinitions
bekey
而不是api_key
if that's 你在 url 中使用的內容嗎?
my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats&鑰匙=<我的 API 令牌>
答案2
為了透過 URL 傳遞來使用 API 金鑰,您必須將其作為查詢參數發送,發送它的方式就像嘗試進入名為stats&key=
而不是 stats 的路由。
您的 URL 必須類似於:
https://my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats?key=<my-API-token>
更換&在關鍵參數上?