问题标签 [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.
google-cloud-platform - 带有 Firebase 身份验证的 ESPv2 的 JWT 验证失败
我正在使用具有 ESPV2和Firebase 身份验证和 API 管理的云功能构建经过身份验证的云功能。在身份验证后从 firebase 获得 JWT 令牌后,我尝试使用ascurl
中的令牌链接。当我在邮递员中尝试时,我得到了“JWT 验证失败”。当我从我的客户端应用程序中尝试它时,我收到了“错误请求”。除了链接中提到的设置之外,在我提出请求之前我还需要做任何额外的事情吗?Authorization
Bearer
根据要求更新更多详细信息
Firebase
部署此服务后,我使用 Dart SDKgetIdToken()
中的方法获取 id 令牌。Firebase
JWT 令牌采用 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
google-cloud-platform - 如何以编程方式创建用于保护 google API 网关(Beta)的 api 密钥?
用例:允许用户创建 api 密钥并从 webapp 中撤销它们。
文档似乎只显示使用 Cloud Console 创建 Api 密钥。(链接到文档)
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
编辑:根据要求,打开调试的命令运行(并略微编辑):
cors - 带有 Cloud Run CORS 的 Google Api 网关
有没有办法在 Cloud Run 服务的 Google Api 网关配置中启用 Cors?
我自己在服务中启用了 Cors,但我总是得到
从源“http://localhost:4200/”访问“xxx”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头出现在请求的资源上。
想知道是不是 Api Gateway 的问题,因为直接调用云运行服务可以正常工作。
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 更新所有客户端。
google-cloud-platform - 具有 Firebase 身份验证的 Google API 网关:无法将响应返回给客户端
我正在尝试使用 Firebase 身份验证的 GCP API Gateway。我可以看到我的请求已从日志中处理并以响应代码 200 完成。但是,我没有将响应返回给我的客户。当我从客户端和 curl 直接调用函数(通过传递 api 网关)时,我得到了响应。我错过了什么吗?
API 配置
功能
附加日志
{ 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 - Dart
用firebase authentication
. 我没有在这里添加它们,因为它非常标准并且在我的情况下是专有的。
客户端返回 {},这是默认的返回消息。两个打印件都没有出现在客户端日志上。
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 无法正常工作?
google-cloud-platform - 适用于 Compute Engine 的 GCP API 网关
所以我正在为在计算引擎上运行的应用程序设置 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 网络以及如何通过它访问我的计算引擎?
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 修改了原始Authorization
header,但它首先将其复制到另一个名为X-Forwarded-Authorization
. 这意味着我可以做类似的事情:
我发现这是获取相同信息的一种更简单(并且记录更好)的方法。这是一个坏主意吗?我不确定是否有其他原因X-Apigateway-Api-Userinfo
建议使用标题。
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 应用程序,我将在云运行中部署