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 name
ser securityDefinitions
em key
vez de api_key
se é 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?