
Ich brauche eine sehr sichere Cloud-Funktion, also versuche ich, sie hinter einem API-Gateway zu platzieren. Die Funktion funktioniert einwandfrei, wenn ich sie direkt aufrufe und ein Bearer-Token im Header übergebe:
https://us-central1-<my-project>.cloudfunctions.net/<my-hello-function>
Ich möchte jedoch die Verwendung mit einem API-Token über das API-Gateway zulassen (und dann etwas Nützlicheres tun, als „Hallo“ zu sagen):
https://my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats&key=<my-API-token>
Beim Versuch, es aufzurufen, erhalte ich:
{ "code": 404, "message": "Der Pfad entspricht keiner erforderlichen URI-Vorlage." }
Meine API Gateway-Konfigurationsdatei:
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"
Was fehlt? Was mache ich falsch?
Antwort1
ich hoffe es geht dir gut.
Ich bin kein Experte, aber nachdem ich die Dokumentation gelesen und Ihren Snippet noch einmal überprüft habe, sollte „ name
in“ nicht statt securityDefinitions
„ wenn Sie das in der URL verwenden“ lauten?key
api_key
my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats&Schlüssel=<mein-API-Token>
Antwort2
Um einen API-Schlüssel durch Übergabe über die URL zu verwenden, müssen Sie ihn als Abfrageparameter senden. Die Art und Weise, wie Sie ihn senden, ist so, als würden Sie versuchen, in eine Route mit dem Namen „ stats&key=
statt mit Statistiken“ zu gelangen.
Ihre URL muss ungefähr so aussehen:
https://my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats?key=<my-API-token>
Ersetze dasundauf dem Schlüsselparameter mit einem?