问题标签 [google-api-gateway]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
463 浏览

google-cloud-platform - 带有 Firebase 身份验证的 ESPv2 的 JWT 验证失败

我正在使用具有 ESPV2Firebase 身份验证和 API 管理的云功能构建经过身份验证的云功能。在身份验证后从 firebase 获得 JWT 令牌后,我尝试使用ascurl中的令牌链接。当我在邮递员中尝试时,我得到了“JWT 验证失败”。当我从我的客户端应用程序中尝试它时,我收到了“错误请求”。除了链接中提到的设置之外,在我提出请求之前我还需要做任何额外的事情吗?AuthorizationBearer

根据要求更新更多详细信息

Firebase部署此服务后,我使用 Dart SDKgetIdToken()中的方法获取 id 令牌。FirebaseJWT 令牌采用 Header.payload.tail 格式。然后我在Authorization标头中添加了带有Bearer + id 令牌的令牌,我得到了以下响应。 在此处输入图像描述

更新:我使用https://cloud.google.com/api-gateway/docs/authenticating-users-firebase而不是 ESP 尝试了新的 API Gateway 产品。

我的配置:

客户端代码: 客户端是在 dart 中开发的,user这里是来自https://pub.dev/documentation/firebase_auth/latest/firebase_auth/User/getIdToken.html的 firebase auth 对象

我得到了回应

403 Forbidden - 您的客户端无权获取 URL

0 投票
0 回答
202 浏览

google-cloud-platform - 如何以编程方式创建用于保护 google API 网关(Beta)的 api 密钥?

用例:允许用户创建 api 密钥并从 webapp 中撤销它们。

