Oauth 2.0 使用Google OAuth更改权限

Oauth 2.0 使用Google OAuth更改权限,oauth-2.0,google-oauth,Oauth 2.0,Google Oauth,我正在升级帐户以使用新的plus.loginscope,因此我测试了添加一个仅具有userinfo作用域的用户,然后使用添加的plus.login重新登录。结果是在授权访问面板中引入了一个新条目,从后一个调用返回的访问令牌只有userinfo权限。我通过做一个经过验证的令牌调用以及尝试列出人员来测试这一点 这是预期的行为吗?如果是,我是否应该提前撤销旧令牌?我认为通过/revoke操作可以实现这一点 更新:。这是使用Ruby的Omniauth gem。我不确定用户如何在授权访问面板中看到超过1个

我正在升级帐户以使用新的
plus.login
scope,因此我测试了添加一个仅具有
userinfo
作用域的用户,然后使用添加的
plus.login
重新登录。结果是在授权访问面板中引入了一个新条目,从后一个调用返回的访问令牌只有
userinfo
权限。我通过做一个经过验证的令牌调用以及尝试列出人员来测试这一点

这是预期的行为吗?如果是,我是否应该提前撤销旧令牌?我认为通过
/revoke
操作可以实现这一点

更新:。这是使用Ruby的Omniauth gem。我不确定用户如何在授权访问面板中看到超过1个条目,但在这种情况下,我可以看到2个条目。在昨天测试了各种场景之后,我有大约6个条目都属于同一个应用程序!请注意,我在任何时候都没有更改客户机ID,实际上只有一个客户机ID

我希望我描述的情况可以被其他人复制;只需对Google端URL进行黑客攻击,删除plus.login作用域,然后再次登录,同时保持URL不变

更新(2):我还发现:“您不应该将userinfo.profile或plus.me与此作用域结合使用,因为它们隐式包含,会为您的用户创建一个令人困惑的权限对话框。”事实上,这不仅仅是一个UX权限问题;看起来Google实际上不会针对用户存储“plus.me”范围,因此这意味着即使用户已经授予了权限,它也会始终显示OAuth权限对话框(我认为这是因为它会进行简单的平等性检查,并通知请求plus.me,但不会针对用户存储)


更新(3):关于使用错误登录的错误是由我的代码在没有更新登录上的令牌数据的情况下执行类似user.login | | user.signup的操作引起的。因此,现在它在每次登录后更新访问令牌和刷新令牌。(我仍然不明白为什么每个客户机用户组合需要有多个令牌。)

这听起来不是正确的行为。您能否从后面的调用中获取访问令牌并将其插入-这将显示其授权的作用域

您也在哪个平台上实施?如果你有一个片段,可能会有所帮助


更新:在之前验证后尝试添加plus.login,我得到了一个新的同意对话,所以在那里一切看起来都很顺利。可能是特定于客户的问题?

这听起来不像是正确的行为。您能否从后面的调用中获取访问令牌并将其插入-这将显示其授权的作用域

您也在哪个平台上实施?如果你有一个片段,可能会有所帮助


更新:在之前验证后尝试添加plus.login,我得到了一个新的同意对话,所以在那里一切看起来都很顺利。可能是特定于客户端的问题?

可能在发出新的令牌之前,您没有撤销先前已验证客户端的令牌

您可以通过以下JavaScript演示测试在升级作用域后撤销的效果:

  • 授权使用。(不要断开授权客户端的连接)
  • 例如,升级具有相同客户端的授权范围
  • 现在,如果您查看,您将注意到有两个条目对应于每个客户机
  • 通过刷新并单击断开连接按钮从第二页撤消
  • 返回。两组已发布的授权子项现在都已消失
  • 我对此进行了进一步测试,并对项目进行了更改,添加了驱动器范围。将作用域添加到API客户机项目并授权其他客户机后,撤销任何令牌都将从该项目中撤销所有授权客户机

    如果您正在从其他客户端升级现有授权凭据,则应在升级现有令牌时撤销旧令牌,以避免出现无法正常工作的凭据实例

    但是,正如您在演示中看到的,从同一API客户机撤销令牌将撤销额外颁发的身份验证令牌,因此您不必担心撤销以前颁发的令牌

    撤销旧令牌(例如,您在userinfo.email作用域中的刷新令牌)的最佳原因是,您可能稍后尝试使用该令牌为新作用域进行API调用,即使该令牌尚未升级到包含其他作用域,并且可能会引入奇怪的bug


    最后一点注意事项:希望用户能够更习惯于查看他们从中发布的授权令牌,这样可以更好地消除已连接应用程序的重复实例。

    在发布新的令牌之前,您可能没有撤销先前已验证客户端的令牌

    您可以通过以下JavaScript演示测试在升级作用域后撤销的效果:

  • 授权使用。(不要断开授权客户端的连接)
  • 例如,升级具有相同客户端的授权范围
  • 现在,如果您查看,您将注意到有两个条目对应于每个客户机
  • 通过刷新并单击断开连接按钮从第二页撤消
  • 返回。两组已发布的授权子项现在都已消失
  • 我对此进行了进一步测试,并对项目进行了更改,添加了驱动器范围。将作用域添加到API客户机项目并授权其他客户机后,撤销任何令牌都将从该项目中撤销所有授权客户机

    如果您正在从其他客户端升级现有授权凭据,则应在升级现有令牌时撤销旧令牌,以避免出现无法正常工作的凭据实例

    但是,