Keycloak과 Spring Boot 로그인 로직 연동하기
이번 글에서는 Keycloak을 이용해 Spring Boot 애플리케이션에서 로그인 처리를 어떻게 구현하는지, 실제 로그인 요청부터 토큰 발급까지의 흐름을 예제 코드와 함께 설명합니다.
1. 전체 로그인 흐름
- 사용자가 로그인 폼 제출 (이메일, 비밀번호)
- Spring Boot 백엔드에서 Keycloak 토큰 발급 요청
- Keycloak이 access_token 발급
- 토큰을 클라이언트에 반환 및 이후 요청에 Authorization 헤더 포함
2. 로그인 요청 예시 (Postman)
POST /realms/your-realm/protocol/openid-connect/token
Content-Type: application/x-www-form-urlencoded
client_id=your-client
&username=user01@example.com
&password=qwer1234
&grant_type=password
응답:
{
"access_token": "eyJhbGci...",
"expires_in": 300,
"refresh_token": "eyJhbGci...",
...
}
3. Spring Boot에서 Keycloak 로그인 연동
3-1. AuthController
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginDTO loginDto) {
String token = keycloakService.getToken(loginDto);
return ResponseEntity.ok(Map.of("token", token));
}
3-2. KeycloakService
public String getToken(LoginDTO dto) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap body = new LinkedMultiValueMap<>();
body.add("client_id", "your-client");
body.add("grant_type", "password");
body.add("username", dto.getEmail());
body.add("password", dto.getPassword());
HttpEntity> request = new HttpEntity<>(body, headers);
ResponseEntity
4. 유의 사항
- Keycloak 서버 주소: Docker 환경이면 호스트 주소를 주의해야 합니다.
- grant_type: 반드시
password
사용 - 클라이언트 설정: Keycloak Admin Console에서
Direct Access Grants
옵션 활성화
'Capstone-F5' 카테고리의 다른 글
Keycloak 상세설정 (0) | 2025.06.20 |
---|---|
Keycloak과 SpringSecurity (0) | 2025.06.20 |
Keycloak과 SpringBoot 회원가입 로직 연동 (1) | 2025.06.20 |
Docker에서 Keycloak 실행 및 오류 발생 원인 (0) | 2025.06.20 |
키클락 + SpringBoot 연동 방법 (0) | 2025.06.20 |