들어가기 전 💬
회사에서 Keycloak을 도입할 예정이라 관련 문서와 세팅 방법을 찾아보게 되었다.
정확히 Keycloak이 무엇인지, 왜 쓰는지 전혀 무지한 상태에서 찾아보기 시작했고, 어마어마한 삽질이 시작되었다😂
Keycloak은 인증을 대신 담당해주는 오픈소스인데, 회사 내부에 보안 전문가가 있는 것이 아니니까 계속해서 생기는 모든 보안 취약점에 대해 내부 엔지니어들이 대처할 수 없기 때문에 인증 자체를 Keycloak에 넘겨주는 것이라는 정도만 CTO님께서 설명해주셨다. 그래서 딱 요정도의 얕디 얕은 정보만 가진 상태라 무엇을 찾아봐야 하는지, 그리고 뭐부터 해야하는지 굉장히 막막했다🥲
Keycloak 이란?
그래서 먼저 이 Keycloak이 무엇인지!부터 설명해보려고 한다. (Keycloak 공식 사이트에 나와있는 설명을 번역해보았다.)
Keycloak은 코드 변경 없이 인증과 자원 보호 기능을 제공하는 오픈 소스 솔루션이다. 표준 프로토콜을 기반으로 하며, OpenID Connect, OAuth 2.0, SAML을 지원한다. 인증 및 보안 코드를 직접 구현하지 않고도 애플리케이션에 인증을 추가하여 서비스를 보호할 수 있으며, 사용자를 저장하거나 인증할 필요가 없다.
Keycloak에서는 다양한 기능을 제공하는데, 각각은 다음과 같다.
Single-Sign On
각각의 서비스에서 로그인, 사용자 인증 및 사용자 저장 과정을 처리할 필요 없이 Keycloak 하나로 인증한다.
Keycloak에 로그인한 사용자는 다른 서비스 액세스를 위해 다시 로그인할 필요가 없고, Keycloak에서만 로그아웃하면 이를 사용하는 모든 서비스에서 모두 로그아웃된다.
Identity Brokering & Social Login
소셜 로그인이 필요할 경우, 별도의 코드 추가나 변경 없이 관리 콘솔을 통해 원하는 소셜 로그인 방식을 쉽게 추가할 수 있다.
혹은 관리 콘솔에서 기존의 OpenID Connect나 SAML 2.0으로 필요한 Identity Provider를 구성할 수 있다.
User Federation
LDAP나 Active Directory server 등 외부의 사용자 데이터베이스 연결을 지원한다.
다시 말하면, 외부 데이터베이스에 사용자 정보가 저장되어 있는 경우에 자체 공급자를 구현할 수 있도록 지원한다.
Admin Console
관리 콘솔을 통해 관리자가 Keycloak 서버를 중앙 관리할 수 있다.
콘솔에서는 다양한 기능을 활성 및 비활성화 할 수 있고, 애플리케이션 및 서비스를 생성/관리하고 세부적인 권한 부여 정책을 정의할 수 있다. 또한 권한 및 세션을 포함하여 사용자 관리가 가능하다.
Account Management Console
사용자가 본인의 계정을 관리할 수 있도록 계정 관리 콘솔을 지원한다. 프로필 업데이트, 비밀번호 변경, 2단계 인증 설정, 세션 관리, 계정 히스토리 조회가 가능하다.
또한 다른 소셜 로그인 방식을 연결하여 같은 계정에 로그인할 수 있도록 지원한다.
Authorization Service
세분화된 권한 부여 서비스를 지원한다. 관리 콘솔에서 모든 서비스에 대한 사용 권한을 관리할 수 있고, 필요한 정책을 정확하게 정의할 수 있다.
그래서 이제 뭐 해야된다고? 🤔
Keycloak이 뭔지 대충 알았으니까, 이제 로컬 환경에 Keycloak을 세팅해보도록 하자!
이어지는 포스트에서 설명할테지만 간단히 세팅할 환경에 대해 설명해보자면, Keycloak 서버를 Docker 컨테이너를 이용해 실행시키고, Spring Boot로 구성된 API 서버와 연동할 것이다.