Keycloak 인증 솔루션 선택 – 그리고 ext개발

관련기술 모음

Keycloak vs CAS 선택은

국내에서는 Springboot을 많이 쓰다보니 CAS를 많이 쓸 것 같지만
사용의 난해성 때문에 Keycloak이 더 많이 사용된다
Keycloak에서 커스터마이징 해서 추가기능은 구현할 수 있지만 약간의 문제가 있다
– 별도 인스턴스를 띄워야한다는 문제
– 기본지원되는 형태로 사용해야하는 문제
극한의 커스터마이징을 하려면… 그냥 따로 만드는게 낫다
서비스 초반에는 있는 그대로 쓰자….

CAS는 뭔가 실행하는 것도 매우 힘들고 라이브러리처럼 사용해야하는데 그것도 힘들다. 도큐먼트도 없고… 그냥 인증스펙 구현을 어떻게 했는지 참고하는 코드로 쓰기는 좋다
https://memo.polypia.net/archives/3783

간단하게 결론을 내면
뭘 쓰건 기본기능 그대로 쓸게 아니라면 사용이 쉽지는 않다.

초반에는 서비스를 오픈소스에 맞춰서 쓰자

Keycloak 사용후기

개인적인 경험으로 봤을 때 keycloak이 CAS보다 간단하다.
그냥 기본기능을 가지고 사용하기도 쉽고
추가기능 구현한달정도 보다보니 구조파악이 되고 좀 할만해졌다

JBoss기반으로 만들어져서 Spring생태계에 익숙한 개발자가 접근하기 쉽지는 않다
jas-rx 기반 resteasy, wildfly 서버, jboss의존성 관리 등등..
그냥 도큐먼트만 보고 하려면 rest api 호출하는것도 쉽지가 않다.(공식문서에 주소를 엉터리로 적어놔서 ㅋ)
keycloak 소스코드와 인터넷 질문답변을 잘 읽어봐야한다
그리고 샘플 확장코드들

  • https://github.com/keycloak
  • https://github.com/ScriptonBasestar-io/keycloak-providers
  • https://github.com/thomasdarimont/keycloak-user-storage-provider-demo
  • https://www.baeldung.com/java-keycloak-custom-user-providers
  • https://github.com/thomasdarimont/keycloak-extension-playground
  • https://github.com/zonaut/keycloak-extensions

Keycloak 문제점? 헷갈리는 포인트

Keycloak 설명

오픈소스
회원관리 oauth2-oidc, saml 서버기능 지원
외부 Oauth 소셜로그인 지원(구글,페북,인스타..등)

헷갈리는 점

이해를 못해서 헷갈리는 점 말고 설계가 잘못됐다고 생각하는 부분

import가 아니고 partial import

json으로 export하고 import 한다고 하면 서버 설정전체를 집어넣고 내보내는거라고 생각하기 쉬운데
지원되는 항목이 정해져 있다
추가기능으로 설치한것들은 지원이 안되는 것 같다

rabbitmq EventListener를 추가했더니 export는되는데 import가 안된다

기본 client

realm을 처음 생성할 때 clients가 생성된다

  • {realm_name}-realm 이건 렐ㅁ을 생성할 때 마다 master 렒에 추가된다
  • master-realm은 master 렒의 Clients에 추가된다
  • account 계정관리 권한 이걸 지우면 로그인도 안된다 https://keycloak.com/auth/realms/master/account/
  • account-console 콘솔로그인 권한
  • account-cli
  • broker 소셜로그인 권한인가
  • security-admin-console

기본 옵션을 클라이언트에 달아놓은게 맘에 안들어.. 수정/삭제 버튼도 달려있다.

role

기본 client의 문제가 이어진다

기본 client는 고유 권한을 가지고 있다.

keycloak에서는 previlege를 별도로 관리하지 않아서
고유 client가 role이라는 이름으로 previlege(role)을 들고있다
소스에 보니까 string으로 선언이 돼 있어서 이름만 같으면 되나 싶어서
같은 이름 생성 해 봤는데… 이름같아서 헷갈리기만 하도 안된다

전체에서 관리되는 role과 client에서만 관리되는 role 그리고 기본client의 role이 별도로 존재한다고 봐야할까

새로운 client에 previlege를 부여하려면 composite roles를 선택해서 기본 client의 previlege를 associate 해야한다

그냥 잘못 만든 점

Events – Evnets Config에서

EventListeners를 설정하고 evnet종류를 지정할 수 있는데

EventListener가 한개일 때는 괜찮은데 여러개일 때
리스너 종류에 따라 다른 이벤트 설정을 못 하게 돼 있다.

ex) jboss-logging이 기본인데 이건 전부 수신하고
email로는 회원가입만 보내고 싶다… 라면..?? 이거 안된다.

User – Role – Previlege

구분이 좀 됐으면

아쉬운 점

플러그인 참여가 오픈되어있지 않다

사용자가 꽤 많은 것 같은데 기본지원되는 소셜로그인 말곤 따로 만들어야된다
커뮤니티 좀 활성화 돼 있으면 사람들이 알아서 만들고 할텐데

과도한 커스터마이징 미지원

버전이 14까지 올라갔는데 지원이 안되고 있네
좀 시도해볼만하지 않나
oauth말고 그냥 서비스 특화된 방식

커스텀 필드

되긴되는데 좀 불편

주소 문제

https://auth.service.com
/ 주소는 무슨 홍보페이지같은거고
/auth가 실제 서비스 주소가 된다
/auth/realms/master 처럼 주소가 나온다

기본 서비스 clients랑 같은 문제인데… master realm, 서비스 어카운트 등은 일반사용자와 다른 테이블에 다른 차원으로 관리되는게 좋은데 개인적으로는

각 렒별로 주소를 별도로 할당하고싶기도 한데 그것도 안된다
누가봐도 keycloak를 쓰고 있다는걸 알 수 있는 상태로 오픈해야한다

reverse proxy로 처리하면 할 수는 있을 것 같은데 좀 봐야겠다

hmm

초기서비스용으로 좋고
학습용으로 좋ㅏ

암호화폐 거래소 프로젝트

오픈소스 프로젝트

  • peatio
    https://rubykube.io/#
    https://github.com/openware/peatio
    https://github.com/rubykube/peatio-trading-ui
    https://github.com/rubykube/peatio-react
    https://github.com/peatio/helm-charts
  • CoreCX
    https://bitbucket.org/account/user/margincallio/projects/MRGC
  • WLOX
    https://github.com/wlox/wlox/
  • bitex
    https://github.com/blinktrade/bitex
  • viabtc
    https://github.com/viabtc/viabtc_exchange_server
  • OpenDAX
    https://github.com/openware/opendax

상용 프로젝트

이건 그냥 서비스 중인 회사들

프로젝트별 특징

Peatio

개발언어: RubyOnRails
데이터 저장소: Mysql