콘텐츠로 이동
Study NoteKeycloak 실습

외부 디렉터리 계정으로 로그인하기

결론부터
LDAP provider만 적용하면 외부 password 로그인은 가능하지만, group을 role·claim으로 연결하지 않았으므로 API 권한은 아직 별도다.

기반 준비는 Samba에 alice, bob과 app-users, api-admins 원본 그룹을 만든다. api 단계까지는 Keycloak에 LDAP provider가 없으므로 두 외부 사용자는 로그인할 수 없다.

이 장에서 처음 나오는 말3개
bind DN
Keycloak이 LDAP에서 사용자와 속성을 조회할 때 사용하는 서비스 계정 식별자.
users DN
사용자 검색을 시작할 LDAP 트리의 기준 DN.
READ_ONLY
Keycloak이 외부 원본을 읽고 인증하되 원본 사용자 정보를 쓰지 않는 edit mode.

samba-ad.json에서 다음을 찾는다.

필드실습에서 뜻하는 것
connectionUrldirectory CA로 검증하는 ldaps://dc1.ad.keycloak.test:636
usersDn·bindDn검색 시작점과 조회용 계정; credential은 JSON 밖에서 주입
username/RDN/UUID attributeAD 호환 schema에서 사용자를 식별하는 방법
editMode=READ_ONLYKeycloak이 Samba 원본을 수정하지 않음
importEnabled=true사용자 표현을 Keycloak DB에 만들되 password 원본은 LDAP에 유지

web CA가 아니라 directory CA를 Keycloak truststore에 넣는다. StartTLS와 Kerberos는 이 기본 경로에서 사용하지 않는다.

터미널 창
./scripts/apply.sh ldap
./scripts/verify.sh ldap

apply는 provider를 만들거나 갱신한 뒤 full user sync만 실행한다. Admin Console의 User federation → samba-ad에서 Connection URL, Users DN, Edit mode를 확인하고 Users에서 alice와 bob의 federation link를 확인한다. 검사는 각 사용자로 앱 A Code+PKCE 로그인을 성공시키고 오답 password를 거부한다.

이 시점에는 lab-groups LDAP mapper, group-role mapping, groups protocol mapper를 만들지 않았다. 따라서 “로그인 성공”을 /api/user나 /api/admin 허용과 같은 말로 쓰면 안 된다.

이미 groups까지 끝낸 완성 환경에서 복습한다면 외부 로그인은 확인할 수 있지만 “group 설정 부재”는 관찰할 수 없다. 그 차이를 보기 위해 기존 데이터를 지우지 말고 공개 설정과 현재 콘솔 값을 대조한다.

  • Samba의 사용자·password·group이 원본이고 Keycloak은 READ_ONLY provider로 접근한다.
  • ldap 단계는 provider와 user full sync까지만 담당한다.
  • alice/bob 로그인 성공은 LDAP 인증 결과이며 아직 group 기반 API 권한 결과가 아니다.

다음은 외부 Group 권한 실습에서 group·role·claim·API를 연결한다.