오랜 꿈이였던 SSO 시스템을 구축하기 위해 Spring과 호환성이 좋은 Keycloak을 이용하려 했다. 헌데 문제는 keycloak이 버전 16부터 대격변이 일어났는지 세팅하는 것이 많이 바뀌었다는 것이다. 아무래도 최신 버전을 사용하는 것이 좋아보이기에 17버전을 SSO 시스템에 사용하기로 마음먹었다.
Keycloak 설치 및 실행
https://github.com/keycloak/keycloak/releases/download/17.0.1/keycloak-17.0.1.tar.gz
위 링크를 클릭하면 바로 keycloak 17 버전을 다운로드 받을 수 있다. 처음에는 keycloak에서 dev 환경에서 시작하는 것을 권장하고 있지만 언젠가 product 모드로 배포해야 하기 때문에 product 모드로 실행할려고 한다.
하지만 product 모드로 시작하면 대부분 로컬 환경에서 시작하기 위해 별도의 설정이 필요하다.
conf 폴더 밑에 keycloak.conf 설정 파일이 있다. 몇가지를 추가해줘야 한다.
hostname-strict=false
hostname-strict-https=false
http-enabled=true
http-port=5010
http-relative-path=/auth
위의 설정값을 conf 파일에 추가해주었다. 먼저 https 아니면 product 모드로 접속 못하는데 이를 해제해주었다.
그리고 추가로 port를 5010으로 설정해주었는데 기존에 다른 버전으로 테스트한 8000번대 포트를 사용시 admin 로그인 부분에서 오류가 생겼는데 (아직도 이유는 모르겠다) 5000번대로 설정해주니 잘 동작하였다.
초기 admin 아이디,비밀번호는 admin, admin 인듯 하다.
만약 초기 admin을 수동으로 지정하고 싶다면 아래 명령어를 쳐주면 된다.
exprot KEYCLOAK_ADMIN=admin
export KEYCLOAK_ADMIN=admin
sudo -E bin/kc.sh
외부 DB 연동 설정
keycloak은 기본적으로 내부 h2 데이터베이스를 사용한다. 하지만 관리 측에서 외부 db를 사용하고 싶을 것이다.
이전 15버전 이하에서는 이 db 설정하는 것이 개인적으로 매우 힘들었는데 17 버전부터는 정말 편해졌다.
1. keycloak 외부 db driver 다운로드
bin/kc.sh build --db mariadb // 여기는 db driver 이름 입력하면 된다.
이러면 자동으로 외부 driver를 가지고 오는듯 하다.
2. db 설정
keycloak.conf 파일에 들어가서 db 설정을 해준다.
db=mariadb
db-username=[db id]
db-password=[db password]
db-url=jdbc:mariadb://[db 주소]
여기까지 db 세팅 완료이다. 다음 포스팅부터는 본격적으로 keycloak을 이용해 sso를 구축하겠다.