小智 19
范围定义与用户关联的权限.这些与涉及用户的授权类型的OAuth客户端相关联:auth_code,password和implicit.表示允许代表用户访问的应用程序(称为委托授权)
当应用程序代表自己并且没有用户参与时,权限是与OAuth客户端关联的权限.这与Client_Credentials的grant_type相关联.该方案是Application或API尝试使用自己的凭据访问资源而无需用户参与.
在UAA中,oauth.login是系统级权限,并且由登录服务器项目的遗留实现使用(当UAA和Login Server是单独的组件时).此权限允许登录服务器的管理员级别访问.
1)权限和角色是spring-security对权限的写法。OAuth2 规范中未定义它。
2) 范围由 OAuth2 定义。它旨在定义最终用户允许每个客户端代表其执行的操作(从授权服务器到资源服务器的信息)。
因此,授予客户端的权限应始终是最终用户权限的子集:所有可能的范围 => 所有用户权限;范围越小,权限就越小。
一个技巧是,在“客户端”OAuth2 流程上,客户端是最终用户 => 范围在这种情况下没有任何意义(客户端不是代表某人进行身份验证,而是以其自己的名义进行身份验证)。
默认 OAuth2 spring-security 转换器将范围转换为权限。对我来说,这会带来很多混乱,不应该发生。相反,范围声明应该用于过滤最终用户权限。
最新要求编写和配置您自己的权限转换器,这对于 JWT 来说已经是可能的,但还不能进行内省(应该来,为此开票)
此外,OAuth2 规范中没有任何内容要求权限(spring 权限和角色)包含在令牌中(使用私有声明)或由授权服务器管理。资源服务器使用主题声明从数据库中检索它,然后对其进行“范围”(根据授予客户端的范围过滤最终用户权限)是合法的。