새소식

Keycloak

0. Keycloak 이란?

  • -

History

  • JBoss 팀으로부터 Open Source Project로 개발 시작
  • 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

  1. keycloak github, https://www.keycloak.org/
  2. 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

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.