我确实很难尝试使用服务帐户身份验证来使用Google Directory API(Admin SDK)。
使用基于客户端的三足式OAuth可以正常工作(在此处进行测试-https: //developers.google.com/admin- sdk/directory/v1/reference/members/insert),但是将权限委派给我所使用的服务帐户存在问题使用。在Google Apps管理下,我启用了使用API的功能,并按照说明将服务帐户添加到了允许的OAuth客户端列表中。
这是代码:
import httplib2 import sys from apiclient.discovery import build from oauth2client.client import SignedJwtAssertionCredentials credentials = SignedJwtAssertionCredentials( '<KEY>@developer.gserviceaccount.com', '<KEY DATA>', scope='https://www.googleapis.com/auth/apps.groups.settings https://www.googleapis.com/auth/admin.directory.group https://www.googleapis.com/auth/admin.directory.group.member' ) http = httplib2.Http() http = credentials.authorize(http) service = build("admin", "directory_v1", http=http) groups = service.groups() g = groups.get(groupKey="<GROUP NAME>").execute()
最终,出现以下错误:
apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/admin/directory/v1/groups/<GROUP NAME>?alt=json returned "Not Authorized to access this resource/api">
我也尝试使用以下API:
service = build("groupssettings", "v1", http=http)
但这也会返回一个错误-“后端错误”。
即使您使用的是服务帐户,您仍然需要在具有适当管理员权限的实例中代表Google Apps用户执行操作。尝试做:
credentials = SignedJwtAssertionCredentials( '<KEY>@developer.gserviceaccount.com', '<KEY DATA>', scope='https://www.googleapis.com/auth/apps.groups.settings https://www.googleapis.com/auth/admin.directory.group https://www.googleapis.com/auth/admin.directory.group.member', sub='super-admin@yourdomain.com' )
其中super-admin@yourdomain.com是您Google Apps帐户中的超级管理员。