Files
technical-visualization-haness/.work/keycloak-four-patterns/final/assets/ap2-mediator-architecture/ap2-mediator-architecture.alt.md
T
2026-07-29 18:03:21 +09:00

1.7 KiB
Raw Blame History

AP2는 refresh custody와 API caller를 서로 다른 경계에 둔다

Alternative text

브라우저가 Spring mediator에서 access token만 받아 Resource Server를 직접 호출하고 refresh token은 authorized-client store에 남기는 AP2 split-custody 아키텍처.

Long description

브라우저는 AP2_SESSION으로 confidential Spring mediator의 login state를 사용한다. Mediator는 code를 교환한 뒤 access와 refresh token을 server-side authorized-client service에 저장한다. 현재 access token의 값, type, expiry만 브라우저로 전달되고 refresh token은 server 경계에 남는다. 브라우저는 memory에 있는 access token으로 Resource Server용 Bearer header를 만든다.

Elements and evidence

  • Browser (actor): AP2_SESSION을 사용하고 전달받은 access token으로 API를 직접 호출하는 주체. Evidence: L156L160.
  • Spring mediator (service): Confidential OAuth client로 code를 교환하고 browser에 access-only 응답을 제공한다. Evidence: L156L158.
  • Authorized-client store (database): Access와 refresh token을 server-side state로 보관한다. Evidence: L156L160.
  • Resource Server (service): 브라우저가 만든 Bearer header를 직접 받으며 downstream audience를 검증하는 API. Evidence: L156L160.

Relationships

  • Browser → Resource Server: Bearer header. Evidence: L158L160.
  • Browser → Spring mediator: AP2_SESSION. Evidence: L158L160.
  • Spring mediator → Browser: access_token · type · expiry. Evidence: L158L158.
  • Spring mediator → Authorized-client store: 보관 · 현재 access 조회. Evidence: L156L160.