在UAA中有两个概念,权限和范围。
这些概念似乎重叠。我想知道确切的差异和目的
例如,oauth.login
答案 0 :(得分:19)
范围定义与用户关联的权限。这些与涉及用户的授权类型的OAuth客户端相关联:auth_code,password和implicit。表示允许应用程序代表用户访问的内容(称为委派授权)
当应用程序代表自己并且没有用户参与时,权限是与OAuth客户端关联的权限。这与Client_Credentials的grant_type相关联。该方案是应用程序或API尝试使用自己的凭据访问资源而无需用户参与。
在UAA中,oauth.login是系统级权限,并且由登录服务器项目的遗留实现使用(当UAA和Login Server是单独的组件时)。此权限允许登录服务器的管理员级别访问。
答案 1 :(得分:0)
1)权限和角色是权限的春季安全性用语。在OAuth2规范中未定义。
2)角色由OAuth2定义。旨在在授权服务器和资源服务器之间传递最终用户允许客户端代表客户端执行的操作。
因此,授予客户的权限应始终是最终用户权限的子集:所有可能的范围=>所有用户权限;范围越小,权威就越少。一个窍门,在某些OAuth2流上,客户端是最终用户(它不是代表某人进行身份验证,而是以自己的名称进行身份验证)。
默认的OAuth2弹簧安全转换器将范围转换为授权。对我来说,这带来了很多混乱,应该不会发生。范围声明应改为用于过滤最终用户权限。
最新要求编写和配置您自己的授权机构转换器,对于JWT来说已经可以,但是自省(应该会为此开票)
此外,OAuth2规范中的任何内容都不需要在令牌中包含权限(弹簧授权和角色)。资源服务器合法地使用主题声明从数据库中检索它,然后对其进行“范围”(根据授予客户端的范围过滤最终用户权限)