具有复杂或细粒度范围的OAuth 2.0

时间:2015-03-24 12:16:54

标签: oauth-2.0 authorization

我目前正在为所有客户(网络和移动设备)开展OAuth2实施。到目前为止,没什么好看的,但是我们希望在范围上有更多的复杂性,这样我们就可以授予对某些对象的部分访问权限,直到单个属性的粒度。

示例客户端获取资源的访问权限,让我们说一个具有所有常用属性的用户对象。客户端具有完全读取权限,但仅允许编辑某些属性,例如密码和用户名,但不是位置和/或生日。

到目前为止,我的想法是,这种粒度是在授权服务器上定义的,只是由资源服务器解释。

基于RFC,范围是基于字符串的逗号分隔值,因此是一个普通列表(http://tools.ietf.org/html/rfc6749#page-23

  

scope参数的值表示为space-
的列表   分隔的,区分大小写的字符串。字符串由
定义   授权服务器。如果值包含多个以空格分隔的值   字符串,它们的顺序无关紧要,每个字符串都加一个
  附加访问范围到请求的范围。

 scope       = scope-token *( SP scope-token )
 scope-token = 1*( %x21 / %x23-5B / %x5D-7E )

所以我的第一个假设是将json作为范围可能不起作用,所以我考虑引入可能变得复杂的命名空间,例如: (范围:user-write-full-read- 属性列表或类似的东西)。

有没有最好的做法,我在RFC中遗漏了什么或者我是否完全滥用OAuth?

2 个答案:

答案 0 :(得分:7)

你在这里滥用OAuth。范围用于定义基本权限,但不包括细粒度访问权限,更不用说授权策略了。

您应该使用XACML。在XACML中,您还拥有授权服务器(策略决策点或pdp)的概念。它使用策略配置。它位于基础设施中。它在运行时由保护您的api / app的策略执行点进行查询。

查看developers.axiomatics.com了解详情(免责声明:我为Axiomatics工作)

答案 1 :(得分:6)

您可能需要考虑UMA协议。 UMA RPT令牌由客户端呈现给资源服务器。 RPT令牌由具有特定范围的授权服务器(AS)颁发。在AS上,范围映射到策略,例如谁可以使用哪些客户端,网络,所需的加密,时间等来获取API。这些策略可以用代码或更结构化的策略语法表示,如XACML,例如大卫建议如上。

如果您想了解有关UMA的更多信息,我将从此图开始:   UMA Overview

在这种情况下,有两个OAuth2客户端:资源服务器(具有API的东西)和请求方(移动应用程序或网站)。 PAT和AAT通常是OpenID Connect客户端令牌。 UMA Core规范称“OAuth2”,但加密客户端注册的唯一OAuth2配置文件是OpenID Connect,因此它是隐含的。

资源所有者是制定政策的人。这些策略可以是算法的,也可能需要资源所有者的操作。有关OpenID Connect的更多信息,请参阅

OpenID Connect Website

有关UMA的更多信息,请参阅:

UMA Website

如果您正在寻找免费的开源OAuth2授权服务器,您应该查看Gluu服务器,它是一个OpenID Connect Provider和一个用于FOSS Access Management的UMA授权服务器