1

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

这是预期的行为吗?如果是这样,我应该事先撤销旧令牌吗?我认为通过/revoke行动是可能的。服务器端移除 Oauth 令牌

更新:相关要点。这是使用 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 不更新登录时的令牌数据。所以现在它在每次登录后更新访问令牌和刷新令牌。(我仍然不明白为什么每个客户端-用户组合需要多个令牌。)

4

2 回答 2

3

也许您在发布一个新的之前没有为您以前经过身份验证的客户端撤销令牌?

您可以使用以下 JavaScript 演示测试升级范围后撤销是否有效:

  1. 授权使用此页面。(请勿断开授权客户端)
  2. 使用此页面升级您的授权,该页面以日历范围为例,并且具有相同的客户端。
  3. 现在,如果您查看您发布的授权子令牌页面,您会注意到每个客户端对应两个条目。
  4. 通过刷新并单击断开按钮从第二页撤消。
  5. 返回您颁发的授权子令牌页面。两套已发行的授权子代币现在都消失了。

我对此进行了进一步测试并对项目进行了更改,添加了驱动范围。将范围添加到 API 客户端项目并授权其他客户端后,撤销任何令牌将撤销该项目中的所有授权客户端。

如果您要从另一个客户端升级现有的授权凭据,则应在升级现有令牌时撤销旧令牌,以避免出现无法按预期工作的凭据实例。

但是,正如您从演示中看到的那样,从同一个 API 客户端撤销令牌将撤销额外发布的身份验证令牌,因此您无需担心撤销以前发布的令牌。

撤销旧令牌(例如,您的带有 userinfo.email 范围的刷新令牌)的最佳理由是,您以后可能会尝试使用该令牌对新范围进行 API 调用,即使该令牌尚未升级为包含额外的范围,并可能引入奇怪的错误。

最后一点:希望用户会更习惯于从Google+ 上的“管理应用”页面查看他们颁发的授权令牌,这可以更好地对连接的应用程序实例进行重复数据删除。

于 2013-03-15T15:11:45.680 回答
2

这听起来不像是正确的行为。您能否从稍后的调用中获取访问令牌并将其插入https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=TOKEN_GOES_HERE - 这将显示它被授权的范围。

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

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

于 2013-03-15T08:24:51.700 回答