如何调用使用 GCP 身份验证的 REST 服务?

Posted

技术标签:

【中文标题】如何调用使用 GCP 身份验证的 REST 服务?【英文标题】:How to call REST service which uses GCP authentication? 【发布时间】:2020-03-09 16:56:35 【问题描述】:

我必须从我的应用程序调用使用 google 身份验证的外部 http 服务。当我从浏览器调用它时它可以工作。我发现它发生是因为我有包含

的 cookie
GCP_IAAP_AUTH_TOKEN_<random_string>
GCP_IAP_UID 

所以我的 cookie 看起来像这样:

cookie:    GCP_IAP_UID=111111111111; GCP_IAAP_AUTH_TOKEN_1234567891234567890B=verylongstringhere"

我尝试直接在我的 restTemplate 中设置此 cookie,它可以正常工作,但我希望我必须根据某种凭据获取令牌。

webClient.post()
         .uri(uploadUrl)                    
         .header("cookie", "GCP_IAP_UID=12345678901234567890; GCP_IAAP_AUTH_TOKEN_12345678907645456546B=verylongstringhere")

您能否提供正确使用 GCP auth 的示例?如何更新令牌?基于什么?

【问题讨论】:

为什么不使用 google-cloud-java 库? 您想访问哪个服务?您在哪个平台上运行源应用程序? 【参考方案1】:

Google API 使用 OAuth 2.0 协议进行身份验证和授权

您可以从 Google API 控制台获取 OAuth 2.0 客户端凭据。然后,您的客户端应用程序从 Google 授权服务器请求访问令牌,从响应中提取令牌,并将令牌发送到您要访问的 Google API。

在您的应用程序可以使用 Google API 访问私有数据之前,它必须获得一个访问令牌来授予对该 API 的访问权限。

有多种方法可以提出此请求,它们会根据您正在构建的应用程序的类型而有所不同。例如,javascript 应用程序可能使用浏览器重定向到 Google 请求访问令牌,而安装在没有浏览器的设备上的应用程序使用 Web 服务请求。

我建议您阅读OAuth 2.0 to Access Google APIs 文章为您的应用程序选择最佳方法,有几个文档化的场景可以解释 GCP 如何使用应用程序身份验证

【讨论】:

以上是关于如何调用使用 GCP 身份验证的 REST 服务?的主要内容,如果未能解决你的问题,请参考以下文章

在 GCP 上使用 Pubsub 时如何解决身份验证范围不足的问题

如何管理从本地移动应用程序调用 Play2!-Scala REST 服务发送的用户请求的身份验证/授权

为用户和身份验证使用解析服务器并调用其他内部 REST Web 服务

如何对 GCP Cloud Run 上的联合 GraphQL 服务进行身份验证?

如何使用来自 extjs 的 SSL 调用 rest

通过 SSL 和 HTTP 基本身份验证的 REST 服务