LabHub
배우기 러닝패스 코스

Keycloak and Enterprise Identity

Creating Realms, Clients and Users With kcadm

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

kcadm 으로 렐름, 공개 클라이언트, 기밀 클라이언트, 사용자를 스크립트로 만들고, 서비스 계정 토큰까지 받아 본다.

왜 중요한가

Keycloak 설정을 웹 콘솔에서 손으로 만들면 재현되지 않습니다. 스테이징에서 한 설정과 운영에서 한 설정이 조용히 달라지고, 몇 달 뒤 "운영에서만 로그인이 안 된다"가 됩니다. kcadm 으로 스크립트화하면 그 설정이 코드가 되고 리뷰와 버전 관리의 대상이 됩니다. 그리고 이 실습에서 반드시 이해해야 할 구분이 공개 클라이언트와 기밀 클라이언트입니다. 시크릿을 안전하게 보관할 수 있는가에 따라 갈리고, 이 판단이 어떤 그랜트 타입을 쓸지를 결정합니다. SPA 에 기밀 클라이언트를 만들어 시크릿을 자바스크립트 번들에 넣는 것은 그 시크릿을 공개하는 것과 같습니다.

Keycloak 은 JVM 이라 시작이 느립니다. 이 파드에서는 40~90초 정도 걸리므로 1번 스텝의 대기 루프가 필수입니다.

단계

  1. /root/kc/wait.shhttp://127.0.0.1:8080/realms/master 가 200 이 될 때까지 최대 180초 기다린다. /root/kc/ready.txtready_seconds=<정수> 를 적는다.
  2. kcadm.sh config credentials --server http://127.0.0.1:8080 --realm master --user <관리자> --password <비밀번호> 를 실행한다. 자격 증명은 /opt/fixtures/kc/admin.env 에 있다. kcadm.sh get realms 가 성공해야 한다.
  3. 렐름 labhub2 를 활성 상태로 만든다. kcadm.sh get realms/labhub2enabled 가 true 여야 한다.
  4. 공개 클라이언트 web-app 을 만든다. publicClient 는 true, standardFlowEnabled 는 true, PKCE 코드 챌린지 방식은 S256, 리다이렉트 URI 는 http://127.0.0.1:8161/callback 이다.
  5. 기밀 클라이언트 api-svc 를 만든다. publicClient 는 false, serviceAccountsEnabled 는 true 이다. 시크릿을 /root/kc/api-svc.secret 에 저장한다.
  6. 사용자 dev1 을 만들고 이메일을 설정하고 비밀번호를 Dev1!pass 로 영구 설정한다. kcadm.sh get users -r labhub2 -q username=dev1 이 1건을 돌려줘야 한다.
  7. api-svcclient_credentials 토큰을 받아 /root/kc/svc-token.txt 에 저장한다. 점이 2개인 문자열이어야 한다.
  8. /root/kc/realm.json{"realm":"labhub2","clients":["web-app","api-svc"],"users":["dev1"]} 형태의 요약을 만든다. 실제 조회 결과를 근거로 작성해야 한다.

참고

Keycloak 준비 대기하기

/root/kc/wait.shhttp://127.0.0.1:8080/realms/master 가 200 이 될 때까지 최대 180초 기다린다. /root/kc/ready.txtready_seconds=<정수> 를 적는다.

JVM 시작에 시간이 걸립니다. 준비 확인 엔드포인트를 폴링하세요. 최대 180초까지 기다려도 됩니다.

관리자 자격 증명 설정하기

kcadm.sh config credentials --server http://127.0.0.1:8080 --realm master --user <관리자> --password <비밀번호> 를 실행한다. 자격 증명은 /opt/fixtures/kc/admin.env 에 있다. kcadm.sh get realms 가 성공해야 한다.

kcadm 은 자격 증명을 한 번 설정하면 이후 명령에서 재사용합니다. 관리 계정 정보는 픽스처에 있습니다.

애플리케이션 렐름 만들기

렐름 labhub2 를 활성 상태로 만든다. kcadm.sh get realms/labhub2enabled 가 true 여야 한다.

master 에 애플리케이션 사용자를 만들면 안 되는 이유는 읽기 자료에 있습니다. 활성화 옵션을 잊지 마세요.

공개 클라이언트 만들기

공개 클라이언트 web-app 을 만든다. publicClient 는 true, standardFlowEnabled 는 true, PKCE 코드 챌린지 방식은 S256, 리다이렉트 URI 는 http://127.0.0.1:8161/callback 이다.

시크릿이 없는 클라이언트에는 PKCE 가 필수입니다. 리다이렉트 URI 도 정확히 등록해야 합니다.

기밀 클라이언트와 서비스 계정 만들기

기밀 클라이언트 api-svc 를 만든다. publicClient 는 false, serviceAccountsEnabled 는 true 이다. 시크릿을 /root/kc/api-svc.secret 에 저장한다.

시크릿이 있고 서비스 계정을 켜면 자기 자신의 토큰을 받을 수 있습니다. 시크릿을 파일로 저장해 두세요.

사용자 만들고 비밀번호 설정하기

사용자 dev1 을 만들고 이메일을 설정하고 비밀번호를 Dev1!pass 로 영구 설정한다. kcadm.sh get users -r labhub2 -q username=dev1 이 1건을 돌려줘야 한다.

사용자 생성과 비밀번호 설정은 별개 명령입니다. 임시 비밀번호가 아니어야 로그인 흐름이 막히지 않습니다.

서비스 계정 토큰 받기

api-svcclient_credentials 토큰을 받아 /root/kc/svc-token.txt 에 저장한다. 점이 2개인 문자열이어야 한다.

사용자 없이 클라이언트 자격만으로 받는 흐름입니다. 그랜트 타입 이름을 정확히 쓰세요.

렐름 구성 요약 남기기

/root/kc/realm.json{"realm":"labhub2","clients":["web-app","api-svc"],"users":["dev1"]} 형태의 요약을 만든다. 실제 조회 결과를 근거로 작성해야 한다.

만든 것들을 조회해 한 파일로 모읍니다. 다른 사람이 재현할 수 있는 형태여야 합니다.