본문 바로가기

프로그래밍, 개발

keycloak : id of client 와 client id 값의 차이

keycloak 을 IAM(Identity and Access Management)의 목적으로 개발에 사용하게 되면, 이제 단순히 앱에 연결을 하는 것에서 그치는 것이 아니라, API 단에서 keycloak 에 직접 REST API 를 날려야 되는 필요성이 생기게 된다.

그럴 때, 우리는 공식문서(20.0.3 버전)를 확인하게 되는데, 오늘은 여기서 굉장히 이상한 단어를 발견하게 되어서, 그리고 이것 때문에 한 15분 이상은 헤맨 것 같아서 기록으로 남겨두게 되었다. 한국어로 해당 부분을 정리한 글은 없어서, 혹시나 누군가의 개발 시간을 줄여줄 수 있지 않을까 하는 생각에 글을 작성해본다.

 

여기에 보면, 이렇게 id of client 라고 되어있는 것이 있다. 그리고 not client-id 라고도 되어있다. (뭘까...?)

keycloak 공식문서 캡처본

흠, 두개의 차이가 뭘까? 우선, 위 API 를 사용해서 id 값에 내가 생각한 keycloak 의 client id 값을 넣어줬는데 계속해서 404 Http Method Not Found 에러가 발생했다. 그리고 공식문서에서는 찝찝하게 not client-id, id of client 라고 되어있었다.

 

그리고 새롭게 알게 된 사실?

client-id : 키클록에서 클라이언트를 생성할 때, 클라이언트의 이름으로 직접 관리자(등록하는 사람)가 넣어주는 값이다.

id of client : 새로운 클라이언트가 생성될 때, 키클록이 내부적으로 unique id 값을 만들어주게 된다. 그리고 바로 그것이다.

 

확인해보니까, 예를 들어서 내가 kakao realm 안에 webtoon 이라는 client id를 직접 설정해서 만들었다고 하자. 그리고 keycloak 에서 보니까, 그 webtoon client 의 page url 에서 아래와 같이 되어있는 것을 볼 수 있었다. uuid 처럼 생긴 것.

localhost:8080/admin/master/console/#/kakao/clients/{id-of-client}/settings

그리고, 요거를 찾을 수 있는 방법은 그 ClientRepresentation의 id를 조회하는 것이다.

keycloak.realm(realm)
        .clients()
        .findByClientId(clientId)
        .get(0)
        .getId();

 

그럼, 이상 끝! 감사합니다 : )