Oauth 2.0 具有复杂或细粒度作用域的OAuth 2.0

Oauth 2.0 具有复杂或细粒度作用域的OAuth 2.0,oauth-2.0,authorization,Oauth 2.0,Authorization,我目前正在为所有客户端(web和移动)开发OAuth2实现。到目前为止还没有什么特别之处,但我们希望范围更复杂,这样我们就可以授予对某些对象的部分访问权限,直到单个属性的粒度 示例:客户端获得对资源的访问权,比如说一个具有所有公共属性的用户对象。客户端具有完全读取权限,但只允许编辑某些属性,例如密码和用户名,而不允许编辑位置和/或生日 到目前为止,我的想法是,这种粒度是在授权服务器上定义的,只是由资源服务器进行解释 根据RFC,范围是一个基于字符串的逗号分隔值,因此是一个普通列表() scope

我目前正在为所有客户端(web和移动)开发OAuth2实现。到目前为止还没有什么特别之处,但我们希望范围更复杂,这样我们就可以授予对某些对象的部分访问权限,直到单个属性的粒度

示例:客户端获得对资源的访问权,比如说一个具有所有公共属性的用户对象。客户端具有完全读取权限,但只允许编辑某些属性,例如密码和用户名,而不允许编辑位置和/或生日

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

根据RFC,范围是一个基于字符串的逗号分隔值,因此是一个普通列表()

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

 scope       = scope-token *( SP scope-token )
 scope-token = 1*( %x21 / %x23-5B / %x5D-7E )
因此,我的第一个假设是提供json作为作用域可能不起作用,因此我考虑引入可能变得复杂的名称空间,例如(作用域:user write-full-read-list-of-properties或类似内容)


有没有最佳实践,我是在RFC中遗漏了什么,还是完全滥用了OAuth?

您在这里滥用了OAuth。作用域用于定义基本权限,而不是细粒度的访问权限,更不用说授权策略了

您应该使用XACML来实现这一点。在XACML中,您还具有授权服务器(策略决策点或pdp)的概念。它是使用策略配置的。它位于基础设施中。它在运行时由保护api/应用程序的策略实施点查询


检查细节(免责声明:我为公理学工作)< /P> < P>你可能想考虑UMA协议。UMA RPT令牌由客户端呈现给资源服务器。RPT令牌由具有特定作用域的授权服务器(AS)颁发。在AS上,作用域映射到策略,例如谁可以获得使用哪种API的客户端、网络、所需加密、时间等。这些策略可以用代码或更结构化的策略语法(如上面David建议的XACML)表示

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

在本例中,有两个OAuth2客户端:资源服务器(使用API的东西)和请求方(移动应用程序或网站)。 PAT和AAT通常是OpenID连接客户端令牌。UMA核心规范称为“OAuth2”,但OAuth2用于加密客户端注册的唯一配置文件是OpenID Connect,因此它是隐式的

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

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


如果您正在寻找一个免费的开源OAuth2授权服务器,您应该看看Gluu服务器,它是一个OpenID连接提供程序和一个UMA授权服务器,用于

True,我也是XACML标准的主要贡献者,与此更相关请记住,OAuth是一个框架。它定义了一个通用词汇表——包括范围的概念。在较高级别上,作用域定义了客户端的访问范围。OAuth授权服务器如何确定是否向客户端授予特定的作用域取决于所使用的OAuth配置文件。我不同意大卫的观点。。。您不必使用XACML。它是许多选项中的一个,对于某些用例非常有用——特别是当您需要标准的结构化策略语法时。我不太确定。我认为UMA并不是为了实现细粒度授权而设计的,相反,XACML是专门为此而设计的。即使是Gluu服务器的主要程序员(Michael Schwartz)在他的书《保护外围》(Securing the Perfect)中也表示UMA不能实现细粒度的访问控制。这并不意味着策略集中没有用处。注意,当我说“细粒度”时,我指的是用户可以在页面中看到的内容。例如,页面可以根据用户的角色显示不同的内容。想想一个拍卖网站,如果你是卖家,你可能会看到某些信息。但如果你是买家,你可能会看到不同的观点。这就是我所说的细粒度访问。应用程序控制视图是非常有效的。