【问题标题】:Is the scope of an oauth2 access token bound to the token or the user?oauth2 访问令牌的范围是绑定到令牌还是用户?
【发布时间】:2013-07-12 23:20:39
【问题描述】:

我很难问这个问题,所以让我向您解释一下我们半生不熟的 OAuth 2.0 解决方案:

目前,我们仅使用受信任的授权,而是要求提供用户名和密码。如果这些凭据成功通过身份验证,我们将发出访问令牌和刷新令牌。但是,该响应消息中没有范围信息。 OAuth2 规范说,如果在请求中提供了范围,那么它也需要在响应中返回,但前提是授予的范围与请求的范围不同。在任何情况下,我们都没有为令牌分配范围,只有一个表示用户已通过验证的令牌。这对我来说感觉不对,但也许我想多了。

稍后在我们的流程中,客户端将尝试访问受保护的资源,例如登录到仅授予特定角色的网站。因此,虽然您可能已通过身份验证(您拥有访问令牌),但由于您的角色,您可能无法登录此站点。我们当前验证这一点的方式是将访问令牌发送到资源端点。然后,该端点将令牌与您尝试访问的 uri 一起发送到我们的验证服务器,该服务器验证您的令牌是好的,并且您的角色(我们通过数据库中的令牌条目查找)允许您访问资源,然后返回 200 以允许您继续或 403 表示您无权访问该端点。所以换句话说,访问令牌没有直接分配给它的任何范围,它只是告诉我们你是谁,然后我们查找你的权限并将其与请求进行比较,然后说是或否。这对我来说似乎很奇怪。

在我见过的其他实现中,我的印象是它实际上应该像这样工作:

  • 如果您的凭据成功验证,您将请求访问令牌 然后生成一个令牌。
  • 然后,身份验证服务器查看您请求的范围,然后在数据库中生成一个令牌以及您的批准部分 请求的范围(部分或完整)。相反,如果您要求 a b c 和 d,但只有 b 和 d 获得批准,然后令牌存储在我们的 数据库将反映只允许使用 b 和 c 令牌。
  • 令牌字符串连同批准的范围一起发送回客户端。
  • 在受保护的资源请求期间,我们在数据库中查找令牌并将请求的资源与范围内的资源进行比较 输入提供的令牌,然后返回 yay 或 nay,而不是 查找用户权限。

那么有什么区别呢?我的印象是 TOKEN 包含范围。因此,如果用户 A 被允许资源 A B C D 和 E,但请求 B C 和 F,那么令牌将只对 B 和 C 有用。我们不简单地授予 A,因为他被允许这样做;他没有要求 A D 或 E 并且不允许他 F 所以令牌不允许他们。这有意义吗?

所以我的问题是这样的。根据我对它应该使用的方式的理解,我们当前的实现是否错误?我的理解正确吗?

【问题讨论】:

    标签: .net oauth-2.0


    【解决方案1】:

    听起来您的实现还不够完整。客户端应用代表资源所有者请求资源。当资源服务器接收到带有访问令牌的请求时,它应该检查 (1) 令牌有效且未过期,(2) 请求的资源在令牌被授予的范围内,以及 (3) 资源所有者可以访问请求的资源。

    对于#1,授权服务器将需要跟踪所有令牌以及它们何时到期。对于 #2,授权服务器必须记住每个令牌的范围,并能够将特定资源与范围相关联。资源服务器应该知道如何检查#3。

    要回答您的问题“oauth2 访问令牌的范围是绑定到令牌还是用户?”,范围与令牌相关联。令牌是为特定范围颁发的。

    【讨论】:

      猜你喜欢
      • 2016-04-24
      • 2020-09-16
      • 2020-05-25
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 2018-07-17
      • 2017-08-31
      • 2016-11-08
      相关资源
      最近更新 更多