Google 云 python 使用本地应用程序默认身份令牌对云 运行 的身份验证请求
Google Cloud python autheticated request to cloud run using local application default identity token
我正在尝试将 following 命令从 CLI(有效)转换为 python,但我遇到了一些问题。
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
问题是我无法请求具有 application default local credentials 令牌的有效 Bearer 来向 Google 云 运行 发出授权请求。如果我从 CLI gcloud auth print-identity-token
生成 Bearer 令牌并在 python 请求中使用它,一切正常
request_url = 'https://<my endpoint>'
identity_token = '<>' # response of gcloud auth print-identity-token)
header= {'Authorization': f'Bearer {identity_token}'}
requests.get(url=request_url, headers=receiving_service_headers)
来自 google auth documentation 我了解到云 运行 通信是基于支持模拟身份验证的身份令牌,但我无法生成有效的凭据。
from google.auth import impersonated_credentials, default
from google.auth.transport.requests import AuthorizedSession
request_url = 'https://<my endpoint>'
source_credentials, project = default()
creds = impersonated_credentials.IDTokenCredentials(
source_credentials,
target_audience=request_url)
authed_session = AuthorizedSession(creds)
resp = authed_session.get(request_url)
print(resp)
bui 我收到以下错误
google.auth.exceptions.GoogleAuthError: Provided Credential must be impersonated_credentials
谢谢
如果要将 curl 命令转换为 python 请求,请按照 enter link 进行操作。这是转换后的代码:
导入请求
headers = {
'Authorization': 'Bearer $(gcloud auth print-identity-token)',
}
响应 = requests.get('http://SERVICE_URL', headers=headers)
今天这是不可能的。我在 article 中谈到了它。您需要一个服务帐户才能使用 Google Auth 库生成有效的 JWT 令牌。所有图书馆和所有语言都存在同样的问题。
上周,我推送了一个 merge request in the Java auth library 来解决这个问题。不知道为什么Google不自己实现
在您的本地环境中,如果您想在本地和云端使用相同的代码,您必须生成一个服务帐户密钥文件并将其与 ADC 一起使用。可悲的是,这是一个安全问题...
我正在尝试将 following 命令从 CLI(有效)转换为 python,但我遇到了一些问题。
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
问题是我无法请求具有 application default local credentials 令牌的有效 Bearer 来向 Google 云 运行 发出授权请求。如果我从 CLI gcloud auth print-identity-token
生成 Bearer 令牌并在 python 请求中使用它,一切正常
request_url = 'https://<my endpoint>'
identity_token = '<>' # response of gcloud auth print-identity-token)
header= {'Authorization': f'Bearer {identity_token}'}
requests.get(url=request_url, headers=receiving_service_headers)
来自 google auth documentation 我了解到云 运行 通信是基于支持模拟身份验证的身份令牌,但我无法生成有效的凭据。
from google.auth import impersonated_credentials, default
from google.auth.transport.requests import AuthorizedSession
request_url = 'https://<my endpoint>'
source_credentials, project = default()
creds = impersonated_credentials.IDTokenCredentials(
source_credentials,
target_audience=request_url)
authed_session = AuthorizedSession(creds)
resp = authed_session.get(request_url)
print(resp)
bui 我收到以下错误
google.auth.exceptions.GoogleAuthError: Provided Credential must be impersonated_credentials
谢谢
如果要将 curl 命令转换为 python 请求,请按照 enter link 进行操作。这是转换后的代码:
导入请求
headers = { 'Authorization': 'Bearer $(gcloud auth print-identity-token)', }
响应 = requests.get('http://SERVICE_URL', headers=headers)
今天这是不可能的。我在 article 中谈到了它。您需要一个服务帐户才能使用 Google Auth 库生成有效的 JWT 令牌。所有图书馆和所有语言都存在同样的问题。
上周,我推送了一个 merge request in the Java auth library 来解决这个问题。不知道为什么Google不自己实现
在您的本地环境中,如果您想在本地和云端使用相同的代码,您必须生成一个服务帐户密钥文件并将其与 ADC 一起使用。可悲的是,这是一个安全问题...