Sichere „Hallo Welt“-Google-Cloud-Funktion

Sichere „Hallo Welt“-Google-Cloud-Funktion

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 „ namein“ nicht statt securityDefinitions„ wenn Sie das in der URL verwenden“ lauten?keyapi_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?

verwandte Informationen