调用Google Cloud signJwt时遇INVALID_ARGUMENT错误求助
调用Google Cloud signJwt方法时遇到INVALID_ARGUMENT错误
问题描述
尝试通过工作负载身份联合+域范围委派调用Google Cloud的signJwt方法,严格遵循官方指引但仍收到400错误:
{ "error": { "code": 400, "message": "Request contains an invalid argument.", "status": "INVALID_ARGUMENT" } }
在Cloud Shell中执行的curl命令:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<SA_USERNAME>%40<PROJECT_NAME>.iam.gserviceaccount.com:signJwt"
request.json内容:
{ "payload": "{\"iss\":\"<SA_USERNAME>@<PROJECT_NAME>.iam.gserviceaccount.com\",\"scope\":\"https://www.googleapis.com/auth/gmail.readonly\",\"aud\":\"https://oauth2.googleapis.com/token\",\"exp\":1672868057013,\"iat\":1672868053513,\"sub\":\"<USER_NAME_OF_USER_TO_IMPERSONATE>@<DOMAIN>\"}", "delegates": [], }
错误原因及解决方法
- JWT时间戳格式错误:
exp和iat字段使用了毫秒级时间戳,但Google JWT要求为秒级时间戳。你提供的1672868057013是毫秒数,需除以1000取整,改为1672868057和1672868053。 - JSON语法错误:
request.json中delegates字段末尾多了一个逗号,会导致JSON解析失败,需删除该多余逗号。 - 域范围委派配置验证:确认服务账号已启用域范围委派,且在Google Admin控制台中为该服务账号授权了
https://www.googleapis.com/auth/gmail.readonly范围,同时sub字段的用户属于你的G Suite/Workspace域。 - 服务账号权限检查:确保执行curl命令的身份(通过
gcloud auth print-access-token获取令牌的账号)拥有iam.serviceAccounts.signJwt权限,比如被授予Service Account Token Creator角色。
修正后的request.json示例
{ "payload": "{\"iss\":\"<SA_USERNAME>@<PROJECT_NAME>.iam.gserviceaccount.com\",\"scope\":\"https://www.googleapis.com/auth/gmail.readonly\",\"aud\":\"https://oauth2.googleapis.com/token\",\"exp\":1672868057,\"iat\":1672868053,\"sub\":\"<USER_NAME_OF_USER_TO_IMPERSONATE>@<DOMAIN>\"}", "delegates": [] }
内容的提问来源于stack exchange,提问作者user3766476
相关产品推荐
相关产品推荐

