之前我已经成功插入了这个程序的片刻,并试图找出API目前是否已损坏或我犯了错误。
我已经获得了一个有效的access_token,其中包含request_visible_actions = http://schema.org/AddAction,如下面的auth阶段的部分网址以及plus.login范围所示:
https://accounts.google.com/o/oauth2/auth?access_type=offline&request_visible_actions=http%3A%2F%2Fschema.org%2FAddAction&
请求代码:
import requests
import json
moment = {"type":"http://schema.org/AddAction",
"object": {"id": "object-id-1",
"type":"http://schema.org/AddAction",
"name": "The Google+ Platform",
"description": "A page that describes just how awesome Google+ is!",
"image": "https://developers.google.com/+/plugins/snippet/examples/thing.png"}}
url ='https://www.googleapis.com/plus/v1/people/me/moments/vault'
params = {'access_token': 'MY_VALID_ACCESS_TOKEN'}
r = requests.request("POST",url=url, params=params, json=moment, headers=headers)
print r.url
print r.json()
结果:
https://www.googleapis.com/plus/v1/people/me/moments/vault?access_token=MY_ACCESS_TOKEN
{u'error': {u'code': 401,
u'message':
u'Unauthorized',
u'errors': [{u'domain': u'global', u'message': u'Unauthorized', u'reason': u'unauthorized'}]}}
我尝试使用tokeninfo端点验证request_visible_actions是否存在,但是它没有列在那里。
确认授予范围:
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/plus.login',
'https://www.googleapis.com/auth/plus.profile.emails.read',
'https://www.googleapis.com/auth/plus.moments.write',
'https://www.googleapis.com/auth/plus.me',
'https://www.googleapis.com/auth/plus.profile.agerange.read',
'https://www.googleapis.com/auth/plus.profile.language.read',
'https://www.googleapis.com/auth/plus.circles.members.read'
我能够获得具有相同令牌的时刻/金库,因此我知道它是有效的。
这里有什么想法吗?
答案 0 :(得分:0)
只要在用户与您的应用建立第一个连接并且您尝试发布的应用活动类型包含在内时,问题中显示的过程确实可以正常工作。如果您想在初始身份验证后更新列表或添加moment.insert权限,则用户必须先断开该应用与其Google + settings的连接并重新连接。
这似乎是谷歌实施request_visible_actions=space separated list of app activity types
和增量授权策略的一个错误。
request_visible_actions似乎只在初始授权期间被接受,并在此之后被忽略。这使得无法逐步添加此参数。
此外,在调用tokeninfo端点时,request_visible_actions不可用,这使我认为request_visible_actions在某种程度上与令牌身份验证无关,而只是在实例化时分配给用户应用连接的属性。