【发布时间】:2016-08-12 07:25:24
【问题描述】:
我已经在我的个人 Google 帐户上成功地试验了 Gmail API。为简单起见,consider the Python QuickStart example(工作正常)。问题是我无法使用相同的方法访问我的工作 Gmail。
如果我只是在代码中将我的个人电子邮件地址替换为我的工作电子邮件地址......
results = service.users().labels().list(userId='myworkemail%40myworkdomain.com').execute()
...我收到标准委派被拒绝错误:
<HttpError 403 when requesting https://www.googleapis.com/gmail/v1/users/myworkemail%40myworkdomain.com/labels?alt=json returned "Delegation denied for mypersonalemail@gmail.com">
根据之前 StackExchange 问题的一些提示,我尝试按照说明制作service account and an authorised API call,并使用我个人帐户的开发者控制台中的服务帐户...
credentials = ServiceAccountCredentials.from_json_keyfile_name('service_account.json', scopes=SCOPES)
delegated_credentials = credentials.create_delegated('myworkemail%40myworkdomain.com')
http_auth = delegated_credentials.authorize(httplib2.Http())
service = discovery.build('gmail', 'v1', http=http_auth)
results = service.users().labels().list(userId='myworkemail%40myworkdomain.com').execute()
...但是得到一个不同的错误:
File "qs.py", line 70, in main
results = service.users().labels().list(userId='myworkemail%40myworkdomain.com').execute()
File "/usr/local/lib/python2.7/site-packages/oauth2client/util.py", line 135, in positional_wrapper
return wrapped(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/googleapiclient/http.py", line 755, in execute
method=str(self.method), body=self.body, headers=self.headers)
File "/usr/local/lib/python2.7/site-packages/googleapiclient/http.py", line 93, in _retry_request
resp, content = http.request(uri, method, *args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 597, in new_request
self._refresh(request_orig)
File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 863, in _refresh
self._do_refresh_request(http_request)
File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 932, in _do_refresh_request
raise HttpAccessTokenRefreshError(error_msg, status=resp.status)
oauth2client.client.HttpAccessTokenRefreshError: unauthorized_client: Unauthorized client or scope in request.
还有一点需要注意:Gmail API 参考页面上的the API explorer examples 可以正常使用我的工作帐户,并在“我的帐户”中显示为授权。我想要的只是相同的行为:任何 Gmail 帐户(个人或工作)都可以在明确授权后通过相同的代码访问。
【问题讨论】: