Função segura de nuvem do Google “olá mundo”

Função segura de nuvem do Google “olá mundo”

Preciso de uma função de nuvem muito segura, por isso estou tentando colocá-la atrás de um API Gateway. A função funciona bem quando eu a chamo passando diretamente um token do portador no cabeçalho:

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

No entanto, quero permitir que ele seja usado com um token de API por meio do API Gateway (e então fazer algo mais útil do que dizer "olá"):

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

Quando tento ligar, recebo:

{ "code": 404, "message": "O caminho não corresponde a nenhum modelo de URI de requisito." }

Meu arquivo de configuração do 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"

O que está a faltar? O que estou fazendo de errado?

Responder1

espero que você esteja bem.

Não sou um especialista, mas depois de ler a documentação e verificar seu snippet novamente, não deveria nameser securityDefinitionsem keyvez de api_keyse é isso que você usa no URL?

meu-gateway-xxxxxxx.uc.gateway.dev/v1/stats&chave=<meu-token-API>

Responder2

Para usar uma chave de API passando-a pela URL você deve enviá-la como parâmetro de consulta, a maneira como você a envia é como tentar entrar em uma rota nomeada stats&key=em vez de estatísticas.

Sua URL deve ser algo como:

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

Substitua o&no parâmetro chave com um?

informação relacionada