基于Keycloak注解的资源配置
Keycloak annotation based Resource configuration
我最近在使用微服务,开发为 Spring 引导应用程序 (v 2.2),在我的公司,我们使用 Keycloak 作为授权服务器。
我们选择它是因为我们需要复杂的策略、角色和组,我们还需要用户管理授权 (UMA) 来在用户之间共享资源。
我们为 Keycloak 配置了一个领域和多个客户端(每个微服务一个客户端)。
现在,我知道我需要在 Keycloak 中明确定义资源,这很好,但问题是:我真的需要在微服务的 属性 文件中复制所有资源吗?
所有文档、示例和教程都以相同的内容结束,类似于:
keycloak.policy-enforcer-config.enforcement-mode=PERMISSIVE
keycloak.policy-enforcer-config.paths[0].name=Car Resource
keycloak.policy-enforcer-config.paths[0].path=/cars/create
keycloak.policy-enforcer-config.paths[0].scopes[0]=car:create
keycloak.policy-enforcer-config.paths[1].path=/cars/{id}
keycloak.policy-enforcer-config.paths[1].methods[0].method=GET
keycloak.policy-enforcer-config.paths[1].methods[0].scopes[0]=car:view-detail
keycloak.policy-enforcer-config.paths[1].methods[1].method=DELETE
keycloak.policy-enforcer-config.paths[1].methods[1].scopes[0]=car:delete
(第二个示例更适合我们的情况,因为它还针对每个 http 方法使用了不同的授权范围)。
在现实生活中,我们正在开发的每个微服务都有几十个端点,一个一个地定义它们在我看来是浪费时间和代码健壮性的弱点:我们更改一个端点,我们需要重新配置它Keycloak 和应用程序属性。
有没有办法在控制器级别使用某种注释?类似于以下伪代码:
@RestController
@RequestMapping("/foo")
public class MyController {
@GetMapping
@KeycloakPolicy(scope = "foo:view")
public ResponseEntity<String> foo() {
...
}
@PostMapping
@KeycloakPolicy(scope = "bar:create")
public ResponseEntity<String> bar() {
...
}
}
最后,我开发了自己的项目,为需要作为资源服务器工作的 spring-boot 项目提供自动配置功能。
该项目是在 MIT2 许可证下发布的,可以在我的 github 上找到:
keycloak-resource-autoconf
我最近在使用微服务,开发为 Spring 引导应用程序 (v 2.2),在我的公司,我们使用 Keycloak 作为授权服务器。 我们选择它是因为我们需要复杂的策略、角色和组,我们还需要用户管理授权 (UMA) 来在用户之间共享资源。
我们为 Keycloak 配置了一个领域和多个客户端(每个微服务一个客户端)。 现在,我知道我需要在 Keycloak 中明确定义资源,这很好,但问题是:我真的需要在微服务的 属性 文件中复制所有资源吗? 所有文档、示例和教程都以相同的内容结束,类似于:
keycloak.policy-enforcer-config.enforcement-mode=PERMISSIVE
keycloak.policy-enforcer-config.paths[0].name=Car Resource
keycloak.policy-enforcer-config.paths[0].path=/cars/create
keycloak.policy-enforcer-config.paths[0].scopes[0]=car:create
keycloak.policy-enforcer-config.paths[1].path=/cars/{id}
keycloak.policy-enforcer-config.paths[1].methods[0].method=GET
keycloak.policy-enforcer-config.paths[1].methods[0].scopes[0]=car:view-detail
keycloak.policy-enforcer-config.paths[1].methods[1].method=DELETE
keycloak.policy-enforcer-config.paths[1].methods[1].scopes[0]=car:delete
(第二个示例更适合我们的情况,因为它还针对每个 http 方法使用了不同的授权范围)。
在现实生活中,我们正在开发的每个微服务都有几十个端点,一个一个地定义它们在我看来是浪费时间和代码健壮性的弱点:我们更改一个端点,我们需要重新配置它Keycloak 和应用程序属性。
有没有办法在控制器级别使用某种注释?类似于以下伪代码:
@RestController
@RequestMapping("/foo")
public class MyController {
@GetMapping
@KeycloakPolicy(scope = "foo:view")
public ResponseEntity<String> foo() {
...
}
@PostMapping
@KeycloakPolicy(scope = "bar:create")
public ResponseEntity<String> bar() {
...
}
}
最后,我开发了自己的项目,为需要作为资源服务器工作的 spring-boot 项目提供自动配置功能。
该项目是在 MIT2 许可证下发布的,可以在我的 github 上找到: keycloak-resource-autoconf