Google Admin SDK/Directory API 获取用户头像仅返回默认剪影问题
解决方法
- 检查服务账号凭证的模拟用户配置
你调用Directory API时必须配置域管理员身份模拟,仅配置域范围权限是不够的,服务账号本身没有用户私有数据的访问权限,生成凭证时必须指定subject参数为你的域内拥有用户管理权限的管理员邮箱,示例代码如下:
from google.oauth2 import service_account # 确保已配置正确的权限范围 SCOPES = [ 'https://www.googleapis.com/auth/admin.directory.user.readonly', 'https://www.googleapis.com/auth/admin.directory.user.photo.readonly' ] credentials = service_account.Credentials.from_service_account_file( '你的服务账号密钥文件路径', scopes=SCOPES, # 必须填写域管理员邮箱,否则默认以服务账号身份请求,只能拿到默认头像 subject='admin@你的企业域名.com' )
- 修复
users.photos.get方法的解码逻辑
返回的photoData是URL安全的Base64编码,实际返回内容可能缺失末尾的填充符=,直接解码会出错,需要先补全填充再解码:
import base64 # 从接口响应中取photoData字段 photo_data = api_response.get('photoData') # 补全Base64填充 if len(photo_data) % 4 != 0: photo_data += '=' * (4 - len(photo_data) % 4) # 解码后直接写入文件即为正常头像文件 decoded_avatar = base64.urlsafe_b64decode(photo_data) with open('user_avatar.jpg', 'wb') as f: f.write(decoded_avatar)
- 排查
thumbnailPhotoUrl调用问题
该URL需要携带Google OAuth2身份凭证才能访问,你使用AuthorizedHttp发起请求时,要确保使用的是上述配置了subject参数的凭证生成的请求对象,不要使用未配置模拟用户的凭证生成的请求,也不要直接将URL复制到未登录对应账号的浏览器中访问,否则只能拿到默认剪影。
额外排查提示:先确认你要查询的目标用户确实已经设置了自定义头像,可通过域管理后台查看用户配置,排除目标用户本身使用默认头像的情况。
内容的提问来源于stack exchange,提问作者concentratesd
相关产品推荐
相关产品推荐

