我们正在运行过去10个月一直在使用OAuth2登录Google帐户的网络服务。
我想知道在使用新的增量身份验证向旧令牌添加新范围时是否存在任何已知或潜在问题,例如几个月前被授予的令牌?
我们遇到了一个问题已被我们的两个开发人员验证过,但由于我们在非生产环境中只有很多旧刷新令牌帐户,因此难以重现。请参阅下面的完整故事。我很想知道谷歌的任何人是否这可能是一个错误,或者更可能是我们在这方面做错了。
我们很高兴看到新的增量版本,因为我们即将推出一项涉及访问用户的Google通讯录的新功能,但仅适用于特定用例。
因此,我们在服务器上添加了一个新的OAuth端点,其中包含include_granted_scopes标志,并仅请求Contacts范围:
my $url = URI->new('https://accounts.google.com/o/oauth2/auth');
my $params = {
state => 'code_request_contacts',
response_type => 'code',
client_id => $config->{oauth_client_id},
redirect_uri => $c->host . '/auth/oauth',
scope => 'https://www.google.com/m8/feeds',
access_type => 'offline',
approval_prompt => 'force',
include_granted_scopes => 'true'
};
在我们的本地开发计算机上进行测试时,这非常有效:联系人访问被授予,同样的标记对联系人和现有范围(包括userinfo.profile,userinfo.email和drive.file)都有效。< / p>
但是,当我们开始测试已连接现有访问令牌和Google帐户的预生产服务器时,我们遇到了问题:一旦联系人授权完成,返回的令牌只能用于联系人,但失败的是“403”在用于发出任何Drive API请求时,“权限不足”。
在看到这些错误之后,我们尝试(a)通过帐户权限页面(https://security.google.com/settings/security/permissions)撤消访问权限,(b)退出我们的应用程序,以及(c)再次登录以获取新的令牌基本范围。奇怪的是,此时联系人的增量身份验证将像魅力一样工作,新令牌将所有组合范围都按预期进行。
所以这就是现在的位置 - 我们已经两次看到一个问题,这个问题可能会成为制作过程中的一个障碍,但如果它的行为涉及旧代币,我们就无法可靠地重现。
我们当前的解决方法是让Contacts OAuth请求还包含所有首字母缩写范围。当出现“联系人”弹出窗口时,这会导致更长的警告列表,但它似乎达到了预期的最终结果。
答案 0 :(得分:0)
新代码中是否存在另一个区别,例如,使用与旧标记中使用的client_id不同的client_id?