본문 바로가기
관리자

Programming-[Backend]/Keycloak

Keycloak CODE_TO_TOKEN_ERROR: cookie와 roles

728x90
반응형

 

배경

keycloak에서 일반 유저가 로그인을 하다가 CODE_TO_TOKEN_ERROR가 발생했다. authorization code를 클라이언트가 keycloak으로부터 발급받고, 이를 다시 keycloak에 전달하여 keycloak에서 access_token을 받아오는 과정에서 에러가 난 것이다. 처음에는 원인을 잘 몰라서 헤맸지만 특정 유저에게서만 에러가 발현된다는 점에 착안하여 문제 범위를 좁혀나갔다. 그리고는 특정 유저들에 roles가 너무 많이 할당되어 에러가 나는 것을 확인하게 되었다.

 

 

원인

roles를 너무 많이 부여하면, token에도 resource_access 항목이 길어지고 token이 포함된 cookie의 용량이 커지게 되거나 get 요청이 과다하게 길어지면서 로그인에 실패할 수 있다.

 

해결책

1. (임시방편) keycloak 22버전 이후부터는 cookie 크기를 줄이기 위해 minify cookie 기능을 제공한다고 한다. 테스트는 안해봤는데 큰 문제가 아니라면 이 방법을 적용해보는 것도 좋을 것 같다.

 

2. RBAC 방식의 권한을 최소한으로 두고, 해당 Role을 받은 유저의 상세 권한은 role에 연결된 attribute로 두어 클라이언트에서 role과 관련된 attribute를 조회하게 한다.

 

3. 너무 복잡한 role들이 주어지는 클라이언트에게는 token에서 roles scope에 해당하는 resource_access 부분이 제외되어 token이 나가도록 한다. 그리고 실제 권한 확인은 userinfo endpoint로 조회하도록 하면 된다. userinfo 엔드포인트를 계속 확인한다는 단점은 있을 수 있으나, 이 API를 활용하면 사용자 권한을 요청 때마다 실시간으로 확인할 수 있다는 장점이 있기도 하다.

 

-> 특정 client의 dedicated scope에 접근하여, roles를 설정하는 mapper에서 access token, id token은 꺼주고 userinfo 부분은 켜두면 된다.

728x90
반응형