oauth2访问令牌的范围是绑定到令牌还是用户?

时间:2013-07-11 20:05:36

标签: .net oauth-2.0

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

目前,我们只使用受信任的授权,而是要求输入用户名和密码。如果这些信用证成功通过验证,我们会发出访问令牌和刷新令牌。但是,该响应消息中没有范围信息。 OAuth2规范说,如果请求中提供了作用域,那么它也需要在响应中返回,但前提是已授予的作用域与请求的作用域不同。在任何我们没有为toke分配范围的情况下,只有一个标记表明用户已经过验证。这对我来说不合适,但也许我在想它。

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

要回答您的问题“oauth2访问令牌的范围是否绑定到令牌或用户?”,则范围与令牌相关联。令牌是针对特定范围发出的。