Oauth2,范围和用户角色

问题描述 投票:0回答:2

我在这里从概念上问一个问题,因为我试图理解基于 OAuth2 的系统中范围和用户角色之间的关系。

在实现 API 时,我想通过使用资源范围来限制对特定资源的访问。我了解使用访问令牌来请求资源,并且我相信我的理解是正确的,因为您在请求访问令牌时指定了范围。

我不完全确定的是,范围限制如何根据经过身份验证的用户所处的特定角色发挥作用。让我们假设 Bob 是管理员,Sue 是普通用户。我们有一些资源受到 is_admin 范围的保护。是什么阻止 Sue 请求(和接收)访问令牌中的 is_admin 范围?

应该发生的事情如下:

  • Bob 进行身份验证。
  • Bob 的身份验证完成后会查找他的角色。他的“admin”角色附加了“is_admin”范围。
  • Bob 请求访问令牌,其中包含从他的各种角色收集的所有范围
  • Bob 会自动获得其访问令牌的这些范围

我的调用应用程序是否强制只发送请求 Bob 所需范围的信息?或者我在范围方面缺少什么?

有人可以用一些简单的例子来启发我吗?

oauth-2.0
2个回答
55
投票

OAuth2中,有以下角色:

  • 资源所有者 - 通常是某个人
  • 身份验证提供者 - OAuth2 服务器
  • 资源服务器 - 需要访问令牌并验证其范围的 API
  • 客户端应用程序 - 请求具有某些范围的访问令牌的应用程序。

要理解 OAuth2,有必要将其视为从资源所有者到客户端应用程序的访问权限委派协议。所以主要用例是:客户端应用程序想要访问资源服务器。为此,客户端应用程序需要由身份验证提供者颁发并由资源所有者授权的访问令牌(由身份验证提供者进行身份验证)。

在您的描述中,缺少客户端应用程序。我们假设它是您的 API 的前端应用程序。它需要一个范围为

admin-user-scope
regular-user-scope
的访问令牌。因此它将用户(资源所有者)重定向到身份验证提供者,请求两个范围。

身份验证提供者对用户进行身份验证,并请求他/她同意向客户端应用程序授予某些请求的范围。身份验证提供者可能会删除一些范围 - 例如非管理员的

admin-user-scope
。身份验证提供者也可以为用户提供删除某些范围的可能性。

客户端应用程序接收具有重定向 URI 范围的访问令牌(或授权)。如果授予的范围与请求的范围不同,则身份验证提供程序会发送授予范围的列表(

scope
URL 参数)以及访问令牌,以便客户端应用程序知道它可以使用访问令牌执行哪些操作。

然后客户端应用程序可以访问资源服务器,并且资源服务器确保提供的访问令牌包含所需的范围。资源服务器使用 OAuth2 内省端点来验证令牌并获取其范围列表。


0
投票

虽然 Ján Halaša 的回答很好地概括了 OAuth,但我认为它没有充分回答问题。事实上,OAuth 范围只能用于用户将访问权限委托给客户端。范围不应决定允许用户做什么。

让资源服务器盲目信任“is_admin”这样的范围是一个安全问题,因为正如您所说,恶意用户可以修改客户端来为他们请求该范围。

授权服务器在技术上可以根据用户的角色过滤范围(这可以解决该问题),但通常情况并非如此。

相关博客文章(不是我的):https://auth0.com/blog/on-the-nature-of-oauth2-scopes/

© www.soinside.com 2019 - 2024. All rights reserved.