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. 정상적으로 로그인이 되고 토큰을 리턴받음을 확인하였습니다.


오늘도 감사합니다 😀
그리드형