我需要对 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,因此我将向您展示如何使用它:
- 使用服务帐户登录
gcloud auth activate-service-account --key-file service-account-key.json
- 发送您的请求
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 令牌。
如果您的应用程序占用了授权请求标头,则可以将 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 令牌。
向您的服务帐号进行身份验证。在以下命令中,将 替换
${KEY_FILE}
为您的服务帐号密钥文件的路径:gcloud auth activate-service-account --key-file ${KEY_FILE}
使用您的服务帐户获取授权令牌:
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 请求