Keycloak
0. Keycloak 이란?
- -
History
- JBoss 팀으로부터 Open Source Project로 개발 시작
- Project Leader : Stian Thorgersen (https://github.com/stianst)
- 2014년에 RedHat에게 인수
- 상용 버전으로 RH-SSO (RedHat Single Sign-On) 출시
- Keycloak(Opensource, Community version)에 대한 기술 지원 중지
- RH-SSO에 대해서만 기술 지원
- 기존 JBoss Keycloak은 오픈소스로 남아있으면서, JBoss를 Wildfly로 명칭 변경
- 여러 모듈에서 JBoss와 Wildfly가 혼용되고 있으나, 같은 회사를 의미
의미
- Open Source IAM for modern Applications and Services - [1]
- Web app과 RESTful web service를 위한 SSO solution - [2]
- Network에서 관리하는 독립된 서버 - [2]
- Browser application에서 keycloak authentication server로 redirection하여 credential을 입력하는 방식 - [2]
- user가 application과 분리되어 있고, application이 user의 credential을 절대 보지 못하는 방식
- application에는 cryptographically signed identity token or assertion이 제공됨
- token에는 사용자 이름, 주소, 이메일 등의 profile data, ID information이 있을 수 있고, authorization data가 있을 수도 있음
License
- Apache License 2.0
Server
기능
- Single-Sign On, Single-Sign Out
- OpenID Connect
- OAuth 2.0
- SAML
- Identity Brokering (외부 OIDC나 SAML idP에 대해 Authenticate)
- Social Login (구글, 깃허브, 페이스북, 트위터 등 소셜 네트워크를 통한 로그인)
- User Federation (LDAP, Active Directory 서버와 동기화)
- Kerberos bridge (Keycloak Server의 Authenticated User를 자동으로 인증)
- Customizing user facing page (User용 페이지 커스터마이징 가능)
- Two-factor Authentication (Google Authenticator, TOTP/HOTP (FreeOTP))
- Login Flow (비밀번호 복구, 이메일 인증, 비밀번호 업데이트 요구, 유저 자체 인증 등)
- Session Management (user session 목록 보기, 관리 가능)
- Token mappers (user attribute, role 등을 원하는대로 token, statement에 mapping)
- Not-before revocation policies per realm, application, and user (token이 손상된 경우, 해당 날짜 이전에 발행된 token 무효화)
- CORS - in Client adapter
- SPI (Authentication flow, User Federation 공급자, Protocol mappers 등 Serverside customizing)
- Client adapter (javascript application, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring 등)
- OIDC Relying Party나 SAML 2.0 Service Provider Library를 가진 모든 platform/language 지원
Core Concepts and Terms
- User
- System에 login 가능한 Entity
- Credentials
- Keycloak이 user의 identity를 verify하는 데 필요한 data
- password, OTP, digital certificates, fingerprints 등
- Roles
- user의 type 또는 category를 식별
- Admin, user, manager, employee 등 (Typical)
- user role mapping
- user는 0개 이상의 roles와 연결 가능
- role mapping information은 token이나 assertion에 캡슐화되어, application이 access permission을 결정
- composite roles
- role과 연결될 수 있는 role
- superuser는 sales-admin과 order-entry-admin과 연결될 수 있음
- 이 때 superuser에 mapped된 user는 sales-admin role임과 동시에 order-entry-admin role
- Groups
- user group을 관리
- Attribute를 정의할 수 있음
- role을 group에 mapping할 수 있음
- group에 속한 user는 group의 attribute와 mapped role을 상속받음
- Realms
- user, credential, role, group의 집합을 관리
- user는 realm에 login하고 소속됨.
- realm은 서로 분리되어 있으며, 각자 제어하는 user에 대해서만 관리하고 authenticate
- Clients
- user를 authenticate하기 위해, Keycloak을 request할 수 있는 entity
- 스스로 보호하고 SSO를 구축하려는 Application, 또는 네트워크의 다른 서비스를 안전하게 호출하려는 Entity 등
- Client adapters
- Keycloak과 통신하고, 보안을 유지할 수 있도록 Application Environment에 설치하는 Plugin
- Consent
- client가 authentication process에 참여할 수 있기 전에 admin이 user에게 permission을 부여하려는 경우
- user가 credential을 제공하면, Keycloak이 login을 요청한 client와 user에게 요청받은 identity information을 식별하는 화면을 띄움
- User는 request를 승인할 지 여부를 선택 가능
- Client scopes
- client가 등록되면, 해당 client에 대한 protocol mapper와 role-scope mapping을 정의해야 함
- client scope를 저장하여, 공통된 설정을 공유하는 방법으로 새로운 client를 더 쉽게 생성
- scope parameter의 값에 따라 조건부로 claim 또는 role을 요청하는 데 유용
- client role
- client는 자신에게 특정한 role을 정의할 수 있음. (Client 전용 Role name space)
- identity token (ID Token)
- user의 identity information을 제공하는 token. (OIDC 사양의 일부)
- access token
- invoke되는 service에 대한 access를 grant하는 HTTP request로 제공될 수 있는 token. (OIDC 사양의 일부)
- Assertion
- user의 information
- XML blob (authenticated user에 대한 identity metadata를 제공하는 SAML authentication 응답에 포함)의 형태
- Service account
- 각 client에 기본적으로 제공되는 access token을 얻을 수 있는 account
- direct grant
- client가 REST invocation을 이용해 user 대신 access token을 얻는 방법
- protocol mappers
- 각 client에 대해 OIDC token이나 SAML assertion에 저장된 claim과 assertion을 조정(tailor)
- client별로 protocol maptter를 생성, 설정
- Session
- User가 login하면 login sesion을 관리하기 위해 session이 생성
- user가 login한 시기, 해당 세션에서 SSO에 참여한 application 등의 정보를 포함
- admin과 user 모두 session information을 볼 수 있음
- user federation provider
- 이미 user와 credential information을 관리하는 LDAP 또는 Active Directory service가 있을 때, Keycloak을 통해 이러한 저장소로부터 credential을 validate하고 identity information을 가져올 수 있음(pull)
- IDP (identity Provider)
- user를 authenticate할 수 있는 service
- keycloak이 포함됨
- IDP federation
- 하나 이상의 IDP에 authentication을 delegate(위임)하도록 Keycloak을 설정할 수 있음
- e.g. Facebook 도는 Google+를 통한 login
- 타 OIDC 또는 SAML 2.0 IDP에 인증을 위임할 수 있음
- IDP mappers
- IDP federation을 수행할 때, 들어오는 token과 assertion을 user 및 session attribute에 mapping
- 외부 IDP에서 authentication을 요청하는 client로 identity information을 propagate하는 데 도움
- required actions
- user가 authentication process 중에 수행해야만 하는 action
- user가 required actions을 완료하기 전까지는 authentication process가 완료되지 않음
- e.g. admin가 user가 매달 password를 변경하도록 예약
- authentication flows
- user가 system의 특정 부분과 interaction해야 할 때 수행해야 하는 workflow
- login flow
- login 시 필요한 credential type을 정의할 수 있음
- registration flow
- user가 꼭 입력해야 하는 profile information과 reCAPTCHA와 같이 bot을 구별하기 위해 사용하는 무엇인가를 정의
- Credential reset flow
- user가 password를 reset하기 전에 수행해야 하는 작업 정의
- Event
- admin이 보고, 연결할 수 있는 audit stream
- Themes
- Keycloak의 모든 screen은 theme으로 제공
- 필요에 따라 override될 수 있는 HTML template과 stylesheet로 정의
Reference
- keycloak github, https://www.keycloak.org/
- keycloak Server administration guid, https://www.keycloak.org/docs/11.0/server_admin/
'Keycloak' 카테고리의 다른 글
v11 vs v20.0.3 Dependency 차이 조사 (0) | 2023.01.18 |
---|---|
keycloak docker inspection (0) | 2021.05.07 |
Keycloak (0) | 2021.04.30 |
Contents
소중한 공감 감사합니다