我需要从我的云函数调用其他云函数/云运行服务。如果可能的话,我希望通过身份验证,因此我一直在研究如何使用从google.auth.default
返回的凭据创建AuthorizedSession
。我当前的代码看起来是这样的:
credentials, _ = google.auth.default(scopes=[
SERVICE_A_URL,
SERVICE_B_URL,
SERVICE_C_URL,
])
return AuthorizedSession(credentials)
当运行此程序时,我得到以下内容:
google.auth.exceptions.RefreshError: ('No access token in response.', {'id_token': '[ID_TOKEN]'})
有人知道如何让AuthorizedSession
接受我的证书吗?
授权会话与需要访问令牌的Google Cloud API配合良好。在云功能和云运行(以及IAP背后的应用程序引擎(的情况下,您需要提供身份令牌。
因此,您不能使用授权会话,您需要生成具有正确受众的ID令牌,然后将其添加到请求的授权标头中。
credentials, project_id = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.with_target_audience("SERVICE_A_URL")
from google.auth.transport import requests
credentials.refresh(requests.Request())
print(credentials.token)
request.get("SERVICE_A_URL+Parameters", headers={'Authorization': 'bearer {}'.format(credentials.token)})