GCP API网关路由返回Google Sign-In页面,而不是预期的响应



在遵循设置GCP的API网关的文档时,我在调用端点时遇到了一个问题,如下所示:

curl --request POST 'https://my-dev-project-XXX.wl.gateway.dev/helloWorld?key=XXX'

它返回一个HTML页面以通过Google登录进行身份验证,而不是适当的响应:"Hello World!"

函数名称有问题吗

我知道云函数helloWorld存在,因为如果我将上面的cURL请求更改为类似于:

curl --request POST 'https://my-dev-project-XXX.wl.gateway.dev/helloWorldButChangeTheName?key=XXX'

它返回:

{"message":"The current request is not defined by this API.","code":404}

API密钥有问题

我知道API密钥是有效的,因为如果我将其更改为YYY,我得到:

{"code":400,"message":"INVALID_ARGUMENT:API key not valid. Please pass a valid API key."}

请求方法有问题吗

我知道POST的Request方法是正确的,因为如果我将其更改为GET,它将返回:

{"message":"The current request is matched to the defined url template "/helloWorld" but its http method is not allowed","code":405}

授权问题

有一些类似的StackOverflow解决了Cloud函数[1]和[2]的问题;然而,这不是同一个问题。我知道这一点是因为我已经在不需要授权的情况下公开了实际的云功能。所以如果我打电话给:

curl --request POST 'https://us-west2-my-dev-project.cloudfunctions.net/helloWorld'

我得到"Hello World!"

服务帐户角色有问题吗

根据为网关配置服务帐户的文档,我确保设置了两个角色:

  • 服务帐户用户
  • 云函数调用程序

我不确定如果我没有正确设置这些设置会是什么样子(因为我在得出这里可能有问题的结论之前找到了答案(,但这些设置应该足够了。

API配置文件

唯一的";显著的";我与文档教程的不同之处在于我的配置文件,它是:

swagger: '2.0'
info:
title: XXX
description: Sample API on API Gateway with a Google Cloud Functions backend
version: 1.0.0
schemes:
- https
produces:
- application/json
paths:
# different name than tutorial
/helloWorld:
post:
summary: Greet a user
# different id than tutorial
operationId: helloWorld
x-google-backend:
# different endpoint than tutorial
address: https://us-central1-my-prod-project.cloudfunctions.net/helloWorld
security:
- api_key: []
responses:
'200':
description: A successful response
schema:
type: string
securityDefinitions:
api_key:
type: apiKey
name: key
in: query

谷歌登录屏幕在这里引起了很多混乱,因为这个问题似乎不会产生这样的结果。你可能会认为这是身份验证的问题,但事实并非如此。相反,API配置文件有两个问题,都与address:有关

  1. 区域不同于Cloud Function。云功能部署在us-west2上,而API配置文件将其设置为us-central1(如文档所示(
  2. 项目ID与Cloud Function的不同。云函数的ID为my-dev-project,而API配置文件的ID设置为my-prod-project。这是因为我有两个不同的环境,我尝试了这个,但把它搞砸了

我认为API配置文件的其他细微问题也可能导致响应为Google登录页面,因此如果我上面的两点没有解决您的问题,请查找其他差异,例如路径名和operationId

不确定情况是否相同,但查看您的api配置文件后,我可以说我在api网关方面遇到了同样的问题,解决方案是将x-google-backend地址更改为云函数url,而不是文档中所说的(文档中说它是

https://region-projectID.cloudfunctions.net/CloudFunctionName

但这不起作用。你可以通过在GCP中查看云功能的触发器选项卡来找到url,它可能类似于:

x-google-backend:
# different endpoint than tutorial
address:https://<the cloud function url>/helloWorld

相关内容

  • 没有找到相关文章

最新更新