- Red Hat에서 개발한 오픈소스 Identity and Access Management(IAM) 솔루션입니다. 현대적인 애플리케이션과 서비스를 위한 인증 및 권한 부여 기능을 제공하는 인증 서버(Authentication Server)의 기능을 수행합니다.
- Keycloack에서는 여러 플랫폼에서 중앙 집중식 인증 서버로 동작을 합니다. 주요한 기능은 서로 다른 도메인에서 실행되는 애플리케이션 간의 SSO를 지원하거나 REST API 기반에 접근제어 토큰에 대한 인증 제공 및 세션 타임아웃, 동시 로그인 제한과 같은 다양한 세션 기능을 담당합니다.
- Docker에서 지정한 포트를 기반으로 접근하여, 최초 지정한 아이디/패스워드인 ‘admin/admin’을 입력하면 아래와 같이 관리자 페이지가 출력이 됩니다. - 최초 접근을 하면 master realm이 구성됨을 확인할 수 있습니다. 이는 독립적인 영역인 realm으로 생성이 되었습니다. - 이 과정에서 새로운 realm을 구성해봅니다.
[ 더 알아보기 ]
💡 Master Realm에서 작업을 해도 되지 않을까? 추가 Realm을 생성하는 이유는 뭘까?
- 추가적인 realm을 만드는 이유는 Master Realm 내에서는 '슈퍼 관리자 계정'이 포함되어 있습니다. 이 슈퍼 관리자 계정은 다른 realm들의 생성, 수정, 삭제와 같은 관리 작업을 수행할 수 있습니다. - 해당 공간에서는 보안상의 이유로 일반 사용자의 인증용으로는 사용하지 않는 것이 권장이 되며, 실제 서비스를 위해서는 별도의 realm에서 생성하고 사용해야 합니다.
1.1. Create realm을 누릅니다.
1.2. Create realm
💡 Create realm
- 기존에 설정된 정보를 JSON 파일 형태로 업로드해서 새롭게 구성하거나 완전히 새로운 Realm을 구성할 수 있습니다.
분류
설명
리소스 파일(Resource file)
기존 Realm 설정을 JSON 파일로 업로드하여 새로운 Realm을 생성할 수 있습니다.
영역 이름(Realm name)
새로 생성할 Realm의 고유한 이름을 지정합니다. 필수 입력 항목입니다.
활성화(Enabled)
Realm의 활성화 여부를 설정합니다. 체크하면 즉시 사용 가능한 상태가 됩니다.
💡 [참고] Realm settings > Action으로 이동하면 기존의 Realm에 대한 정보가 export가 됩니다.
- Include groups and roles : 그룹 및 역할을 포함한 - export - Include clients : Client를 포함한 export
2. Client 생성하기
💡 Client 생성하기
- 구성한 Realm내에 애플리케이션 또는 서비스에 해당하는 Client를 생성합니다.
2.1. Create client를 선택합니다.
💡 Create client를 선택합니다.
- 새롭게 구성한 realm 내에 client를 생성합니다.
2.2. General settings
💡 General settings
- Client를 생성할 때 기본적인 설정을 하는 단계입니다.
설정
항목
설정 설명
Client ID
-
클라이언트를 식별하는 고유한 ID입니다. 필수 입력 항목입니다.
Name
-
클라이언트의 표시 이름입니다. 관리자 콘솔에서 보여지는 이름입니다.
Description
-
클라이언트에 대한 설명을 입력할 수 있습니다.
Always display in console
-
관리자 콘솔에 항상 표시할지 여부를 설정합니다.
Client Type
OpenID Connect
OAuth 2.0을 기반으로 하는 인증 프로토콜로, JWT(JSON Web Token)를 사용하여 사용자 인증 정보를 안전하게 전달합니다. 주로 모던 웹/모바일 애플리케이션에서 사용됩니다.
Client Type
SAML
Security Assertion Markup Language의 약자로, XML 기반의 보안 표준입니다. 주로 엔터프라이즈 환경에서 사용되며, 조직 간 SSO(Single Sign-On)를 구현하는 데 널리 활용됩니다.
💡 기본적으로 사용되는 OIDC(OpenId Connect)를 이용하여서 구성하며, 클라이언트 아이디를 입력하였습니다.
2.2. Capability config
💡 Capability config
- Client의 기능과 관련된 설정을 구성하는 단계입니다.
분류
상세 분류
설명
Client authentication
-
클라이언트 인증을 활성화합니다. 보안을 위해 클라이언트 시크릿이 필요합니다.
Authorization
-
세밀한 권한 제어가 필요한 경우 활성화합니다. 리소스, 정책, 권한 등을 관리할 수 있습니다.
Authentication flow
Standard Flow
OAuth 2.0의 Authorization Code Flow를 사용하는 전통적인 웹 애플리케이션에서 사용되는 표준 인증 방식입니다.
Authentication flow
Direct Access Grants
사용자 이름과 비밀번호를 직접 사용하여 토큰을 얻는 방식으로, 신뢰할 수 있는 애플리케이션에서 사용됩니다.
Authentication flow
Implicit Flow
브라우저 기반 애플리케이션을 위한 간소화된 OAuth 2.0 흐름입니다.
Authentication flow
Service Accounts Roles
클라이언트 자체가 직접 API를 호출할 때 사용하는 인증 방식입니다.
Authentication flow
OAuth 2.0 Device Authorization Grant
스마트 TV나 IoT 기기와 같이 제한된 입력 기능을 가진 디바이스를 위한 인증 흐름입니다..
Authentication flow
OIDC CIBA Grant
Client Initiated Backchannel Authentication 흐름으로, 클라이언트가 사용자 장치를 통하지 않고 인증을 시작할 수 있게 합니다.
💡 테스트를 위해서 우선, 모든 OIDC 인증 플로어 종류를 선택하였습니다.
- 해당 인증 플로어를 이해하고 선택을 해야 합니다.
💡 [참고] 해당 OIDC 인증흐름 종류에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
// 접속 경로
http://localhost:9001/realms/test-loc-realm/protocol/openid-connect/auth?client_id=react-app&response_type=code&redirect_uri=http://localhost:8080/api/v1/keycloak/callback
💡 위에 구성한 경로로 접근하였을 때 test-loc-realm이라는 realm에 접근하는 로그인 화면이 출력되었습니다.
- 위에 구성한 경로로 접근하였을때 test-loc-realm이라는 realm에 접근하는 로그아웃 화면이 출력되었습니다.
// 경로 접근
http://localhost:9001/realms/test-loc-realm/protocol/openid-connect/logout?redirect_uri=http://localhost:8080/api/v1/keycloak/logout&client_id=react-app