如何验证访问令牌?

时间:2014-04-30 17:26:41

标签: oauth-2.0

我正在努力使用oauth 2.0来替换现有的login / pw系统。除了一个问题外,效果很好:

  1. 打开标签页 - 浏览到登录页面。如果当前登录谷歌,请获取帐户信息。
  2. 打开第二个标签 - 退出google并登录到其他帐户(或根本不登录)
  3. 返回第一个标签。刷新。请注意,退货帐户信息来自第一个帐户。
  4. 我意识到这只是与访问令牌绑定。我想知道的是

    1. 如何让始终从当前登录的帐户中获取访问令牌 - 或 -
    2. 如何检查访问令牌的真实性或状态(或等效性)

1 个答案:

答案 0 :(得分:3)

浏览器中的每个标签都是单独的浏览器会话。浏览器不应允许选项卡A cookie或会话信息对选项卡B可见。如果确实如此,则选项卡A中的恶意代码可能会盗取您的银行帐户信息,密码,访问令牌等,因为您的银行帐户已打开表B。

因此,即使您在另一个标签中的其他帐户下登录后,示例中的第一个标签仍然显示第一次登录的帐户信息这一事实是预期的行为,如果设计的话,如果相应的URL标签位于不同的域上。

如果选项卡正在查看相同的URL或同一个域,则刷新第一个选项卡以反映您在第二个选项卡中所做的事情应该是刷新会话状态和重新获取Cookie的问题。这是Web应用程序代码的责任,而不是浏览器IMO。

要检查oauth2访问令牌是否有效,您有两种选择:

  1. 将访问令牌视为不透明的blob,并跟踪获取访问令牌时返回的到期时间。
  2. 破解访问令牌,看看里面是什么。 OAuth2未定义访问令牌包含的内容或格式的方式。
  3. 某些OAuth2令牌服务器只返回GUID或其他不透明的标识符,该标识符不包含客户端的其他信息。

    但是,许多OAuth2令牌服务器正在将访问令牌实现为JWT(JSON Web令牌)。在访问令牌中携带客户端可见数据提供了一种支持客户端应用程序的基于声明的细粒度授权机会的方法。通常签署JWT以确保真实性和保真度。 JWT可以加密以保护隐私,但这种情况非常罕见。

    如果OAuth令牌服务器以JWT格式返回访问令牌,那么您可以解码JWT以从“exp”中提取令牌到期时间。内部声称。

    某些OAuth2令牌服务器还提供API以将访问令牌验证为Web请求。这对于分发不透明访问令牌的系统来说基本上是必需的。 Google的OAuth实施提供了访问令牌验证功能:https://developers.google.com/accounts/docs/OAuth2UserAgent#validatetoken