UAA的范围和权限之间的差异

Yog*_*kar 14 cloudfoundry-uaa

在UAA中有两个概念,权限和范围.

这些概念似乎重叠.我想知道确切的差异和目的

例如,oauth.login

小智 19

范围定义与用户关联的权限.这些与涉及用户的授权类型的OAuth客户端相关联:auth_code,password和implicit.表示允许代表用户访问的应用程序(称为委托授权)

当应用程序代表自己并且没有用户参与时,权限是与OAuth客户端关联的权限.这与Client_Credentials的grant_type相关联.该方案是Application或API尝试使用自己的凭据访问资源而无需用户参与.

在UAA中,oauth.login是系统级权限,并且由登录服务器项目的遗留实现使用(当UAA和Login Server是单独的组件时).此权限允许登录服务器的管理员级别访问.


ch4*_*4mp 5

1)权限和角色是spring-security对权限的写法。OAuth2 规范中未定义它。

2) 范围由 OAuth2 定义。它旨在定义最终用户允许每个客户端代表其执行的操作(从授权服务器到资源服务器的信息)。

因此,授予客户端的权限应始终是最终用户权限的子集:所有可能的范围 => 所有用户权限;范围越小,权限就越小。

一个技巧是,在“客户端”OAuth2 流程上,客户端是最终用户 => 范围在这种情况下没有任何意义(客户端不是代表某人进行身份验证,而是以其自己的名义进行身份验证)。

默认 OAuth2 spring-security 转换器将范围转换为权限。对我来说,这会带来很多混乱,不应该发生。相反,范围声明应该用于过滤最终用户权限。

最新要求编写和配置您自己的权限转换器,这对于 JWT 来说已经是可能的,但还不能进行内省(应该来,为此开票)

此外,OAuth2 规范中没有任何内容要求权限(spring 权限和角色)包含在令牌中(使用私有声明)或由授权服务器管理。资源服务器使用主题声明从数据库中检索它,然后对其进行“范围”(根据授予客户端的范围过滤最终用户权限)是合法的。