keycloak 이란?
Redhat에서 개발한 인증 & 인가 오픈소스 솔루션이며, 타 서버 계정 시스템과의 연동, 통합인증 등 다양한 인증 연동 기능도 가지고 있는 오픈소스 솔루션이며, 구축 방법으로는 컨테이너 이미지, standalone application, clustering 등으로 구축할 수 있으며, spring boot 에서는 내장 인증, 인가 솔루션으로도 사용할 수 있다.
keycloak 에서 제공하는 기능은 아래와 같다.
- SSO
- 소셜 로그인 (Ex. Google, Facebook, Naver, Kakao, Github 등)
- 2차 인증(Two factor authentication - ex. Google OTP)
- LDAP 기반 User Federation
- OAuth Provider 역할 (Identity Provider)
- 관리자 Admin Console 제공
- 다양한 인증, 인가 프로토콜 사용 가능(OAuth, SAML, OIDC)
keycloak 을 사용하기 앞서 용어 먼저 이해하고 시작합시다.
SSO(Single Sign On)
- 1번의 로그인으로 여러 Application 에 접속할 때, 별도의 로그인 과정 없이 자동으로 인증 가능.
OAuth
- 위임 권한 프로토콜이며, 사용자가 별도의 password 입력 없이 타 서비스의 데이터에 접근 가능하도록 한다.
- 주로, 인증보다는 3rd Application 의 API 사용을 위한 인가 메인 목적
SAML
- 가장 오래된 인증 & 인가 프로토콜
- 웹 사이트에는 적합하지만, 모바일 어플리케이션은 적합하지 않음. (why? saml 은 xml 을 사용하여 response length 가 상당하다고 알려져있음)
OIDC (OpenID Connect)
- OAuth 와 SAML 프로토콜을 보완한 개념
- OAuth 2.0 은 3rd Patry API 사용 인가가 메인 목적
- OpenId Connect 는 통합인증, SSO 가 목적
- OpenId Connect 는 인증 이 메인이며, OIDC 는 access token 뿐만 아니라, id token(jwt 형태, 누가 인증하고 해당 사람의 정보, 발행자가 누구인지...) 까지 사용
OpenID Connect vs OAuth 2.0
Keycloak Architecture
Keycloak 에서 Realm 은 인증, 인가 영향을 끼치는 총 범위의 개념이고, Realm 내 Users, Groups, Roles, Clients 등이 포함된다.
- User : Realm 내 등록된 사용자
- Group : Realm 내 특정 사용자, 권한을 가진 그룹
- Role : Realm 내 권한 정보
- Client : Keycloak 을 통해 인증, 인가 기능을 제공하는 web application
다음 장에서는 keycloak 을 설치해보고 web application 을 활용해서 인증, 인가를 어떻게 실행하는지를 게시할 예정입니다.
블로그 자료로는 부족할 수 있어서, 아래 관련 참고자료를 확인하시면 도움이 될 것 같습니다.