服务账号调用Google Vault API报400:用户不属于G Suite客户
问题现象
通过Google API控制台生成的服务账号JSON凭据调用Google Vault API执行简单查询时,接口返回400状态码(Invalid Request / Invalid Argument),错误提示如下:
The user does not belong to a G Suite customer.
初始调用代码(Ruby):
matter_id = 'xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx' vault = Google::Apis::VaultV1::VaultService.new scope = 'https://www.googleapis.com/auth/ediscovery.readonly' vault.authorization = Google::Auth::ServiceAccountCredentials.make_creds( json_key_io: File.open('./xxxxxxxxxx.json'), scope: scope) vault.authorization.fetch_access_token! m = vault.get_matter(matter_id)
故障原因
服务账号是独立的API身份,本身不归属任何G Suite/Google Workspace租户,默认直接用服务账号身份请求Vault API时,服务端无法匹配到对应的G Suite客户上下文,因此触发该报错。该问题不需要修改下载的JSON凭据文件本身,只需要在代码中补充身份模拟配置即可。
修复方法
初始化服务账号凭据后,调用update!方法配置sub参数,填入G Suite域内拥有Vault操作权限的合法用户邮箱,模拟该域用户身份发起请求即可正常调用。
修正后的代码(Ruby):
matter_id = 'xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx' vault = Google::Apis::VaultV1::VaultService.new scope = 'https://www.googleapis.com/auth/ediscovery.readonly' credentials = Google::Auth::ServiceAccountCredentials.make_creds( json_key_io: File.open('./xxxxxxxxxx.json'), scope: scope) credentials.update!(sub: 'user@domain.com') vault.authorization = credentials vault.authorization.fetch_access_token! m = vault.get_matter(matter_id)
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

