oauth1 3lo到oauth2令牌迁移的作用域验证错误



我在oauth1到oauth2令牌迁移时出错:请求的作用域以前未得到批准

Scopeshttps://docs.google.com/feeds/
https://电子表格.google.com/feeds/
https://docs.googleusercontent.com/

被授权用于oauth1令牌,这对于GAMv1到GAMv2的迁移已经足够了(目标OAuth2作用域为https://www.googleapis.com/auth/drive)。

我尝试使用中描述的apihttps://developers.google.com/accounts/docs/OAuth_ref

这是我请求的例子:

POST/o/oauth2/token HTTP/1.1授权:OAuth realm=",OAuth_signature="ZFA3Cx8Gxyz4YRmELO6uu2urOsM%3D",oaauth_nonce="618148508599347",oaAuth_signature_method="HMAC-SHA1",oaout_consumer_key="XXXXXX.apps.googleusercontent.com",oath_token="YYYY",oaut_timestamp="1386762587"内容类型:application/x-www-form-urlencoded内容长度:248主持人:accounts.google.com连接:保持活动用户代理:Apache HttpClient/4.1.1(java 1.5)

grant_type=urn%3ietf%3params%3oauth%3授予类型%3迁移%3oauth1&scope=https%3A%2F%2Fww.googleapis.com%2Fat%2Fdrive&client_id=TTTTT.apps.googleusercontent.com&client_secret=ZZZZZZZZZ

此外,在我看来,还有一个重要问题:是否可以转换以下作用域:https://www.googleapis.com/auth/userinfo.emailhttps://www.googleapis.com/auth/userinfo.profile

如果oauth1令牌仅授权给https://docs.google.com/feed/
我之所以这么问,是因为例如,在谷歌应用程序市场配置中,这些作用域是默认的,无法删除。因此,在令牌迁移之后获得这些作用域将是非常棒的。

在迁移过程中无法更改已批准作用域的列表。例外情况是需要缩小范围。因此,如果OAuth1令牌对作用域A、B、C有效,则可以通过在迁移请求中包含scope参数,将其"缩小"为仅包含的OAuth2令牌,其中包括A、B或C(或它们的任何组合)。如果scope参数不存在,则迁移的OAuth2令牌将包含与原始OAuth1令牌相同的作用域。

另一方面,如果请求包含的作用域未包含在OAuth1令牌的已批准作用域列表中,则请求将失败——您的迁移请求就是这样(因为您的OAuth1标记中不包含www.googleapis.com/auth/drive作用域)。

希望能有所帮助!

OAuth1到OAuth2的迁移不会影响应用程序已被授权的作用域集。大多数作用域不是特定于OAuth1或OAuth2。范围指示用户(在本例中为公司/小企业IT管理员)已授予对您的应用程序的访问权限的API/数据集。唯一的例外是,某些API只能接受OAuth2(因此,有些作用域仅在OAuth2令牌中真正有用)。

换句话说,如果您想将您的授权从OAuth1迁移到OAuth2,则相同的范围集将被迁移。如果你需要访问一个新的API(在你的情况下,你似乎正在寻找一个新范围来调用Google Drive API),你需要OAuth1令牌已经包括成功迁移的驱动器范围。

最新更新