【问题标题】:how to validate an access token?如何验证访问令牌?
【发布时间】:2014-05-01 01:45:59
【问题描述】:

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

  1. 打开选项卡 - 浏览到登录页面。如果当前已登录 google,请获取帐户信息。
  2. 打开第二个选项卡 - 退出 google 并登录到其他帐户(或根本不登录)
  3. 返回第一个选项卡。刷新。请注意,退货帐户信息来自第一个帐户。

我意识到这只是与访问令牌相关联。我想知道的是

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

【问题讨论】:

    标签: oauth-2.0


    【解决方案1】:

    浏览器中的每个选项卡都是一个单独的浏览器会话。浏览器不应允许选项卡 B 看到选项卡 A 的 cookie 或会话信息。如果允许,则选项卡 A 中的恶意代码可能会窃取您的银行帐户信息、密码、访问令牌等,因为您的银行帐户在选项卡 B。

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

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

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

    1. 将访问令牌视为不透明的 blob,并跟踪获取访问令牌时返回的过期时间。
    2. 打开访问令牌看看里面有什么。 OAuth2 没有定义访问令牌包含的内容或它的格式。

    一些 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

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 2016-09-04
      • 2022-10-15
      • 2015-07-16
      • 2019-12-18
      • 2021-08-24
      • 2019-11-26
      • 2020-10-27
      • 2019-09-10
      相关资源
      最近更新 更多