Dev

6. [SSO] Keycloak & Springboot 적용기 - 3

VIPeveloper 2020. 9. 28. 17:00
728x90
반응형

1. 서론

키클락이랑 스프링부트랑 연결하는 부분을 마무리하였습니다.

이제 전체 키클락 인증서버가 스프링부트에의해 연결되어있음을 볼 수 있습니다. 우리는 키클락이 다 해주기 때문에 access_token을 발급받을 필요가 없고, 인증 헤더에 명시적으로 무언가를 표시할 필요도 없습니다. 이제는 보안설정에 대해 알아보겠습니다.

 

2. 본론

일단 메이븐에 다음과 같은 설정을 추가해줍니다.

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

키클락은 KeycloakWebSecurityConfigurerAdapter을 Springboot의 WebSecurityConfigurerAdapter처럼 제공해줍니다. 참 좋군요

@Configuration
@EnableWebSecurity
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
    // Submits the KeycloakAuthenticationProvider to the AuthenticationManager
    // roles 앞에 ROLE_ 와 같이 접두사를 붙이지 않도록 도와준다.
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }

    // keycloak.json 대신에 Spring Boot yml 파일을 이용하도록 돕는다.
    @Bean
    public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }

    // Specifies the session authentication strategy
    @Bean
    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests()
            .antMatchers("/customers*", "/users*")
            .hasRole("user")
            .anyRequest()
            .permitAll();
    }
}

3. 결론

이전과 똑같이 잘 동작함을 확인하면 됩니다. 

728x90
반응형