在keycloak中获取,POST,PUT,DELETE类型的身份验证

问题描述 投票:2回答:2

我有一个API的资源,其URI是/product/{id},并在VIEW, GET, DELETE上进行三个操作HttpMethod

如何管理一个用户只允许VIEWadmin被允许VIEW, GET, DELETE即所有选项。

我曾见过Keycloak Adapter Policy Enforcer,但我不明白它是如何工作的。我没有在create permission中获取方法选项。

有人可以帮助我实现这个或建议一些方法来实现它。

java spring-boot microservices keycloak
2个回答
1
投票

你需要的是弹簧安全。您可以使用以下方法将其添加到项目中:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

您可以像这样定义安全设置(我假设其他配置已经完成):

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

// ...

  @Override
  protected void configure(HttpSecurity http) throws Exception {

        http
                //HTTP Basic authentication
                .httpBasic()
                .and()
                .authorizeRequests()
                .antMatchers(HttpMethod.GET, "/product/**").hasRole("USER")
                .antMatchers(HttpMethod.POST, "/product").hasRole("ADMIN")
                .antMatchers(HttpMethod.PUT, "/product/**").hasRole("ADMIN")
                .antMatchers(HttpMethod.PATCH, "/product/**").hasRole("ADMIN")
                .antMatchers(HttpMethod.DELETE, "/product/**").hasRole("ADMIN")
                .and()
                .csrf().disable()
                .formLogin().disable();
      }
}

0
投票

首先,最合适的选择是使用基于注释的策略michanisam。因此,在每个休息服务之前,您需要编写其访问策略,例如:

@Secured("ROLE_VIEWER")
public String getUsername() {
    SecurityContext securityContext = SecurityContextHolder.getContext();
    return securityContext.getAuthentication().getName();
}

因此,您可以看到getUsername()方法仅允许查看者使用。

@Secured("ROLE_ADMIN")
public boolean isValidUsername(String username) {
     return userRoleRepository.isValidUsername(username);
}

因此,如您所见,上述方法只允许由admin访问,同样的注释也可用于休息服务。要使用这个facelity,您需要将spring security与spring boot应用程序集成在一起。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

有关更多详细信息,请查看本文,但我确实看到这是控制Spring启动应用程序中的数据安全性和服务安全性的最佳方法。

参考:https://www.baeldung.com/spring-security-method-security

© www.soinside.com 2019 - 2024. All rights reserved.