# 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: L156–L160. - **Spring mediator** (service): Confidential OAuth client로 code를 교환하고 browser에 access-only 응답을 제공한다. Evidence: L156–L158. - **Authorized-client store** (database): Access와 refresh token을 server-side state로 보관한다. Evidence: L156–L160. - **Resource Server** (service): 브라우저가 만든 Bearer header를 직접 받으며 downstream audience를 검증하는 API. Evidence: L156–L160. ## Relationships - **Browser → Resource Server:** Bearer header. Evidence: L158–L160. - **Browser → Spring mediator:** AP2_SESSION. Evidence: L158–L160. - **Spring mediator → Browser:** access_token · type · expiry. Evidence: L158–L158. - **Spring mediator → Authorized-client store:** 보관 · 현재 access 조회. Evidence: L156–L160.