如何为 cURL 生成 Bearer Token 以通过 IAP(GCP)获取?

如何为 cURL 生成 Bearer Token 以通过 IAP(GCP)获取?

我需要对 GCP 上 IAP 后面托管的 Web 应用程序进行 cURL 操作。

通常,用户通过 IAP 登录并使用 Web 应用程序,但我需要运行一些命中 Web 应用程序 URL 的 cURL 命令(交互式和非交互式)(例如: https://myapp.com/get_pics/1)

我不知道如何从 GCP 获取可在 cURL 授权标头中使用的 Bearer 令牌。

我可以设置一个具有“IAP 安全的 Web 应用程序用户”角色的服务帐户,并且我有该服务帐户的 JSON 密钥,但我不确定之后去哪里获取 IAP 将接受的正确的 Bearer 令牌。

答案1

对于 IAP,您需要提供 OIDC 身份令牌。您可以使用gcloud为您创建它,或使用任何其他方式,如中所述程序化身份验证

我假设您有 gcloud,因此我将向您展示如何使用它:

  1. 使用服务帐户登录
gcloud auth activate-service-account --key-file service-account-key.json
  1. 发送您的请求
curl -H "Authorization: Bearer $(gcloud auth print-identity-token --audiences="xxx.apps.googleusercontent.com")" https://myapp.com/get_pics/1

确保您授予服务帐户权限iap.httpsResourceAccessor,否则您仍然会被拒绝。

  • 额外提示:不要使用服务帐户密钥文件。从您当前的用户配置文件中模拟服务帐户。
curl -H "Authorization: Bearer $(gcloud auth print-identity-token --include-email --audiences="xxx.apps.googleusercontent.com" --impersonate-service-account=service_account@project.iam.gserviceaccount.com)" https://myapp.com/get_pics/1

答案2

我不知道如何从 GCP 获取可在 cURL 授权标头中使用的 Bearer 令牌。

根据Google 公共文档

如果您的应用程序占用了授权请求标头,则可以将 ID 令牌包含在 Proxy-Authorization: Bearer 标头中。如果在 Proxy-Authorization 标头中找到有效的 ID 令牌,则 IAP 会使用该令牌授权请求。授权请求后,IAP 会将授权标头传递给您的应用程序,而不处理内容。

如果在 Proxy-Authorization 标头中未找到有效的 ID 令牌,IAP 将继续处理 Authorization 标头,并在将请求传递给您的应用程序之前删除 Proxy-Authorization 标头。

持有者令牌 OIDC

本文档还包括以下代码示例:

在此链接中您可以找到有关以下方面的更多信息验证 Bearer Token在 GCP 中

Bearer Token 认证

经过一番研究,我发现了两页描述如何将您的服务帐户身份验证作为 Bearer 令牌提供以及如何使用 Bearer 令牌授权标头发送 Curl POST 请求。

第一个是Google Developers 公开文档,并描述了使用您的服务帐户获取 Bearer 令牌。

  1. 安装 gcloud 命令行工具

  2. 向您的服务帐号进行身份验证。在以下命令中,将 替换${KEY_FILE}为您的服务帐号密钥文件的路径:

    gcloud auth activate-service-account
    --key-file ${KEY_FILE}
    
  3. 使用您的服务帐户获取授权令牌:

    gcloud auth print-access-token 
    

    该命令返回访问令牌值。

使用 API 时,请在 Authorization 标头中将令牌值作为 Bearer 令牌传递。请参阅以下示例:

    curl -X GET -H "X-Goog-User-Project: ${CLIENT_PROJECT}" \  
    -H "Content-Type: application/json" \  
    -H "Authorization: Bearer ${TOKEN}" \ 
"https://sasportal.googleapis.com/v1alpha1/customers" 

设置${CLIENT_PROJECT}Google Cloud 项目的 ID从中发出请求,然后设置${TOKEN}为授权令牌。

并且在此链接您将找到有关的信息和示例带有 Bearer Token 授权标头的 Curl 请求

相关内容