具有复杂或细粒度范围的 OAuth 2.0
OAuth 2.0 with complex or fine-grained scopes
我目前正在为所有客户端(Web 和移动设备)开发 OAuth2 实现。到目前为止还没有什么特别的,但我们希望在范围内有更多的复杂性,这样我们就可以授予对某些对象的部分访问权限,直到单个 属性.
的粒度
示例:客户端获得对资源的访问权限,比方说具有所有公共属性的用户对象。客户端具有完全读取权限,但只允许编辑某些属性,例如密码和用户名,但不是位置 and/or 生日。
到目前为止,我的想法是,这种粒度是在授权服务器上定义的,只是由资源服务器解释的。
根据 RFC,范围是基于字符串的逗号分隔值,因此是一个普通列表 (https://www.rfc-editor.org/rfc/rfc6749#page-23)
The value of the scope parameter is expressed as a list of space-
delimited, case-sensitive strings. The strings are defined by the
authorization server. If the value contains multiple space-delimited
strings, their order does not matter, and each string adds an
additional access range to the requested scope.
scope = scope-token *( SP scope-token )
scope-token = 1*( %x21 / %x23-5B / %x5D-7E )
所以我的第一个假设提供 json 作为范围可能行不通,所以我考虑引入可能变得复杂的名称空间,例如(范围:user-write-full-read- 属性列表 或类似内容)。
是否有任何最佳实践,我是否遗漏了 RFC 中的某些内容,或者我是否完全滥用了 OAuth?
您在这里滥用 OAuth。范围旨在定义基本权限,而不是细粒度的访问权限,更不用说授权策略了。
您应该为此使用 XACML。在 XACML 中,您还有授权服务器(策略决策点或 pdp)的概念。它是使用策略配置的。它位于基础设施中。它在运行时由保护您的 api/app.
的策略执行点查询
查看 developers.axiomatics.com 了解详细信息(免责声明:我在 Axiomatics 工作)
您可能需要考虑 UMA 协议。 UMA RPT 令牌由客户端提供给资源服务器。 RPT 令牌由具有特定范围的授权服务器 (AS) 颁发。在 AS 上,范围映射到策略,例如谁可以使用哪些客户端、网络、所需的加密、一天中的时间等来访问 API 的内容。这些策略可以用代码或更结构化的策略来表示类似 XACML 的语法,例如上面建议的 David。
如果您想了解有关 UMA 的更多信息,我将从这张图开始:
在这种情况下,有两个 OAuth2 客户端:资源服务器(带有 APIs 的东西)和请求方(移动应用程序或网站)。
PAT 和 AAT 通常是 OpenID Connect 客户端令牌。 UMA 核心规范说 "OAuth2",但用于加密客户端注册的 OAuth2 的唯一配置文件是 OpenID Connect,因此它是隐式的。
资源所有者是制定政策的人。这些策略可以是算法性的,也可以需要资源所有者采取行动。有关 OpenID Connect 的更多信息,请参阅
有关 UMA 的更多信息,请参阅:
如果您正在寻找免费的开源 OAuth2 授权服务器,您应该看看 Gluu 服务器,它是 FOSS Access Management
的 OpenID Connect 提供商和 UMA 授权服务器
我目前正在为所有客户端(Web 和移动设备)开发 OAuth2 实现。到目前为止还没有什么特别的,但我们希望在范围内有更多的复杂性,这样我们就可以授予对某些对象的部分访问权限,直到单个 属性.
的粒度示例:客户端获得对资源的访问权限,比方说具有所有公共属性的用户对象。客户端具有完全读取权限,但只允许编辑某些属性,例如密码和用户名,但不是位置 and/or 生日。
到目前为止,我的想法是,这种粒度是在授权服务器上定义的,只是由资源服务器解释的。
根据 RFC,范围是基于字符串的逗号分隔值,因此是一个普通列表 (https://www.rfc-editor.org/rfc/rfc6749#page-23)
The value of the scope parameter is expressed as a list of space-
delimited, case-sensitive strings. The strings are defined by the
authorization server. If the value contains multiple space-delimited strings, their order does not matter, and each string adds an
additional access range to the requested scope.scope = scope-token *( SP scope-token ) scope-token = 1*( %x21 / %x23-5B / %x5D-7E )
所以我的第一个假设提供 json 作为范围可能行不通,所以我考虑引入可能变得复杂的名称空间,例如(范围:user-write-full-read- 属性列表 或类似内容)。
是否有任何最佳实践,我是否遗漏了 RFC 中的某些内容,或者我是否完全滥用了 OAuth?
您在这里滥用 OAuth。范围旨在定义基本权限,而不是细粒度的访问权限,更不用说授权策略了。
您应该为此使用 XACML。在 XACML 中,您还有授权服务器(策略决策点或 pdp)的概念。它是使用策略配置的。它位于基础设施中。它在运行时由保护您的 api/app.
的策略执行点查询查看 developers.axiomatics.com 了解详细信息(免责声明:我在 Axiomatics 工作)
您可能需要考虑 UMA 协议。 UMA RPT 令牌由客户端提供给资源服务器。 RPT 令牌由具有特定范围的授权服务器 (AS) 颁发。在 AS 上,范围映射到策略,例如谁可以使用哪些客户端、网络、所需的加密、一天中的时间等来访问 API 的内容。这些策略可以用代码或更结构化的策略来表示类似 XACML 的语法,例如上面建议的 David。
如果您想了解有关 UMA 的更多信息,我将从这张图开始:
在这种情况下,有两个 OAuth2 客户端:资源服务器(带有 APIs 的东西)和请求方(移动应用程序或网站)。 PAT 和 AAT 通常是 OpenID Connect 客户端令牌。 UMA 核心规范说 "OAuth2",但用于加密客户端注册的 OAuth2 的唯一配置文件是 OpenID Connect,因此它是隐式的。
资源所有者是制定政策的人。这些策略可以是算法性的,也可以需要资源所有者采取行动。有关 OpenID Connect 的更多信息,请参阅
有关 UMA 的更多信息,请参阅:
如果您正在寻找免费的开源 OAuth2 授权服务器,您应该看看 Gluu 服务器,它是 FOSS Access Management
的 OpenID Connect 提供商和 UMA 授权服务器