我想访问部署在 GCP 上且位于 Identity-Aware-Proxy (IAP) 后面的网站 REST API。我只需要能够从我的本地计算机访问,我不能使用服务帐户密钥来实现这一点。
我尝试使用gcloud auth login
并gcloud auth application-default login
设置 application_default_credentials,然后调用 Oauth2 端点来获取 id_token。
无论我尝试什么,我都会不断收到错误“观众客户和客户需要在同一个项目中”。
我在默认凭据中的 client_id (74XXXXXXX) 和 IAP 的 client_id (73XXXXXXX) 不匹配,但它们都使用相同的 GCP 项目。
一直在使用 Python 示例(如何使用用户默认凭据以编程方式对 Cloud Identity-Aware Proxy (Cloud IAP)-secured 资源进行身份验证?)问题:
import google.auth
import requests
import json
def id_token_from_default_creds(audience):
cred, proj = google.auth.default()
# data necessary for ID token
client_id = cred.client_id
client_secret= cred.client_secret
refresh_token = str(cred.refresh_token)
return id_token_from_refresh_token(client_id, client_secret, refresh_token, audience)
def id_token_from_refresh_token(client_id, client_secret, refresh_token, audience):
oauth_token_base_URL = "https://www.googleapis.com/oauth2/v4/token"
payload = {"client_id": client_id, "client_secret": client_secret,
"refresh_token": refresh_token, "grant_type": "refresh_token",
"audience": audience}
res = requests.post(oauth_token_base_URL, data=payload)
return (str(json.loads(res.text)[u"id_token"]))
print("ID token from \"default\" credentials: %s" % id_token_from_default_creds("<IAP Client ID>"))
任何想法如何通过本地用户凭据传递 IAP?