Oauth2,范围和用户角色

Jas*_*son 14 oauth-2.0

我在这里概念性地提出一个问题,因为我试图理解基于OAuth2的系统中作用域和用户角色之间的关系.

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

什么我不完全肯定的是如何范围的限制,将工作基础上,一个身份验证的用户是在特定的角色.让我们假设Bob是一个管理和苏是一个普通用户.我们有一些受is_admin范围保护的资源.什么阻止Sue 在她的访问令牌中请求(和接收)is_admin范围?

应该发生的事情如下:

  • 鲍勃认证.
  • 在身份验证完成后,将查找Bob的角色.他的"admin"角色附加了"is_admin"范围.
  • Bob要求提供一个访问令牌,其中包含从各种角色收集的所有范围
  • Bob会自动为其访问令牌提供这些范围

是否由我的呼叫应用程序强制执行仅发送询问Bobs需要的范围?或者是否有关于范围的遗漏?

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

Ján*_*aša 21

OAuth2中,有以下角色:

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

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

在您的描述中,缺少客户端应用程序.我们假设它是您API的前端应用程序.它需要具有范围admin-user-scope或的访问令牌regular-user-scope.因此,它将用户(资源所有者)重定向到Auth提供程序,请求两个范围.

Auth提供程序对用户进行身份验证,并要求他/她同意向客户端应用程序授予一些请求的作用域.Auth提供程序可能会删除一些范围 - 例如admin-user-scope非管理员.Auth提供商可以为用户提供删除某些范围的可能性.

客户端应用程序在重定向URI中接收具有范围的访问令牌(或授权).如果授予的作用域与请求的作用域不同,则Auth提供程序会发送已授予作用域的列表(scopeURL参数)以及访问令牌,以便客​​户端应用程序知道它可以使用访问令牌执行的操作.

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

  • @ilans 除非 MITM 操作员知道用于生成访问令牌的私钥,否则他们无法在访问令牌无效的情况下修改访问令牌 - 换句话说,不仅管理员用户范围不会被接受,令牌本身也会被接受被拒绝,希望导致 401-未经授权的异常。 (2认同)