인증, 인가를 관리하고 SSO 로그인을 제공하는 오픈소스 'Keycloak'

2023년 4월 2일

#infra

Keycloak?

Keycloak은 ID 및 액세스 관리 솔루션을 제공하는 오픈소스입니다.

인증(Authentication)인가(Authorization)를 쉽게 해주고 SSO(Single-Sign-On) 기능을 제공합니다.

Kubernetes, MSA 환경에 최적화 된 솔루션입니다.


SSO?

SSO(Single-Sign-On)는 한 번의 로그인을 통해, 연결된 다른 사이트들을 자동으로 접속해 이용할 수 있게 하는 서비스입니다.

하나(Single)의 아이디와 패스워드를 통해(Sign) 여러 시스템에 접근(On)할 수 있도록 하는 통합 인증 솔루션이라고 정리할 수 있습니다.

SSO 활용 사례

일반적인 인증, 인가 시스템을 살펴보면, 각 서비스에서 각 DB에 사용자 정보가 있고 그 정보를 통해서 로그인을 관리합니다. 하지만 필요에 따라 사용자 정보를 연동하여 사용해야 하는 경우가 발생합니다.

이런 경우에 SSO 기능을 사용할 수 있으며, 하나의 시스템에서 인증을 할 경우 그와 연결된 다른 시스템에서는 인증 정보가 있는지 없는지를 확인하여 이후 처리를 하도록 설계하는 것입니다.

  • Ex. 회사 내부에서 다양한 시스템을 운영하고 있는 경우, 각 DB에 사원 정보를 중복으로 관리하기 보단, SSO 인증 방식을 활용하는 것이 적합합니다.

제공 기능

  • SSO
  • ID 중개 와 소셜 로그인 (OpenID, SAML, GitHub, Google 등)
  • 관리자 / 계정관리 콘솔 제공
  • 표준 프로토콜 지원(OpenID Connect + OAuth2.0, SAML)
    • OIDC : Oauth 2.0의 확장 인증 프로토콜로, 인증(증명, token…)에 초점을 맞춥니다.
    • OAuth 2.0 : 권한 부여 프레임워크로, 데이터에 대한 액세스 권한 부여에 초점을 맞춥니다. (인증 프로토콜 X)
    • 둘은 목적에 차이가 있으며, keyCloak은 기본 인증 방식이 OAuth 2.0을 베이스로 하는 OIDC 입니다.
  • 다수의 플랫폼과 프로그래밍 언어가 사용가능한 adapter를 가짐

주요 용어

  • Realm (랠름)

    • 인증, 권한 부여가 적용되는 범위의 단위입니다.
  • Client

    • Client는 인증, 권한 부여 행위를 수행할 어플리케이션을 나타내는 단위입니다.
    • 하나의 realm 안에는 다수의 client가 들어갈 수 있으며, realm의 관리자가 각각의 client를 관리할 수 있습니다. client는 보통 서비스 단위로 생성되고 관리한다고 합니다.
  • User

    • 인증을 필요로하는 사용자를 나타냅니다.
    • 기본적인 User 정보는 username, email, firstname, lastname으로 구성되어 있지만, custom user attribute를 사용하여 원하는 속성을 추가할 수 있습니다.
    • (+ custom attribute가 사용자 등록 및 관리 화면에도 노출되기 위해서는 커스텀 테마 등록 및 수정이 필요하다고 합니다.)
  • Role

    • User에게 부여할 권한을 나타냅니다.

Keycloak 구축하기

로그인 과정

로그인 과정

  • 주로 아래 내용들이 커스텀 할 수 있는 기능입니다.
    • 외부 저장소 연동
    • 로그인 로직
    • 로그인 페이지에 대한 설정

User Storage Federation (외부 저장소 관련 기능)

Keycloak 에서는 3가지 방식의 연동을 지원합니다.

  • LDAP
  • Kerberos
  • User Storage SPI

Authentication SPI (인증 로직 수정 관련 기능)

로그인 관련 로직을 추가할 때 활용할 수 있습니다. 아래는 예제 케이스입니다.

  • 로그인 가능한 아이디 종류를 늘린다. (사원번호, 이메일, 아이디 등…)
  • 5회 비밀번호 틀릴시, 계정을 임시 잠금 상태로 바꾼다.
  • 임시 잠금 상태의 계정으로 로그인시, 비밀번호 변경 화면으로 이동시킨다.

Theme (로그인 페이지 수정 기능)

  • 커스텀한 로그인 페이지를 노출시킬 수 있습니다.

Profile picture

주희(Joy)
가치를 고민하는 과정을 함께해요