Безопасная функция облака Google «Hello World»

Безопасная функция облака Google «Hello World»

Мне нужна очень безопасная облачная функция, поэтому я пытаюсь разместить ее за API Gateway. Функция работает нормально, когда я вызываю ее напрямую, передавая токен Bearer в заголовке:

https://us-central1-<my-project>.cloudfunctions.net/<my-hello-function>

Однако я хочу разрешить его использование с API-токеном через API Gateway (а затем сделать что-то более полезное, чем сказать «привет»):

https://my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats&key=<my-API-token>

Когда я пытаюсь позвонить, я получаю:

{ "code": 404, "message": "Путь не соответствует ни одному шаблону URI требований." }

Мой файл конфигурации API Gateway:

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

надеюсь у тебя все хорошо.

Я не эксперт, но после прочтения документации и повторной проверки вашего фрагмента, разве не должно быть namein вместо if, это то, что вы используете в URL?securityDefinitionskeyapi_key

мой-шлюз-xxxxxxxx.uc.gateway.dev/v1/stats&ключ=<мой-API-токен>

решение2

Чтобы использовать ключ API, передав его через URL, вам придется отправить его как параметр запроса. Такой способ отправки похож на попытку войти в маршрут, названный stats&key=вместо статистики.

Ваш URL должен быть примерно таким:

https://my-gateway-xxxxxxxx.uc.gateway.dev/v1/stats?key=<my-API-token>

Заменить&по ключевому параметру с?

Связанный контент