对 Google 云端点 API 进行授权调用
Making Authorized Calls to an Google Cloud Endpoints API
我当前的设置
- Google Cloud Endpoints 托管在 Google App Engine 上。
- Python 本地服务器向回显发出请求 API。
echo 教程已上线 运行。我可以在我的机器上使用 python 脚本调用打开端点和需要 API 密钥的端点。我无法使用 Google ID 令牌进行授权的 API 调用。到目前为止,Google 个示例中的 None 个都有效。
据我了解,工作流程应该是
- 使用密钥文件授权服务账号生成JWT。
- 使用 JWT 生成 Google ID 令牌。
Google 示例:https://cloud.google.com/endpoints/docs/openapi/service-account-authentication#using_a_google_id_token(密钥文件)
代码失败。函数 get_id_token() return res['id_token'] 失败,res.
中没有 id_token
有没有人让这个例子起作用?有没有人有使用来自服务帐户的 Google ID 令牌对端点 API 进行授权 API 调用的示例?
主要问题是生成 JWT,适用于我的代码如下。我还没有找到更好的方法来做到这一点。如果您知道更好的方法,请在下面提交您的答案或添加评论。从 JWT 生成 Google ID 令牌的代码完全来自 Google 此处的文档 (https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/endpoints/getting-started/clients/service_to_service_google_id_token/main.py) get_id_token 函数。
def generate_jwt(audience, json_keyfile, service_account_email):
"""Generates a signed JSON Web Token using a Google API Service Account.
https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/endpoints/getting-started/clients/google-jwt-client.py
"""
# Note: this sample shows how to manually create the JWT for the purposes
# of showing how the authentication works, but you can use
# google.auth.jwt.Credentials to automatically create the JWT.
# http://google-auth.readthedocs.io/en/latest/reference/google.auth.jwt.html#google.auth.jwt.Credentials
signer = google.auth.crypt.RSASigner.from_service_account_file(json_keyfile)
now = int(time.time())
expires = now + 3600 # One hour in seconds
payload = {
'iat': now,
'exp': expires,
'aud': 'https://www.googleapis.com/oauth2/v4/token',
# target_audience must match 'audience' in the security configuration in your
# openapi spec. It can be any string.
'target_audience': audience,
'iss': service_account_email
}
jwt = google.auth.jwt.encode(signer, payload)
return jwt
我当前的设置
- Google Cloud Endpoints 托管在 Google App Engine 上。
- Python 本地服务器向回显发出请求 API。
echo 教程已上线 运行。我可以在我的机器上使用 python 脚本调用打开端点和需要 API 密钥的端点。我无法使用 Google ID 令牌进行授权的 API 调用。到目前为止,Google 个示例中的 None 个都有效。
据我了解,工作流程应该是
- 使用密钥文件授权服务账号生成JWT。
- 使用 JWT 生成 Google ID 令牌。
Google 示例:https://cloud.google.com/endpoints/docs/openapi/service-account-authentication#using_a_google_id_token(密钥文件) 代码失败。函数 get_id_token() return res['id_token'] 失败,res.
中没有 id_token有没有人让这个例子起作用?有没有人有使用来自服务帐户的 Google ID 令牌对端点 API 进行授权 API 调用的示例?
主要问题是生成 JWT,适用于我的代码如下。我还没有找到更好的方法来做到这一点。如果您知道更好的方法,请在下面提交您的答案或添加评论。从 JWT 生成 Google ID 令牌的代码完全来自 Google 此处的文档 (https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/endpoints/getting-started/clients/service_to_service_google_id_token/main.py) get_id_token 函数。
def generate_jwt(audience, json_keyfile, service_account_email):
"""Generates a signed JSON Web Token using a Google API Service Account.
https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/endpoints/getting-started/clients/google-jwt-client.py
"""
# Note: this sample shows how to manually create the JWT for the purposes
# of showing how the authentication works, but you can use
# google.auth.jwt.Credentials to automatically create the JWT.
# http://google-auth.readthedocs.io/en/latest/reference/google.auth.jwt.html#google.auth.jwt.Credentials
signer = google.auth.crypt.RSASigner.from_service_account_file(json_keyfile)
now = int(time.time())
expires = now + 3600 # One hour in seconds
payload = {
'iat': now,
'exp': expires,
'aud': 'https://www.googleapis.com/oauth2/v4/token',
# target_audience must match 'audience' in the security configuration in your
# openapi spec. It can be any string.
'target_audience': audience,
'iss': service_account_email
}
jwt = google.auth.jwt.encode(signer, payload)
return jwt