keycloak Springboot에 연동하기

2022. 8. 16. 16:27OpenSource/keycloak

반응형

2022.08.10 - [OpenSource/keycloak] - keycloak quick start

 

keycloak quick start

springsecurity진영에서 더이상 oauth2.0에 대한 지원을 중단하고 오픈소스를 통해 구현하라는 권고가 있었다. OKTA(유료)와 Keycloak(무료)중에 keycloak을 찍먹 해보려고 한다. https://www.keycloak.org/gettin..

acet.pe.kr

 

springboot 연동은 gradle을 사용했다.
build.gradle에 아래와 같이 디펜던시 설정을 넣어주면 된다.
주석 2개 되어있는 부분 참고!

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    // https://mvnrepository.com/artifact/org.keycloak/keycloak-spring-boot-starter
    implementation group: 'org.keycloak', name: 'keycloak-spring-boot-starter', version: '19.0.1'
    // https://mvnrepository.com/artifact/org.keycloak.bom/keycloak-adapter-bom
    implementation group: 'org.keycloak.bom', name: 'keycloak-adapter-bom', version: '19.0.1', ext: 'pom'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
}

그리고 keycloak.json요런걸 만들어서 키클록 정보를 넣어주던지 아니면 application.yml에 아래와 같이 설정하면 된다.

keycloak:
  realm: king-account
  # client
  resource: kaas-local
  # keycloak URL
  auth-server-url: http://localhost:8080
  ssl-required: external
  credentials:
    secret: 9J0msTzyRbtIcs8s4wRCDFmfbR31Abㅋㅋ
  use-resource-role-mappings: true


server:
  port: 8081


그리고 main쪽에 KeycloakConfigResolver Bean을 하나 만들어준다.

@SpringBootApplication
public class KeycloakAccountApplication {

    public static void main(String[] args) {
        SpringApplication.run(KeycloakAccountApplication.class, args);
    }

    @Bean
    public KeycloakConfigResolver KeycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }
}

해당 클래스를 확인해보면 스프링시큐리티을 해보았다면 어라? 많이 본 내용인데? 라고 할 것이다.

@KeycloakConfiguration
public class KeycloakConfig extends KeycloakWebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }

    @Override
    @Bean
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(buildSessionRegistry());
    }

    @Bean
    protected SessionRegistry buildSessionRegistry() {
        return new SessionRegistryImpl();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception
    {
        super.configure(http);
        http
                .authorizeRequests()
                .anyRequest().authenticated();
    }
}

이제 controller를 하나 만들어주고 기동시켜보면 된다.

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String helloworld() {
        return "hello world";
    }
}

기동 후 아래의 url로 컨트롤러에 접근하여 보자!
http://localhost:8081/hello

아래처럼 로그인 창이 뜬다. 굿!

유저 teri.epi를 생성했기 때문에 패스워드를 치고 들어가면 아래와 같이 헬로우 월드를 볼수가 있다.

끝~

반응형

'OpenSource > keycloak' 카테고리의 다른 글

keycloak quick start  (0) 2022.08.10