test(ap1): verify refresh rotation and logout
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
# AP1 refresh rotation and logout
|
||||
|
||||
Realm 실행 profile:
|
||||
|
||||
- Access Token Lifespan: 300초
|
||||
- Revoke Refresh Token: 활성화
|
||||
- Refresh Token Max Reuse: 0
|
||||
|
||||
`e2e/pattern1.mjs`는 token 원문을 출력하지 않고 다음 순서를 실행한다.
|
||||
|
||||
1. browser Authorization Code + PKCE 로그인으로 AT₁/RT₁/ID Token을 받는다.
|
||||
2. `signoutRedirect()`가 `id_token_hint`를 포함한 Keycloak logout endpoint를
|
||||
호출하는지 확인한다.
|
||||
3. logout 이후 새 authorization 요청에서 로그인 화면이 다시 필요한지
|
||||
확인한다.
|
||||
4. 새 RT₁으로 refresh하여 AT₂/RT₂를 받고 RT₂가 RT₁과 다른지 확인한다.
|
||||
5. 이미 소비된 RT₁을 재사용해 성공하지 않는지 확인한다.
|
||||
6. RT₁ 재사용 뒤 RT₂와 realm session 상태가 어떤 결과를 내는지 status로
|
||||
기록한다. 이 결과를 사전에 family invalidation이라고 단정하지 않는다.
|
||||
7. refresh token을 revoke한 뒤 같은 refresh token의 재사용은 실패하지만,
|
||||
이미 발급된 self-contained access JWT는 `exp` 전까지 Resource Server에서
|
||||
계속 `200`인 stateless 함정을 확인한다.
|
||||
|
||||
logout은 브라우저 SSO session을 종료하는 흐름이고 token revocation은 특정
|
||||
token grant를 폐기하는 흐름이다. 둘은 목적과 endpoint가 다르다.
|
||||
|
||||
즉시 access 차단이 필요한 시스템이라면 짧은 access token TTL 외에
|
||||
introspection, reference token 또는 별도 deny-list 같은 stateful 검증을
|
||||
검토해야 한다. 이 AP1 구현은 JWT의 stateless 검증 특성을 의도적으로
|
||||
유지한다.
|
||||
Reference in New Issue
Block a user