Oauth 2.0 Oauth2、作用域和用户角色

Oauth 2.0 Oauth2、作用域和用户角色,oauth-2.0,Oauth 2.0,我在这里从概念上提出一个问题,因为我试图理解基于OAuth2的系统中作用域和用户角色之间的关系 在实现API时,我希望通过使用资源上的作用域来限制对特定资源的访问。我理解使用访问令牌来请求资源,我相信我的理解是正确的,因为您在请求访问令牌时指定了您的范围 我不完全确定的是,基于经过身份验证的用户所处的特定角色,作用域的限制将如何工作。假设Bob是管理员,Sue是普通用户。我们有一些受is_管理范围保护的资源。阻止Sue请求(和接收)的是她的访问令牌中的\u admin作用域 我认为应该发生以下情

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

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

我不完全确定的是,基于经过身份验证的用户所处的特定角色,作用域的限制将如何工作。假设Bob是管理员,Sue是普通用户。我们有一些受is_管理范围保护的资源。阻止Sue请求(和接收)的是她的访问令牌中的\u admin作用域

我认为应该发生以下情况:

  • 鲍勃证实了这一点
  • Bob的身份验证完成后,将查找他的角色。他的“管理员”角色附带了“is_admin”范围
  • Bob要求提供一个访问令牌,其中包含从其各个角色收集的所有作用域
  • Bob会自动获得访问令牌的那些作用域
是否由我的呼叫应用程序强制只发送请求Bobs需要的范围?或者我在示波器方面有什么遗漏

有人能给我举一些简单的例子吗?

在中,有以下角色:

  • 资源所有者-通常是某个人
  • 身份验证提供程序-OAuth2服务器
  • 资源服务器-需要访问令牌并验证其作用域的API
  • 客户端应用程序-请求具有某些作用域的访问令牌的应用程序
要理解OAuth2,有必要将其视为从资源所有者到客户机应用程序的访问权限委托协议。因此,主要用例是:客户机应用程序希望访问资源服务器。为了做到这一点,客户端应用程序需要一个由身份验证提供程序颁发并由资源所有者授权的访问令牌(由身份验证提供程序进行身份验证)

在您的描述中,缺少客户端应用程序。假设它是API的前端应用程序。它需要具有作用域
管理用户作用域
常规用户作用域
的访问令牌。因此,它将用户(资源所有者)重定向到身份验证提供程序,同时请求两个作用域

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

客户端应用程序接收重定向URI中具有作用域的访问令牌(或授权)。如果授予的作用域与请求的作用域不同,则身份验证提供程序会将授予的作用域列表(
scope
URL参数)与访问令牌一起发送,以便客户端应用程序知道可以使用访问令牌执行哪些操作


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

我想我明白了。用户可以访问a、b、c、d,但他可能仅在进行身份验证时请求访问a、b、c(例如,通过身份验证代码请求)。身份验证提供程序只会响应用户的请求,而不会响应用户的整个设置。如果Auth提供者发现用户对所请求的范围没有权限(在我的情况下,不是在特定的角色中),它还可以减少返回的内容。一旦通过身份验证,用户只会获得附加了请求(可能减少)作用域的访问代码。这是一个正确的摘要吗?假设从身份验证提供程序返回到令牌中的客户端应用程序的授权范围以某种方式手动更改(MITM或其他方式),并添加一个类似于“管理员用户范围”的范围。当客户端应用程序尝试使用此令牌从资源服务器获取资源时会发生什么情况,该资源服务器仅为管理员提供保护?@ilans除非MITM操作员知道用于生成访问令牌的私钥,否则他们无法处理访问令牌,否则访问令牌将无效,不仅管理员用户范围不会被接受,令牌本身也会被拒绝,有望导致401未经授权的异常。