UAA 范围和权限之间的差异

Difference between scope and authority in UAA

在UAA中有两个概念,Authority和Scope。

这些概念似乎有重叠。我想知道确切的区别和用途

例如,oauth.login

范围是代表用户的 OAuth 客户端的权限。在获得具有以下授予类型之一的用户令牌后授予它们:auth_code, password, implicit。范围表示允许应用程序代表用户访问的内容(称为委托授权)。

权限是代表自己行事的 OAuth 客户端的权限,没有用户参与。在获得 grant_type 为 client_credentials 的客户端令牌后,它们将被授予。典型用途是应用程序或 API 尝试在没有用户参与的情况下使用自己的凭据访问资源。

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

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

2) 范围由 OAuth2 定义。它旨在定义 end-user 允许每个客户端代表其执行的操作(从 authorization-server 到 resource-servers 的信息)。

因此,授予客户端的权限应该始终是 end-user 个权限的子集:所有可能的范围 => 所有用户权限;范围越小,权限越小

一个技巧,在 "client" OAuth2 流程中,客户端是 end-user => 在这种情况下范围没有任何意义(客户端不是代表某人进行身份验证,而是在自己的身份验证中姓名)。

默认 OAuth2 spring-security 转换器将作用域转换为权限。对我来说,这会带来很多混乱,不应该发生。范围声明应该改为用于过滤 end-user 权限。

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

此外,OAuth2 规范中的任何内容都不需要将权限(spring 权限和角色)包含在令牌中(使用私有声明)或由 authorization-server 管理。例如,资源服务器使用主题声明从数据库中检索它是合法的,然后 "scope" 它(根据授予客户端的范围过滤 end-user 权限)。