Java/인증 및 인가, IAM

[Java/IAM] Spring Boot 환경에서 Keycloak 활용하기 -5 : 일반 사용자와 소셜 로그인 매핑

adjh54 2025. 2. 9. 18:06
728x170
해당 글에서는 Keycloak을 활용하여 소셜 로그인을 이전에 구현을 하였을때, 일반 사용자와 소셜 로그인을 매핑하는 방법에 대해 알아봅니다.

 
 
 
 

 💡 [참고] Keycloak 초기 구성에서부터 활용방법에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
분류 주제 URL
Docker Docker Compose를 이용한 Keycloak 환경 구성 및 실행 방법 https://adjh54.tistory.com/644
환경설정 Google Cloud Console OAuth 2.0 API 액세스 환경 설정하기 https://adjh54.tistory.com/657
     
이해하기 Keycloak 이해하기 -1 : 구성 요소, 인증 처리과정, 주요 기능 https://adjh54.tistory.com/645
이해하기 Keycloak 이해하기 -2 : SAML/OIDC 프로토콜, 인증 흐름(Authentication flow) 종류 https://adjh54.tistory.com/646
이해하기 Keycloak 이해하기 -3 : 기본 환경 구성 및 로그인/로그아웃 구현 https://adjh54.tistory.com/647
이해하기 Keycloak 이해하기 -4 : Keycloak 권한 및 종류 https://adjh54.tistory.com/655
     
구성하기 Spring Boot 환경에서 Keycloak 활용하기 -1 : OIDC 인증 흐름 구현(Standard Flow) https://adjh54.tistory.com/648
구성하기 Spring Boot 환경에서 Keycloak 활용하기 -2 : OIDC 인증 흐름 구현(Direct Access Grants, Implicit Flow) https://adjh54.tistory.com/649
구성하기 Spring Boot 환경에서 Keycloak 활용하기 -3 : OIDC 인증 흐름 구현(Service Accounts Roles) https://adjh54.tistory.com/654
구성하기 Spring Boot 환경에서 Keycloak 활용하기 -4 : Identity providers Social 소셜 로그인 구현(Google) https://adjh54.tistory.com/658
구성하기 Spring Boot 환경에서 Keycloak 활용하기 -5 : 일반 사용자와 소셜 로그인 매핑 https://adjh54.tistory.com/659
     
Github Spring Boot Keycloak 관련 Repository https://github.com/adjh54ir/blog-codes/tree/main/spring-boot-keycloakhttps://github.com/adjh54ir/blog-codes/tree/main/spring-boot-keycloak-sub

 
 
 

1) Keycloak


💡 Keycloak

- Red Hat에서 개발한 오픈소스 Identity and Access Management(IAM) 솔루션입니다. 현대적인 애플리케이션과 서비스를 위한 인증 및 권한 부여 기능을 제공하는 인증 서버(Authentication Server)의 기능을 수행합니다.
- Keycloack에서는 여러 플랫폼에서 중앙 집중식 인증 서버로 동작을 합니다. 주요한 기능은 서로 다른 도메인에서 실행되는 애플리케이션 간의 SSO를 지원하거나 REST API 기반에 접근제어 토큰에 대한 인증 제공 및 세션 타임아웃, 동시 로그인 제한과 같은 다양한 세션 기능을 담당합니다.

 

 

Keycloak

Single-Sign On Users authenticate with Keycloak rather than individual applications. This means that your applications don't have to deal with login forms, authenticating users, and storing users. Once logged-in to Keycloak, users don't have to login again

www.keycloak.org

 
 

1. Keycloak 사용목적


기능 설명
중앙 집중식 인증 관리 여러 애플리케이션에 대한 인증을 한 곳에서 관리할 수 있어 보안 정책 적용과 유지보수가 용이합니다.
SSO(Single Sign-On) 지원 사용자가 한 번의 로그인으로 여러 애플리케이션에 접근할 수 있어 사용자 경험이 향상됩니다.
다양한 인증 프로토콜 OpenID Connect, SAML 2.0 등 표준 프로토콜을 지원하여 다양한 시스템과의 통합이 가능합니다.
소셜 로그인 통합 Google, Facebook 등 소셜 로그인을 쉽게 구현할 수 있습니다.
강력한 보안 기능 2단계 인증, 비밀번호 정책, 세션 관리 등 다양한 보안 기능을 제공합니다.
오픈소스 무료로 사용 가능하며, 활발한 커뮤니티 지원과 지속적인 업데이트가 이루어집니다.
확장성 REST API를 통한 통합이 용이하며, 커스터마이징이 가능한 유연한 아키텍처를 제공합니다.

 

2) 일반 사용자와 소셜 로그인 매핑


💡 일반 사용자와 소셜 로그인 매핑

- Keycloak에서 제공하는 기능으로, 기존의 일반 사용자 계정과 소셜 로그인으로 생성된 계정을 연결하는 프로세스입니다.

- 단일 사용자 계정으로 여러 로그인 방식 사용 가능합니다.
- 기존 계정의 데이터와 권한을 소셜 로그인에서도 유지할 수 있습니다.
- 사용자 경험 향상 및 계정 관리 효율성 증대가 됩니다.

 
 

1. 일반 사용자와 소셜 로그인 매핑 처리 과정


💡 일반 사용자와 소셜 로그인 매핑 처리 과정

1. 소셜 로그인 시도 시 이메일 주소 확인
2. 동일한 이메일을 가진 기존 계정 검색
3. 일치하는 계정이 있을 경우 계정 연동 옵션 제공
4. 사용자 확인 후 계정 통합 진행

 
 

3) 일반 사용자와 소셜 로그인 매핑 환경 구성


 

1. Keyclaok 관리자 페이지 접근 > Identity providers 탭 > 소셜 로그인을 선택합니다.


 
 

