23장. JWT claim을 내부 권한으로 안전하게 변환한다
기본 scope는 SCOPE_contract.read 같은 authority가 된다. 공급자의 roles, groups, tenant claim을 추가로 읽을 때는 형식, issuer별 의미, 최대 크기, 누락 기본값을 정의한다. 사용자가 수정할 수 있는 profile claim을 권한으로 쓰지 않는다.
JwtGrantedAuthoritiesConverter scopes = new JwtGrantedAuthoritiesConverter();
scopes.setAuthorityPrefix("SCOPE_");
scopes.setAuthoritiesClaimName("scope");
token의 tenant claim과 URL tenant가 일치해도 현재 membership이 이미 해지됐을 수 있다. token TTL을 짧게 하고 고위험 작업은 서버의 현재 권한이나 entitlement version을 재확인한다. 권한 변경 즉시성을 요구하면 opaque token introspection이나 세션 모델이 더 적합할 수 있다.
JWT를 로그에 찍어 디코딩하지 않는다. header와 payload는 암호화가 아니라 base64url이며 개인정보가 들어 있을 수 있다. 조사에는 token fingerprint, issuer, subject의 비식별 참조, jti, 실패 claim만 제한적으로 남긴다.