我很难问这个问题,所以让我向您解释我们半生不熟的OAuth 2.0解决方案:
目前,我们只使用受信任的授权,而是要求输入用户名和密码。如果这些信用证成功通过验证,我们会发出访问令牌和刷新令牌。但是,该响应消息中没有范围信息。 OAuth2规范说,如果请求中提供了作用域,那么它也需要在响应中返回,但前提是已授予的作用域与请求的作用域不同。在任何我们没有为toke分配范围的情况下,只有一个标记表明用户已经过验证。这对我来说不合适,但也许我在想它。
稍后在我们的流程中,客户端将尝试访问受保护的资源,例如将int登录到仅授予某个角色的网站。因此,虽然您可能经过身份验证(您拥有访问令牌),但由于您的角色,您可能无法登录此站点。我们当前验证这一点的方法是将访问令牌发送到资源端点。该端点然后将令牌与您尝试访问我们的验证服务器的uri一起发送,验证您的令牌是否正常以及您的角色(我们通过数据库中的令牌条目查找)允许您访问资源,然后返回200以允许您继续,或返回403表示您无权访问该端点。换句话说,访问令牌没有直接分配给它的任何范围,而只是告诉我们你是谁,然后我们查找你的权限并将其与请求进行比较并说出yay或nay。这对我来说似乎很奇怪。
在我见过的其他实现中,我得到的印象是它本应该像这样工作:
那有什么区别?我的印象是TOKEN包含范围。因此,如果用户A被允许资源A B C D和E,但是请求B C和F,那么该令牌将仅对B和C有利。我们不简单地授予A,因为他被允许这样做;他没有要求A或E,他不被允许F所以令牌不允许他们。这有意义吗?
所以我的问题是这个。基于我对它应该使用的方式的理解,我们当前的实现是错误的吗?我的理解是否正确?
答案 0 :(得分:1)
听起来你的实现并不完全。客户端应用程序代表资源所有者请求资源。当资源服务器收到带有访问令牌的请求时,它应检查(1)令牌是否有效且未过期,(2)请求的资源是否在授予令牌的范围内,以及(3)资源所有者可以访问请求的资源。
对于#1,授权服务器需要跟踪所有令牌及其过期时间。对于#2,授权服务器必须记住每个令牌的范围,并能够将特定资源与范围相关联。资源服务器应该知道如何检查#3。
要回答您的问题“oauth2访问令牌的范围是否绑定到令牌或用户?”,则范围与令牌相关联。令牌是针对特定范围发出的。