Spring boot Spring安全+密钥斗篷授权:如何将端点与资源关联?
我已经创建了一个SpringBoot应用程序,它具有SpringBootStarter安全性和KeyClope-Spring安全适配器,并使用KeyClope验证用户的身份 现在,我想使用keydove对我的API进行细粒度的访问控制 在KeyClope中,我已经为我的客户启用了授权。我已经创建了一个角色,并将该角色分配给了我的测试用户。我创建了资源和基于资源的权限,并添加了基于角色的策略。使用评估功能,我已经确认,我的用户有权访问我的资源 假设我有一个端点的控制器Spring boot Spring安全+密钥斗篷授权:如何将端点与资源关联?,spring-boot,kotlin,spring-security,authorization,keycloak,Spring Boot,Kotlin,Spring Security,Authorization,Keycloak,我已经创建了一个SpringBoot应用程序,它具有SpringBootStarter安全性和KeyClope-Spring安全适配器,并使用KeyClope验证用户的身份 现在,我想使用keydove对我的API进行细粒度的访问控制 在KeyClope中,我已经为我的客户启用了授权。我已经创建了一个角色,并将该角色分配给了我的测试用户。我创建了资源和基于资源的权限,并添加了基于角色的策略。使用评估功能,我已经确认,我的用户有权访问我的资源 假设我有一个端点的控制器 @RestControlle
@RestController
class GreetingController {
@GetMapping("/hello")
fun getPatientInfo(principal: Principal): String {
return "Hello, ${principal.name}!"
}
}
现在我的问题是:如何将Spring Boot应用程序中的端点与给定的资源相关联,以便在发出请求时评估权限
“如何将Spring Boot应用程序中的端点与给定资源关联,以便在发出请求时评估权限?”
举个例子,让我们说
您的KeyClope服务器正在端口8585上运行
您的应用程序服务器正在端口8080上运行
您的领域名为“myrealm”
您的资源名为“我的客户资源”
您的角色名为“超级用户”
然后在Spring Boot应用程序的application.properties文件中设置
应用程序将在其上运行的端口
server.port=8080
keydape.realm=myrealm
keydape.auth-server-url=http://localhost:8585/auth
keydape.ssl-required=无
KeyClope资源是客户端ID
keydape.resource=我的客户机资源
keydape.use-resource-role-mappings=true
keydape.public-client=true
…
配置${principal.name}将返回的内容
KeyClope.principal属性=首选\u用户名
您可以通过以下方式连接到Spring Boot的KeyClope配置中
…
@配置
@启用Web安全性
@EnableGlobalMethodSecurity Prespenabled=true
@ComponentScan basePackageClasses=keydeposecurityComponents.class
公共类安全配置扩展了KeyDopperWebSecurity配置适配器{
@凌驾
public void configure HttpSecurity http引发异常{
super.configurehttp;
http.authorized请求
.antMatchers/你好…
.hasRole超级用户
.任何请求
.permitAll;
}
…
}
在没有更具体的应用程序和配置细节的情况下,以上只是一个示意图。但这是一般的方法
为了更具体地掌握我最近实施的上述通用方法。如果您不介意,请为您提供一些Qs?1您迄今为止尝试了哪些方法?2如果您迄今为止尝试了哪些方法导致错误,那么错误消息是什么?3您使用的是什么版本的Spring Boot、KeyClope、JDK等?4您的应用程序是什么操作系统yed on?5什么构建工具-如果有的话-你用什么构建你的应用程序?6你想象的任何其他细节可能有助于帮助你重现你观察到的任何失败?7你能分享一个吗?谢谢你的回答,并对这个不具体的问题表示抱歉。有没有一种方法可以拥有多个端点,并且每个端点都是一个端点与不同的资源关联?…有多个端点,并且每个端点都与不同的资源关联?…”–@KirillRakhman-是。每个资源都可以有自己的根URL、Redirecris等。作为另一个可能的通用示例,在文档中搜索“如果您有多个部署”“第节。但让我强调一下:我并不是建议将该页面上的内容作为您特定需求的解决方案。我只是指出Key斗篷可以做的一般事情。也许我有一个问题,然后我应该更广泛地阐述我的问题。我如何对不同的端点应用不同的权限来实现基于角色的访问c?”控制?我不在乎是否通过资源完成,但角色“admin”不够,因为它检查的是角色,而不是权限。“可能我有XY问题。”“-老实说,我不能说。但我确实同意该怎么办?部分:”“1……包括……任何尝试的解决方案的信息……2若有人要求提供更多信息,请提供详细信息……”-“但hasRole'admin'是不够的,因为它检查的是角色,而不是权限……”…“-感谢您排除了这一点。我将使用基于资源的权限,并相应地编辑我的答案。同时,请参阅我昨天在评论中提交的7个请求以获取更多信息?TIA。”。