在Spring Security OAuth2中,我可以通过配置ClientDetails
来限制允许客户端请求的范围。但是,除了受客户端限制外,我还想限制单个用户可用的范围。例如,用户在持有admin.forceLogout
时只能访问ROLE_ADMIN
范围。
我不想像checkUserScopes
那样直接将用户权限映射到作用域;相反,我想运行自定义逻辑来检查和修改与特定令牌授予关联的范围。最好的方法是什么?
我看到了两种可能性,但都不是很理想:
提供一个TokenEnhancer
,用于在发行后修改令牌。这似乎是为了包含其他信息(例如受众声明),而不是重写已经可用的范围。特别是,这是在confirm_access
步骤之后执行的。
提供自定义OAuth2RequestFactory
。至少,这涉及到复制许多对安全性敏感的逻辑。覆盖checkUserScopes()
似乎是放置自定义策略的理想之地,但它是私有的,唯一的覆盖点是整个createTokenRequest()
上。
是否有更好的方法来进行这种“交集”过滤,或者这是两个选项?