# AP1은 OAuth client와 token custody를 브라우저에 둔다 ## Alternative text SPA, Keycloak, 브라우저 JavaScript memory, Resource Server가 왼쪽에서 오른쪽으로 연결된 AP1 직접 인증 아키텍처. ## Long description 왼쪽의 public SPA가 Keycloak과 Authorization Code 및 PKCE S256 계약을 수행한다. Keycloak token 응답의 access, refresh, ID token은 브라우저 JavaScript memory에 놓이며, 그중 access JWT가 오른쪽 Resource Server의 검증 입력이 된다. Resource Server는 issuer, 시간 제약과 keycloak-pattern-api audience를 검증한다. ## Elements and evidence - **Public SPA** (service): Authorization Code와 PKCE를 직접 다루고 access JWT로 Resource Server를 호출하는 public OAuth client. Evidence: L144–L148. - **Browser JS memory** (database): Access, refresh, ID token을 실행 중 보관하며 reload 뒤에는 복구하지 않는 browser-side custody. Evidence: L148–L150. - **Keycloak** (service): SPA의 code 교환 상대이며 API가 검증하는 JWT 서명의 출처. Evidence: L144–L146. - **Resource Server** (service): Access JWT의 issuer, 시간 제약과 audience를 검증하는 API. Evidence: L144–L150. ## Relationships - **Keycloak → Public SPA:** access · refresh · ID token. Evidence: L144–L148. - **Public SPA → Keycloak:** Authorization Code + PKCE S256. Evidence: L144–L146. - **Public SPA → Browser JS memory:** token set 보관. Evidence: L148–L150. - **Public SPA → Resource Server:** memory-held access JWT · Bearer. Evidence: L144–L150.