spring-security 具有Spring安全依赖性的密钥伪装策略实施

6ojccjat  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(160)

我试图弄清楚如何在只包含spring安全依赖项的spring Boot 应用程序中执行Keycloak策略。
keycloak启动器依赖项不存在,因为应用程序是React式的,并且keycloak安全启动器不适用于React式堆栈。
我如何使用spring安全依赖的策略实施?我想使用lazy路径的策略实施(从keycloak示例中获取)
谢谢你!

dgsult0t

dgsult0t1#

如果您的“策略实施”仅基于角色,则非常简单:从Keycloak realm_access.roles私有声明Mapspring授权(如果您激活了客户端角色Map器,则还有resource_access.{client-id}.roles)。示例here

  • webflux-jwt身份验证令牌仅使用spring-addons-webflux-jwt-resource-server(但需要相当多的java配置)
  • webflux-oauthentication在spring-addons-webflux-jwt-resource-server上使用spring-addons(添加一些默认的自动配置,您可以覆盖=〉更少的java配置)

如果您的策略涉及的不仅仅是角色,那么您可能需要覆盖Authentication转换器以返回您自己的实现。我在this tutorial中做了类似的事情(它是基于servlet的,但是一旦您理解了前面链接的两个示例,就可以直接将其转换为响应式应用程序)。
上面的资源仅从JWT访问令牌构建Authentication示例,这非常高效。当然,在您的JwtAuthenticationConverter中,您可以将任何服务发出的请求注入到授权服务器(或任何其他源)以获得额外的数据,这可能会消耗大量资源。我个人更喜欢:

  • 使用Map器丰富令牌,以便将所有必需的安全数据嵌入到JWT中
  • 提供Authentication实现,以满足业务需求(如果安全规则要求的不仅仅是用户名和角色,那么身份验证应该公开它)
  • 扩展Spring Security DSL,使@PreAuthorize@PostFilter表达式......非常有表现力。例如:@PreAuthorize("is(#username) or isNice() or onBehalfOf(#username).can('greet')"),取自上面链接的教程

相关问题