授予OAuth2令牌时,如何限制用户的范围?

时间:2018-09-17 18:08:56

标签: java spring spring-security oauth-2.0 spring-security-oauth2

在Spring Security OAuth2中,我可以通过配置ClientDetails来限制允许客户端请求的范围。但是,除了受客户端限制外,我还想限制单个用户可用的范围。例如,用户在持有admin.forceLogout时只能访问ROLE_ADMIN范围。

我不想像checkUserScopes那样直接将用户权限映射到作用域;相反,我想运行自定义逻辑来检查和修改与特定令牌授予关联的范围。最好的方法是什么?

我看到了两种可能性,但都不是很理想:

  • 提供一个TokenEnhancer,用于在发行后修改令牌。这似乎是为了包含其他信息(例如受众声明),而不是重写已经可用的范围。特别是,这是在confirm_access步骤之后执行的。

  • 提供自定义OAuth2RequestFactory。至少,这涉及到复制许多对安全性敏感的逻辑。覆盖checkUserScopes()似乎是放置自定义策略的理想之地,但它是私有的,唯一的覆盖点是整个createTokenRequest()上。

是否有更好的方法来进行这种“交集”过滤,或者这是两个选项?

0 个答案:

没有答案