Keycloak은 오픈 소스 아이덴티티 및 접근 관리 솔루션으로, 사용자 인증과 보안된 리소스에 대한 접근 제어를 제공합니다. 이는 OAuth 2.0, OpenID Connect, SAML 2.0과 같은 표준 프로토콜을 지원하며, 애플리케이션 보안을 강화하기 위해 매우 유용합니다.
Keycloak의 주요 기능
- 사용자 인증: 다양한 방식(소셜 로그인, LDAP, Active Directory 등)으로 사용자 인증을 지원합니다.
- 세션 관리: 사용자의 세션을 관리하고, 사용자가 여러 시스템에 걸쳐 일관된 접근을 유지할 수 있도록 합니다.
- 클라이언트 어댑터: 다양한 언어 및 프레임워크를 위한 클라이언트 어댑터를 제공하여, 손쉽게 통합할 수 있습니다.
- 사용자 및 그룹 관리: 사용자와 그룹을 관리하며, 보안 정책을 구현할 수 있습니다.
Spring Boot와 Keycloak API 연동하기
application.properties
keycloak.auth-server-url=http://localhost:8080/auth
keycloak.realm=your-realm
keycloak.resource=your-client-id
keycloak.public-client=true
keycloak.principal-attribute=preferred_username
maven:
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-starter</artifactId>
<version>키버전</version>
</dependency>
gradle:
implementation 'org.keycloak:keycloak-spring-boot-starter:키버전'
Spring Security 설정
@Configuration
@EnableWebSecurity
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http
.authorizeRequests()
.antMatchers("/admin/*").hasRole("ADMIN")
.anyRequest().permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
auth.authenticationProvider(keycloakAuthenticationProvider);
}
@Bean
public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
return new KeycloakSpringBootConfigResolver();
}
}
api 예시
@RestController
public class TestController {
@GetMapping("/public")
public ResponseEntity<String> getPublic() {
return ResponseEntity.ok("Public API");
}
@GetMapping("/admin/info")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public ResponseEntity<String> getAdminInfo() {
return ResponseEntity.ok("Admin API");
}
}