UAA中范围和权限之间的区别
Posted
技术标签:
【中文标题】UAA中范围和权限之间的区别【英文标题】:Difference between scope and authority in UAA 【发布时间】:2016-06-11 23:46:08 【问题描述】:在 UAA 中有两个概念,权限和范围。
这些概念似乎重叠。我想知道确切的区别和目的
例如,oauth.login
【问题讨论】:
【参考方案1】:范围是代表用户的 OAuth 客户端的权限。它们在获得具有以下授权类型之一的用户令牌后被授予:auth_code, password, implicit
。范围表示允许应用程序代表用户访问的内容(称为委托授权)。
权限是 OAuth 客户端代表自己行事的权限,没有用户参与。它们是在获取grant_type 为client_credentials
的客户端令牌后授予的。典型用途是应用程序或 API 尝试在没有用户参与的情况下使用自己的凭据访问资源。
在 UAA 中,oauth.login
是系统级权限,并被 login-server 项目的旧实现使用(当 UAA 和 Login Server 是单独的组件时)。此权限允许登录服务器的管理员级别访问。
【讨论】:
【参考方案2】:1) 权限和角色是权限的弹簧安全措辞。它没有在 OAuth2 规范中定义。
2) 范围由 OAuth2 定义。它旨在定义最终用户允许每个客户端代表其执行的操作(从授权服务器到资源服务器的信息)。
因此,授予客户端的权限应该始终是最终用户权限的子集:所有可能的范围 => 所有用户权限;范围越小,权限越少。
一个技巧,在“客户端”OAuth2 流程中,客户端是最终用户 => 范围在这种情况下没有意义(客户端不是代表某人进行身份验证,而是以其自己的名义)。
默认的 OAuth2 spring-security 转换器将范围转换为权限。对我来说,这会带来很多混乱,不应该发生。范围声明应改为用于过滤最终用户权限。
最新需要编写和配置您自己的权限转换器,这对于 JWT 来说已经可以,但还不能用于自省(应该来,为此打开一张票)
此外,OAuth2 规范中的任何内容都不需要权限(弹簧权限和角色)包含在令牌中(使用私有声明)或由授权服务器管理。资源服务器可以合法地使用主题声明从数据库中检索它,然后“范围”它(根据授予客户端的范围过滤最终用户权限)。
【讨论】:
以上是关于UAA中范围和权限之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
托管 bean 中的 View 和 Request 范围之间的区别
使用 Spring Security 时,oauth 范围和角色之间有啥区别吗? [复制]
Google 日历 API 范围 - calendar.readonly 和 calendar.events.readonly 之间有啥区别?