文档似乎只显示使用 Cloud Console 创建 Api 密钥。(链接到文档

0 投票
0 回答
387 浏览

google-cloud-platform - Google Cloud API Gateway - 创建时“发生内部错误”

我正在为我的项目创建一个 GCP Cloud API Gateway资源。我创建了 API 并创建了 API 配置。我现在正在寻找创建网关本身。但是,当我运行网关创建命令时,出现以下错误:

gcloud beta api-gateway 网关创建 project-api-gateway --api=project-api --api-config=project-config --location=us-central1

等待使用 [projects/${MY_PROJECT}/locations/global/apis/project-api/configs/project-config] config...创建 API 网关 [project-api-gateway] 失败。错误:(gcloud.beta.api-gateway.gateways.create)发生内部错误

当我尝试通过云控制台执行此操作并通过 terraform 创建 API 网关时,也会发生同样的情况。有人知道这里出了什么问题吗?

API 和 API 配置是通过 terraform 创建的,但我相信等效的创建命令是:

gcloud beta api-gateway apis create project-api --project= gcloud beta api-gateway api-configs create project-config
--api=project-api --openapi-spec=swagger.yaml
--project= --backend- auth-service-account=SERVICE_ACCOUNT_EMAIL

编辑:根据要求,打开调试的命令运行(并略微编辑):

API 可以在http://www.filedropper.com/swagger_1找到

0 投票
1 回答
1020 浏览

cors - 带有 Cloud Run CORS 的 Google Api 网关

有没有办法在 Cloud Run 服务的 Google Api 网关配置中启用 Cors?

我自己在服务中启用了 Cors,但我总是得到

从源“http://localhost:4200/”访问“xxx”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头出现在请求的资源上。

想知道是不是 Api Gateway 的问题,因为直接调用云运行服务可以正常工作。

0 投票
2 回答
383 浏览

google-cloud-platform - Google API Gateway 抛出 400,带有下划线的标头的错误请求错误

我正在为我的服务使用 Google API Gateway(提供测试版)。面对名称中带有下划线 ( _) 的 API 标头的 API 请求问题,例如 CUSTOM_HEADER_NAME。API 网关会400, Bad Request针对此类请求抛出。

当自定义标题有连字符 ( -) 而不是下划线时,API 可以正常工作,例如 CUSTOM-HEADER-NAME。

它看起来是 API 网关使用的 Web 服务器上的配置问题,它禁止带有下划线的标头 -为什么 HTTP 服务器禁止在 HTTP 标头名称中使用下划线

由于我无法控制 Google API Gateway 的 Web 服务器,是否有解决此问题并允许带有下划线的标头的解决方法。

注意:该服务是迁移到 GCP 的旧版应用程序。所以我真的没有更新标头格式的选项,因为这意味着使用这个 API 更新所有客户端。

0 投票
1 回答
312 浏览

google-cloud-platform - 具有 Firebase 身份验证的 Google API 网关:无法将响应返回给客户端

我正在尝试使用 Firebase 身份验证的 GCP API Gateway。我可以看到我的请求已从日志中处理并以响应代码 200 完成。但是,我没有将响应返回给我的客户。当我从客户端和 curl 直接调用函数(通过传递 api 网关)时,我得到了响应。我错过了什么吗?

API 配置

功能

来自 Cloud Function 的日志 在此处输入图像描述

附加日志 { insertId: "8c13b49c-2752-4216-8188-d445f4724ef14850908905639612439@a1" jsonPayload: { api_key_state: "NOT CHECKED" api_method: "1.myapi.hello" api_name: "1.myapi" api_version: "1.0.1" client_ip: "999.999.999.999" http_method: "GET" http_response_code: 200 location: "us-central1" log_message: "1.myapi.hello is called" producer_project_id: "myproject" request_latency_in_ms: 161 request_size_in_bytes: 4020 response_size_in_bytes: 579 service_agent: "ESPv2/2.17.0" service_config_id: "myapi-config" timestamp: 1606313914.9804168 url: "/hello" } logName: "projects/myproject/logs/myapi%2Fendpoints_log" receiveTimestamp: "2020-11-25T14:18:36.521292489Z" resource: { labels: { location: "us-central1" method: "1.myapi.hello" project_id: "myproject" service: "myapi" version: "1.0.1" } type: "api" } severity: "INFO" timestamp: "2020-11-25T14:18:34.980416865Z" }

客户端代码 客户端是Flutter - Dartfirebase authentication. 我没有在这里添加它们,因为它非常标准并且在我的情况下是专有的。

客户端返回 {},这是默认的返回消息。两个打印件都没有出现在客户端日志上。

0 投票
2 回答
1569 浏览

google-cloud-platform - Google API Gateway:在标头中提供 API 密钥

我正在尝试设置 Google API Gateway 以使用调用者在标头中发送的 API 密钥。
我的 api 配置 yaml 如下所示:

如果没有通过标头或查询参数提供有效的 API 密钥,我希望这两个调用都失败/foo-header并显示 401 状态。/foo-query

但实际上只是/foo-query按预期行事。即使请求标头中未提供 API 密钥,请求也会传递到后端
/foo-header

我的配置有问题,还是在请求标头中提供 API 密钥时 Google API Gateway 无法正常工作?

0 投票
1 回答
984 浏览

google-cloud-platform - 适用于 Compute Engine 的 GCP API 网关

我在 api gateway 营销页面上找到了以下代码段。 在此处输入图像描述

所以我正在为在计算引擎上运行的应用程序设置 API 网关。由于我找不到任何有关如何在 API 引擎上配置计算引擎的文档,因此我使用内部 DNS 创建了以下配置。在此处输入链接描述

当我使用gcloud部署配置时,出现以下错误

等待为 API [my-api] 创建 API 配置 [my-api-config-v6]...失败。
错误:(gcloud.beta.api-gateway.api-configs.create)等待服务配置创建:后端 URL“http://my_internal_dns_for_compute_engine.c.myproject.internal/indexes”被禁止:无法将请求路由到内部地址.

所以看起来不支持内部 DNS(显然)。

我的计算引擎实例只能通过 VPC 网络访问。如何将我的 api 网关连接到 VPC 网络以及如何通过它访问我的计算引擎?

0 投票
1 回答
502 浏览

node.js - Google API Gateway + Firebase:X-Apigateway-Api-Userinfo 与 X-Forwarded-Authorization 标头

我在我的 Firebase 应用中使用 Google API Gateway 来验证用户是否已登录。在此处的 API Gateway 文档中,建议使用转发的X-Apigateway-Api-Userinfo标头来检索用户信息:

API Gateway 会将 X-Apigateway-Api-Userinfo 中的认证结果发送到后端 API。建议使用此标头而不是原始的 Authorization 标头。此标头采用 base64url 编码并包含 JWT 有效负载。

因为它是 base64url 编码的,所以我需要额外的服务器端逻辑来解码它,只是为了获取登录用户的信息(我假设解码的对象对应于 Firebase Auth Admin SDK 的DecodedIdToken))。

另一方面,我发现虽然 API Gateway 修改了原始Authorizationheader,但它首先将其复制到另一个名为X-Forwarded-Authorization. 这意味着我可以做类似的事情:

我发现这是获取相同信息的一种更简单(并且记录更好)的方法。这是一个坏主意吗?我不确定是否有其他原因X-Apigateway-Api-Userinfo建议使用标题。

0 投票
1 回答
822 浏览

google-cloud-platform - JWT 令牌谷歌云运行

我正在谷歌云平台上开发一个带有 JWT 身份验证的应用程序。服务器端我通过 Cloud API Gateway 将身份验证添加到云运行后端。现在我正在创建一个客户端来生成 JWT 令牌并将其传递给调用。为此,我正在创建一个必须部署在 CloudRun 上的应用程序,并且我正在关注以下文档:https ://cloud.google.com/api-gateway/docs/authenticate-service-account#making_an_authenticated_request 。我的问题是我不知道如何指示它需要什么作为 saKeyfile。我试图只将文件名放在 src/main/resources/filetest.json 下,但是一旦我尝试调用该方法,它就会告诉我找不到文件。我也试图指出完整的路径。谁能帮我?

PS我正在使用Java

编辑:这是我的代码,与文档相同

我尝试使用示例中的完整路径并且仅使用 /TEST1-id.json

这里有项目结构。是一个 springboot 应用程序,我将在云运行中部署

在此处输入图像描述