Java 基于KeyClope注释的资源配置
我最近与microservices合作,开发为Spring Boot应用程序(v2.2),在我的公司,我们使用KeyClope作为授权服务器。 我们之所以选择它,是因为我们需要复杂的策略、角色和组,而且我们还需要用户管理的授权(UMA)来在用户之间共享资源 我们用一个域和多个客户机(每个微服务一个客户机)配置了KeyClope。 现在,我明白了我需要在keydove中显式定义资源,这很好,但问题是:我真的需要在microservice的属性文件中复制所有资源吗? 所有文档、示例和教程的结尾都是一样的,就像:Java 基于KeyClope注释的资源配置,java,spring-boot,microservices,keycloak,Java,Spring Boot,Microservices,Keycloak,我最近与microservices合作,开发为Spring Boot应用程序(v2.2),在我的公司,我们使用KeyClope作为授权服务器。 我们之所以选择它,是因为我们需要复杂的策略、角色和组,而且我们还需要用户管理的授权(UMA)来在用户之间共享资源 我们用一个域和多个客户机(每个微服务一个客户机)配置了KeyClope。 现在,我明白了我需要在keydove中显式定义资源,这很好,但问题是:我真的需要在microservice的属性文件中复制所有资源吗? 所有文档、示例和教程的结尾都是一
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方法使用不同的授权范围)
在现实生活中,我们正在开发的每个微服务都有几十个端点,在我看来,一个一个地定义它们是浪费时间,也是代码健壮性的一个弱点:我们更改一个端点,我们需要在KeyClope和应用程序属性中重新配置它
有没有办法在控制器级别使用某种注释?类似于以下伪代码:
@RestController
@RequestMapping("/foo")
public class MyController {
@GetMapping
@KeycloakPolicy(scope = "foo:view")
public ResponseEntity<String> foo() {
...
}
@PostMapping
@KeycloakPolicy(scope = "bar:create")
public ResponseEntity<String> bar() {
...
}
}
@RestController
@请求映射(“/foo”)
公共类MyController{
@GetMapping
@密钥策略(scope=“foo:view”)
公众回应{
...
}
@邮戳
@keydeposepolicy(scope=“bar:create”)
公众响应栏(){
...
}
}
最后,我开发了自己的项目,为需要用作资源服务器的spring boot项目提供自动配置功能
该项目以MIT2许可证发布,可在my github上获得:
您找到了解决方案吗?是的,我已经通过基于swagger api为KeyClope编写了一个自动配置程序实现了这一点。我会尽快在github上发布一份草稿