2. Mappers 탭 > Add mapper 버튼을 누릅니다.


 

 
 

3. Add Identity Provider Mapper


💡 Add Identity Provider Mapper

- 소셜 로그인 제공자로부터 받은 사용자 정보를 Keycloak의 사용자 속성으로 매핑하는 설정을 추가하는 화면입니다.
필드명 설명
Name 매퍼의 고유 식별자로 사용되는 이름입니다. 관리자가 쉽게 식별할 수 있는 의미 있는 이름을 지정해야 합니다.
Sync Mode Override 사용자 데이터 동기화 방식을 설정합니다.
Mapper Type 매핑 유형을 지정합니다. Attribute Importer는 소셜 제공자의 속성을 Keycloak 사용자 속성으로 가져오는 역할을 합니다.
Social Profile JSON Field Path 소셜 로그인 제공자로부터 받은 JSON 응답에서 가져올 필드의 경로를 지정합니다.
User Attribute Name 매핑된 값을 저장할 Keycloak 사용자 속성의 이름을 지정합니다. 예: email, firstName 등

 

 
 

💡 Sync Mode Override 속성 값
Sync Mode 설명 사용 시나리오
Inherit Identity Provider에서 설정된 기본 동기화 방식을 상속받아 사용합니다. 일반적인 상황에서 가장 권장되는 기본 옵션입니다.
Import 최초 로그인 시 사용자 정보를 가져오고, 이후 필요한 경우에만 업데이트합니다. 선택적인 업데이트가 필요한 경우 사용합니다.
Force 로그인할 때마다 사용자 정보를 강제로 동기화합니다. 실시간으로 소셜 제공자의 최신 정보가 필요한 경우에 사용합니다.
Legacy 최초 로그인 시에만 정보를 가져오며, 이후에는 업데이트하지 않습니다. 초기 데이터만 필요하고 이후 수동으로 관리하는 경우에 사용합니다.

 
 

💡 Mapper Type 속성 값과 사용 사례
Mapper Type 설명 사용 시나리오
Attribute Importer 소셜 로그인 제공자의 사용자 속성을 Keycloak 사용자 속성으로 직접 매핑합니다. 기본적인 사용자 정보(이메일, 이름 등)를 매핑할 때 사용합니다.
User Property Importer 사용자의 기본 속성을 매핑합니다. username, email, firstName, lastName 등 기본 속성 매핑 시 사용합니다.
JSON Path Claim Mapper 복잡한 JSON 응답 구조에서 특정 값을 추출하여 매핑합니다. 중첩된 JSON 구조에서 특정 데이터를 추출해야 할 때 사용합니다.
Hardcoded Role 소셜 로그인 사용자에게 특정 역할을 자동으로 할당합니다. 모든 소셜 로그인 사용자에게 동일한 역할을 부여해야 할 때 사용합니다.
Hardcoded Attribute 소셜 로그인 사용자에게 고정된 속성값을 설정합니다. 모든 소셜 로그인 사용자에게 동일한 속성값을 지정해야 할 때 사용합니다.
Hardcoded Group 소셜 로그인 사용자를 특정 그룹에 자동으로 할당합니다. 모든 소셜 로그인 사용자를 특정 그룹에 자동 배정해야 할 때 사용합니다.
Hardcoded User Session Attribute 소셜 로그인 사용자의 세션에 고정된 속성을 설정합니다. 사용자 세션에 특정 속성을 추가해야 할 때 사용합니다.
Username Template Importer 특정 템플릿을 기반으로 사용자 이름을 생성합니다. 사용자 이름을 특정 패턴이나 규칙에 따라 자동 생성해야 할 때 사용합니다.

 
 

4. Provicder details 내에 생성을 확인하였습니다.


 
 

4) 일반 사용자와 소셜 로그인 매핑


1. 사용자 확인


💡 사용자 확인

- 아래와 같이 adjh54ir@gmail.com이라는 이미 이메일을 사용하는 사용자가 있습니다.

 
 
 

2. 소셜 로그인 : Google Login


💡 외부 로그인 : Google Login

- 위에 지정한 이메일을 기반으로 소셜 로그인을 수행합니다.

 

 
 

3. Account alerady exists > Add to existing account 버튼을 누릅니다.


💡 Account alerady exists > Add to existing account 버튼을 누릅니다

- User with email adjh54ir@gmail.com already exists. How do you want to continue? 라는 메시지가 출력이 되었고, Revices profile과 Add to exisitng account라는 버튼이 출력이 되었습니다.
- 이는 adjh54ir@gmail.com 라는 이메일이 중복이 발생하는데 이를 수정할것인지 아니면 기존에 계정에 추가할지에 대한 선택입니다.
- 기존의 일반 사용자 계정에 소셜로그인을 추가하는 과정이므로 ‘Add to existing account’ 버튼을 누릅니다.

 
 
 

4. 로그인 페이지로 이동


💡 로그인 페이지로 이동

- 해당 버튼을 눌렀을때, 일반 사용자 계정과 소셜 로그인 계정이 매핑이 되고 로그인페이지로 리턴되었습니다.
- 해당 부분에서 일반 사용자의 사용자 인증을 수행합니다. 

 

5. 관리자 페이지 > Users > 일반 사용자 > Identity provider links 선택


💡 관리자 페이지 > Users > 일반 사용자 > Identity provider links 선택합니다.

- 관리자 페이지에서 사용자 상세 정보를 확인하여서 매핑이 되었는지 확인하였습니다.

 
 

6. 소셜 로그인 수행 확인


 
 
 

7. 정상적으로 로그인이 되고 토큰을 리턴받음을 확인하였습니다.


 

 
 
 

오늘도 감사합니다 😀
 
 
 
 

그리드형