我试图弄清楚如何在只包含spring安全依赖项的spring Boot 应用程序中执行Keycloak策略。keycloak启动器依赖项不存在,因为应用程序是React式的,并且keycloak安全启动器不适用于React式堆栈。我如何使用spring安全依赖的策略实施?我想使用lazy路径的策略实施(从keycloak示例中获取)谢谢你!
dgsult0t1#
如果您的“策略实施”仅基于角色,则非常简单:从Keycloak realm_access.roles私有声明Mapspring授权(如果您激活了客户端角色Map器,则还有resource_access.{client-id}.roles)。示例here:
realm_access.roles
resource_access.{client-id}.roles
spring-addons-webflux-jwt-resource-server
如果您的策略涉及的不仅仅是角色,那么您可能需要覆盖Authentication转换器以返回您自己的实现。我在this tutorial中做了类似的事情(它是基于servlet的,但是一旦您理解了前面链接的两个示例,就可以直接将其转换为响应式应用程序)。上面的资源仅从JWT访问令牌构建Authentication示例,这非常高效。当然,在您的JwtAuthenticationConverter中,您可以将任何服务发出的请求注入到授权服务器(或任何其他源)以获得额外的数据,这可能会消耗大量资源。我个人更喜欢:
Authentication
@PreAuthorize
@PostFilter
@PreAuthorize("is(#username) or isNice() or onBehalfOf(#username).can('greet')")
1条答案
按热度按时间dgsult0t1#
如果您的“策略实施”仅基于角色,则非常简单:从Keycloak
realm_access.roles
私有声明Mapspring授权(如果您激活了客户端角色Map器,则还有resource_access.{client-id}.roles
)。示例here:spring-addons-webflux-jwt-resource-server
(但需要相当多的java配置)spring-addons-webflux-jwt-resource-server
上使用spring-addons(添加一些默认的自动配置,您可以覆盖=〉更少的java配置)如果您的策略涉及的不仅仅是角色,那么您可能需要覆盖
Authentication
转换器以返回您自己的实现。我在this tutorial中做了类似的事情(它是基于servlet的,但是一旦您理解了前面链接的两个示例,就可以直接将其转换为响应式应用程序)。上面的资源仅从JWT访问令牌构建
Authentication
示例,这非常高效。当然,在您的JwtAuthenticationConverter中,您可以将任何服务发出的请求注入到授权服务器(或任何其他源)以获得额外的数据,这可能会消耗大量资源。我个人更喜欢:Authentication
实现,以满足业务需求(如果安全规则要求的不仅仅是用户名和角色,那么身份验证应该公开它)@PreAuthorize
和@PostFilter
表达式......非常有表现力。例如:@PreAuthorize("is(#username) or isNice() or onBehalfOf(#username).can('greet')")
,取自上面链接的教程