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

2 minute read

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로 처리하면 할 수는 있을 것 같은데 좀 봐야겠다

좆같은 캐시

infinispan과 jpa 두 계층으로 데이터를 저장하는데
캐시를 굉장히 무겁게 사용하고 있는 것 같다
솔직히 잘 모르겠다. 그냥 좆같다
어디서 뭐가 저장 돼 있는지 따라갈수가 없어서 뭘 수정 할 수도 없다

RestEasy

이런 그지같은 rest api client는 스프링 web client 말고는 없다

호출 수백번 반복

회원가입할 때 저장을 수십번 하는 것 같은데
디비에 필드단위로 정규화한 데이터를 저장하는 병신짓은 아무도 안하는게 당연한데
그런식으로 저장하고 있는거 아닐까

성능

뭐 이따윈지

DDD

DDD를 잘 쓰려고 노력한 것 같은데
잘 하지는 못했다

hmm

초기서비스용으로 있는그대로 쓰면 괜찮다
학습용으로 좋다
개인서버용 정도로 쓰기 좋다