32 KiB
32 KiB
Evidence and decision provenance
This is an internal sidecar. It is not reader-facing article content. Source IDs, repository paths, line ranges, status labels, and access dates belong here—not in
document.md.
- Document: 브라우저 토큰에서 엣지 세션까지: Keycloak 인증 패턴 네 가지의 경계 설계
- Citation rendering:
hidden - Evidence sources: 48
Section evidence map
| Section | Decision contract | Evidence | Status / location |
|---|---|---|---|
| 코드보다 먼저 드러난 문제 | — | L4121b8d86b four pattern tradeoff matrix — Four Keycloak integration patterns |
unspecified · docs/four-pattern-tradeoff-matrix.md — Four Keycloak integration patterns (lines 1-14) |
| ↳ | — | AP1_BOUNDARY AP1 SPA direct의 OAuth·token 책임 경계 |
reviewed · docs/internal-spa-direct-no-google.md — AP1 internal SPA direct: local identity profile (lines 3-10) |
| ↳ | — | AP2_BOUNDARY AP2 confidential token mediator의 책임 경계 |
reviewed · docs/ap2-token-boundary.md — 책임 경계 (lines 3-18) |
| ↳ | — | AP3_BOUNDARY AP3 BFF의 tokenless browser 경계 |
reviewed · docs/ap3-bff-boundary.md — 요청과 token 경계 (lines 3-18) |
| ↳ | — | AP4_BOUNDARY AP4 oauth2-proxy와 nginx edge 책임 경계 |
reviewed · docs/ap4-edge-forward-auth.md — AP4 oauth2-proxy Edge Forward Auth (lines 3-70) |
| 문제를 어렵게 만든 제약 | — | L4121b8d86b four pattern tradeoff matrix — Four Keycloak integration patterns |
unspecified · docs/four-pattern-tradeoff-matrix.md — Four Keycloak integration patterns (lines 1-14) |
| ↳ | — | AP1_STORAGE AP1 token 저장 선택과 수용 비용 |
reviewed · docs/ap1-token-storage.md — AP1 token storage trade-off (lines 3-29) |
| ↳ | — | AP2_GUARDRAILS AP2 session, refresh custody, CORS와 audience 가드레일 |
reviewed · token-mediator/src/main/resources/application.yml — AP2 session and OAuth client configuration (lines 3-34) |
| ↳ | — | AP3_TRADEOFF AP3와 AP1의 위협 모델·운영비 교환 |
reviewed · docs/bff-vs-spa-direct.md — BFF vs SPA direct (lines 3-22) |
| ↳ | — | AP4_BOUNDARY AP4 oauth2-proxy와 nginx edge 책임 경계 |
reviewed · docs/ap4-edge-forward-auth.md — AP4 oauth2-proxy Edge Forward Auth (lines 3-70) |
| ↳ | — | AP4_RESPONSE_RUNTIME AP4 trusted header input에서 edge identity JSON까지 |
reviewed · backend/src/main/java/com/example/keycloakpattern/EdgeIdentityController.java — currentUser and hasValidInternalToken (lines 27-53) |
| 검토한 선택지와 막힌 지점 | 상황·제약, 선택, 선택 이유, 검토한 대안, 수용한 비용, 보완 가드레일 | L4121b8d86b four pattern tradeoff matrix — Four Keycloak integration patterns |
unspecified · docs/four-pattern-tradeoff-matrix.md — Four Keycloak integration patterns (lines 1-14) |
| ↳ | — | AP1_BOUNDARY AP1 SPA direct의 OAuth·token 책임 경계 |
reviewed · docs/internal-spa-direct-no-google.md — AP1 internal SPA direct: local identity profile (lines 3-10) |
| ↳ | — | AP1_STORAGE AP1 token 저장 선택과 수용 비용 |
reviewed · docs/ap1-token-storage.md — AP1 token storage trade-off (lines 3-29) |
| ↳ | — | AP2_BOUNDARY AP2 confidential token mediator의 책임 경계 |
reviewed · docs/ap2-token-boundary.md — 책임 경계 (lines 3-18) |
| ↳ | — | AP2_IMPLEMENTATION AP2 access-only handoff의 실제 구현 |
reviewed-discrepancy · token-mediator/src/main/java/com/example/keycloakpattern/mediator/AccessTokenController.java — accessToken (lines 28-55) |
| ↳ | — | AP3_BOUNDARY AP3 BFF의 tokenless browser 경계 |
reviewed · docs/ap3-bff-boundary.md — 요청과 token 경계 (lines 3-18) |
| ↳ | — | AP3_TRADEOFF AP3와 AP1의 위협 모델·운영비 교환 |
reviewed · docs/bff-vs-spa-direct.md — BFF vs SPA direct (lines 3-22) |
| ↳ | — | AP4_BOUNDARY AP4 oauth2-proxy와 nginx edge 책임 경계 |
reviewed · docs/ap4-edge-forward-auth.md — AP4 oauth2-proxy Edge Forward Auth (lines 3-70) |
| ↳ | — | AP4_ALTERNATIVE AP4 Traefik ForwardAuth 대안과 추가 비용 |
config-tested · docs/traefik-forwardauth-alternative.md — Traefik ForwardAuth alternative (lines 3-22) |
| 선택의 이유와 지킨 경계 | 상황·제약, 선택, 선택 이유, 검토한 대안, 수용한 비용, 보완 가드레일 | AP1_BOUNDARY AP1 SPA direct의 OAuth·token 책임 경계 |
reviewed · docs/internal-spa-direct-no-google.md — AP1 internal SPA direct: local identity profile (lines 3-10) |
| ↳ | — | AP1_STORAGE AP1 token 저장 선택과 수용 비용 |
reviewed · docs/ap1-token-storage.md — AP1 token storage trade-off (lines 3-29) |
| ↳ | — | AP2_BOUNDARY AP2 confidential token mediator의 책임 경계 |
reviewed · docs/ap2-token-boundary.md — 책임 경계 (lines 3-18) |
| ↳ | — | AP3_BOUNDARY AP3 BFF의 tokenless browser 경계 |
reviewed · docs/ap3-bff-boundary.md — 요청과 token 경계 (lines 3-18) |
| ↳ | — | AP3_TRADEOFF AP3와 AP1의 위협 모델·운영비 교환 |
reviewed · docs/bff-vs-spa-direct.md — BFF vs SPA direct (lines 3-22) |
| ↳ | — | AP4_BOUNDARY AP4 oauth2-proxy와 nginx edge 책임 경계 |
reviewed · docs/ap4-edge-forward-auth.md — AP4 oauth2-proxy Edge Forward Auth (lines 3-70) |
| ↳ | — | AP4_ALTERNATIVE AP4 Traefik ForwardAuth 대안과 추가 비용 |
config-tested · docs/traefik-forwardauth-alternative.md — Traefik ForwardAuth alternative (lines 3-22) |
| 선택이 코드와 흐름에 반영되는 방식 | — | AP1_LOGIN_RUNTIME AP1 SPA authorization, callback와 browser token data flow |
reviewed · frontend/src/app.js — UserManager configuration, callback, and renderSession (lines 9-81) |
| ↳ | — | AP1_PKCE_DEMO_GAP AP1 manual PKCE helper와 실제 signin path의 구분 |
reviewed-gap · frontend/src/pkce.js — createPkcePair (lines 1-25) |
| ↳ | — | AP1_API_RUNTIME AP1 browser Bearer input에서 /api/me JSON까지 |
reviewed · frontend/src/app.js — callProtectedApi (lines 83-109) |
| ↳ | — | AP1_ROLE_FAILURE_RUNTIME AP1 JWT failure와 realm role authorization 경계 |
reviewed-gap · backend/src/main/java/com/example/keycloakpattern/KeycloakRealmRoleConverter.java — convert (lines 12-27) |
| ↳ | — | AP2_LOGIN_FLOW AP2 browser entry와 Spring oauth2Login code 교환 |
reviewed · token-mediator/src/main/resources/static/app.js — loginButton click and OAuth client registration (lines 7-9) |
| ↳ | — | AP2_BOUNDARY_RUNTIME AP2 token boundary endpoint input과 output |
reviewed · token-mediator/src/main/java/com/example/keycloakpattern/mediator/TokenBoundaryController.java — tokenBoundary (lines 25-42) |
| ↳ | — | AP2_ACCESS_RUNTIME AP2 access handoff와 browser direct API의 data transformation |
reviewed · token-mediator/src/main/java/com/example/keycloakpattern/mediator/AccessTokenController.java — accessToken (lines 28-54) |
| ↳ | — | AP2_RESOURCE_RUNTIME AP2 Resource Server의 JWT input과 /api/me output |
reviewed · backend/src/main/java/com/example/keycloakpattern/ApiController.java — currentUser (lines 21-28) |
| ↳ | — | AP3_LOGIN_FLOW AP3 oauth2Login과 server-side PKCE data flow |
reviewed · bff/src/main/java/com/example/keycloakpattern/bff/SecurityConfig.java — authorizationRequestResolver and bffSecurity (lines 20-58) |
| ↳ | — | AP3_BOUNDARY_RUNTIME AP3 token boundary endpoint의 input과 관측 output |
reviewed · bff/src/main/java/com/example/keycloakpattern/bff/BffController.java — tokenBoundary (lines 44-64) |
| ↳ | — | AP3_API_RUNTIME AP3 session input에서 downstream Bearer와 reader JSON까지 |
reviewed · bff/src/main/java/com/example/keycloakpattern/bff/BffController.java — currentUser and authorizedClient (lines 67-111) |
| ↳ | — | AP3_CSRF_RUNTIME AP3 CSRF cookie-to-header transformation과 preferences output |
reviewed · bff/src/main/java/com/example/keycloakpattern/bff/CsrfController.java — csrf (lines 14-23) |
| ↳ | — | AP3_PREFERENCE_SCOPE AP3 preferences 예시의 process-global state 간극 |
reviewed-gap · bff/src/main/java/com/example/keycloakpattern/bff/BffController.java — preferenceTheme and updatePreferences (lines 28-95) |
| ↳ | — | AP4_LOGIN_RUNTIME AP4 unauthenticated navigation에서 oauth2-proxy session까지 |
reviewed · docker-compose.yml — oauth2-proxy service (lines 92-143) |
| ↳ | — | AP4_REQUEST_RUNTIME AP4 external request에서 auth subrequest와 upstream input까지 |
reviewed · frontend/default.conf.template — auth_request and upstream mapping (lines 13-74) |
| ↳ | — | AP4_RESPONSE_RUNTIME AP4 trusted header input에서 edge identity JSON까지 |
reviewed · backend/src/main/java/com/example/keycloakpattern/EdgeIdentityController.java — currentUser and hasValidInternalToken (lines 27-53) |
| 결정이 지켜지는지 확인하는 방법 | — | AP1_VERIFY AP1 브라우저 흐름과 token 수명주기 검증 계약 |
test-defined · e2e/pattern1.mjs — AP1 Playwright acceptance contract (lines 82-202) |
| ↳ | — | AP1_ROLE_FAILURE_RUNTIME AP1 JWT failure와 realm role authorization 경계 |
reviewed-gap · backend/src/main/java/com/example/keycloakpattern/KeycloakRealmRoleConverter.java — convert (lines 12-27) |
| ↳ | — | AP2_VERIFY AP2 access-only 전달과 브라우저 직접 API 호출 검증 계약 |
test-defined · e2e/pattern2.mjs — AP2 Playwright acceptance contract (lines 39-112) |
| ↳ | — | AP2_ACCESS_RUNTIME AP2 access handoff와 browser direct API의 data transformation |
reviewed · token-mediator/src/main/java/com/example/keycloakpattern/mediator/AccessTokenController.java — accessToken (lines 28-54) |
| ↳ | — | AP3_VERIFY AP3 browser token 비노출과 CSRF 방어 검증 계약 |
test-defined · e2e/pattern3.mjs — AP3 Playwright acceptance contract (lines 43-191) |
| ↳ | — | AP3_CSRF_RUNTIME AP3 CSRF cookie-to-header transformation과 preferences output |
reviewed · bff/src/main/java/com/example/keycloakpattern/bff/CsrfController.java — csrf (lines 14-23) |
| ↳ | — | AP4_VERIFY AP4 edge login과 header spoofing 방어 검증 계약 |
test-defined · e2e/pattern4.mjs — AP4 Playwright acceptance contract (lines 44-131) |
| ↳ | — | AP4_RESPONSE_RUNTIME AP4 trusted header input에서 edge identity JSON까지 |
reviewed · backend/src/main/java/com/example/keycloakpattern/EdgeIdentityController.java — currentUser and hasValidInternalToken (lines 27-53) |
| ↳ | — | BRANCH_REACHABILITY 네 pattern branch와 39개 feature ref의 도달성 |
partially-verified · docs/keycloak-branch-manifest.tsv — branch target delivery registry (lines 1-40) |
| 얻은 것, 잃은 것, 적용하지 않을 때 | 상황·제약, 선택, 선택 이유, 검토한 대안, 수용한 비용, 보완 가드레일 | L4121b8d86b four pattern tradeoff matrix — Four Keycloak integration patterns |
unspecified · docs/four-pattern-tradeoff-matrix.md — Four Keycloak integration patterns (lines 1-14) |
| ↳ | — | AP1_STORAGE AP1 token 저장 선택과 수용 비용 |
reviewed · docs/ap1-token-storage.md — AP1 token storage trade-off (lines 3-29) |
| ↳ | — | AP2_GUARDRAILS AP2 session, refresh custody, CORS와 audience 가드레일 |
reviewed · token-mediator/src/main/resources/application.yml — AP2 session and OAuth client configuration (lines 3-34) |
| ↳ | — | AP3_TRADEOFF AP3와 AP1의 위협 모델·운영비 교환 |
reviewed · docs/bff-vs-spa-direct.md — BFF vs SPA direct (lines 3-22) |
| ↳ | — | AP3_PREFERENCE_SCOPE AP3 preferences 예시의 process-global state 간극 |
reviewed-gap · bff/src/main/java/com/example/keycloakpattern/bff/BffController.java — preferenceTheme and updatePreferences (lines 28-95) |
| ↳ | — | AP4_BOUNDARY AP4 oauth2-proxy와 nginx edge 책임 경계 |
reviewed · docs/ap4-edge-forward-auth.md — AP4 oauth2-proxy Edge Forward Auth (lines 3-70) |
| ↳ | — | AP4_ALTERNATIVE AP4 Traefik ForwardAuth 대안과 추가 비용 |
config-tested · docs/traefik-forwardauth-alternative.md — Traefik ForwardAuth alternative (lines 3-22) |
| 결국 지키려던 것은 무엇이었나 | — | L4121b8d86b four pattern tradeoff matrix — Four Keycloak integration patterns |
unspecified · docs/four-pattern-tradeoff-matrix.md — Four Keycloak integration patterns (lines 1-14) |
| ↳ | — | AP1_BOUNDARY AP1 SPA direct의 OAuth·token 책임 경계 |
reviewed · docs/internal-spa-direct-no-google.md — AP1 internal SPA direct: local identity profile (lines 3-10) |
| ↳ | — | AP2_BOUNDARY AP2 confidential token mediator의 책임 경계 |
reviewed · docs/ap2-token-boundary.md — 책임 경계 (lines 3-18) |
| ↳ | — | AP3_BOUNDARY AP3 BFF의 tokenless browser 경계 |
reviewed · docs/ap3-bff-boundary.md — 요청과 token 경계 (lines 3-18) |
| ↳ | — | AP4_BOUNDARY AP4 oauth2-proxy와 nginx edge 책임 경계 |
reviewed · docs/ap4-edge-forward-auth.md — AP4 oauth2-proxy Edge Forward Auth (lines 3-70) |
Source details
AP1_BOUNDARY AP1 SPA direct의 OAuth·token 책임 경계
- Type:
branch-note - Status:
reviewed - Location:
docs/internal-spa-direct-no-google.md — AP1 internal SPA direct: local identity profile (lines 3-10) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern1/docs/internal-spa-direct-no-google.md - Claim IDs:
AP1-C1 - Decision IDs:
AP1-D1 - Retrieval priority:
100.0000
AP1_STORAGE AP1 token 저장 선택과 수용 비용
- Type:
branch-note - Status:
reviewed - Location:
docs/ap1-token-storage.md — AP1 token storage trade-off (lines 3-29) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern1/docs/ap1-token-storage.md - Claim IDs:
AP1-C2 - Decision IDs:
AP1-D2 - Retrieval priority:
100.0000
AP1_LOGIN_RUNTIME AP1 SPA authorization, callback와 browser token data flow
- Type:
canonical-project - Status:
reviewed - Location:
frontend/src/app.js — UserManager configuration, callback, and renderSession (lines 9-81) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern1/frontend/src/app.js - Claim IDs:
AP1-C4 - Decision IDs: —
- Retrieval priority:
100.0000
AP1_PKCE_DEMO_GAP AP1 manual PKCE helper와 실제 signin path의 구분
- Type:
canonical-project - Status:
reviewed-gap - Location:
frontend/src/pkce.js — createPkcePair (lines 1-25) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern1/frontend/src/pkce.js - Claim IDs:
AP1-C5 - Decision IDs: —
- Retrieval priority:
85.0000
AP1_API_RUNTIME AP1 browser Bearer input에서 /api/me JSON까지
- Type:
canonical-project - Status:
reviewed - Location:
frontend/src/app.js — callProtectedApi (lines 83-109) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern1/frontend/src/app.js - Claim IDs:
AP1-C6 - Decision IDs: —
- Retrieval priority:
100.0000
AP1_ROLE_FAILURE_RUNTIME AP1 JWT failure와 realm role authorization 경계
- Type:
canonical-project - Status:
reviewed-gap - Location:
backend/src/main/java/com/example/keycloakpattern/KeycloakRealmRoleConverter.java — convert (lines 12-27) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern1/backend/src/main/java/com/example/keycloakpattern/KeycloakRealmRoleConverter.java - Claim IDs:
AP1-C7 - Decision IDs: —
- Retrieval priority:
90.0000
AP1_GUARDRAILS AP1 public client와 Resource Server 가드레일
- Type:
canonical-project - Status:
reviewed - Location:
keycloak/import/keycloak-patterns-realm.json — spa-public client and realm token settings (lines 11-73) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern1/keycloak/import/keycloak-patterns-realm.json - Claim IDs:
AP1-C3 - Decision IDs: —
- Retrieval priority:
85.0000
AP1_VERIFY AP1 브라우저 흐름과 token 수명주기 검증 계약
- Type:
canonical-project - Status:
test-defined - Location:
e2e/pattern1.mjs — AP1 Playwright acceptance contract (lines 82-202) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern1/e2e/pattern1.mjs - Claim IDs:
AP1-T1 - Decision IDs: —
- Retrieval priority:
80.0000
AP2_BOUNDARY AP2 confidential token mediator의 책임 경계
- Type:
branch-note - Status:
reviewed - Location:
docs/ap2-token-boundary.md — 책임 경계 (lines 3-18) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern2/docs/ap2-token-boundary.md - Claim IDs:
AP2-C1 - Decision IDs:
AP2-D1 - Retrieval priority:
100.0000
AP2_IMPLEMENTATION AP2 access-only handoff의 실제 구현
- Type:
canonical-project - Status:
reviewed-discrepancy - Location:
token-mediator/src/main/java/com/example/keycloakpattern/mediator/AccessTokenController.java — accessToken (lines 28-55) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern2/token-mediator/src/main/java/com/example/keycloakpattern/mediator/AccessTokenController.java - Claim IDs:
AP2-C2 - Decision IDs: —
- Retrieval priority:
100.0000
AP2_LOGIN_FLOW AP2 browser entry와 Spring oauth2Login code 교환
- Type:
canonical-project - Status:
reviewed - Location:
token-mediator/src/main/resources/static/app.js — loginButton click and OAuth client registration (lines 7-9) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern2/token-mediator/src/main/resources/static/app.js - Claim IDs:
AP2-C4 - Decision IDs: —
- Retrieval priority:
90.0000
AP2_BOUNDARY_RUNTIME AP2 token boundary endpoint input과 output
- Type:
canonical-project - Status:
reviewed - Location:
token-mediator/src/main/java/com/example/keycloakpattern/mediator/TokenBoundaryController.java — tokenBoundary (lines 25-42) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern2/token-mediator/src/main/java/com/example/keycloakpattern/mediator/TokenBoundaryController.java - Claim IDs:
AP2-C5 - Decision IDs: —
- Retrieval priority:
95.0000
AP2_ACCESS_RUNTIME AP2 access handoff와 browser direct API의 data transformation
- Type:
canonical-project - Status:
reviewed - Location:
token-mediator/src/main/java/com/example/keycloakpattern/mediator/AccessTokenController.java — accessToken (lines 28-54) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern2/token-mediator/src/main/java/com/example/keycloakpattern/mediator/AccessTokenController.java - Claim IDs:
AP2-C6 - Decision IDs: —
- Retrieval priority:
100.0000
AP2_RESOURCE_RUNTIME AP2 Resource Server의 JWT input과 /api/me output
- Type:
canonical-project - Status:
reviewed - Location:
backend/src/main/java/com/example/keycloakpattern/ApiController.java — currentUser (lines 21-28) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern2/backend/src/main/java/com/example/keycloakpattern/ApiController.java - Claim IDs:
AP2-C7 - Decision IDs: —
- Retrieval priority:
95.0000
AP2_GUARDRAILS AP2 session, refresh custody, CORS와 audience 가드레일
- Type:
canonical-project - Status:
reviewed - Location:
token-mediator/src/main/resources/application.yml — AP2 session and OAuth client configuration (lines 3-34) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern2/token-mediator/src/main/resources/application.yml - Claim IDs:
AP2-C3 - Decision IDs: —
- Retrieval priority:
85.0000
AP2_VERIFY AP2 access-only 전달과 브라우저 직접 API 호출 검증 계약
- Type:
canonical-project - Status:
test-defined - Location:
e2e/pattern2.mjs — AP2 Playwright acceptance contract (lines 39-112) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern2/e2e/pattern2.mjs - Claim IDs:
AP2-T1 - Decision IDs: —
- Retrieval priority:
80.0000
AP3_BOUNDARY AP3 BFF의 tokenless browser 경계
- Type:
branch-note - Status:
reviewed - Location:
docs/ap3-bff-boundary.md — 요청과 token 경계 (lines 3-18) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern3/docs/ap3-bff-boundary.md - Claim IDs:
AP3-C1 - Decision IDs:
AP3-D1 - Retrieval priority:
100.0000
AP3_TRADEOFF AP3와 AP1의 위협 모델·운영비 교환
- Type:
branch-note - Status:
reviewed - Location:
docs/bff-vs-spa-direct.md — BFF vs SPA direct (lines 3-22) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern3/docs/bff-vs-spa-direct.md - Claim IDs:
AP3-C2 - Decision IDs:
AP3-D2 - Retrieval priority:
100.0000
AP3_GUARDRAILS AP3 CSRF token과 SameSite 가드레일
- Type:
canonical-project - Status:
reviewed - Location:
bff/src/main/java/com/example/keycloakpattern/bff/SecurityConfig.java — bffSecurity (lines 25-58) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern3/bff/src/main/java/com/example/keycloakpattern/bff/SecurityConfig.java - Claim IDs:
AP3-C3 - Decision IDs: —
- Retrieval priority:
85.0000
AP3_LOGIN_FLOW AP3 oauth2Login과 server-side PKCE data flow
- Type:
canonical-project - Status:
reviewed - Location:
bff/src/main/java/com/example/keycloakpattern/bff/SecurityConfig.java — authorizationRequestResolver and bffSecurity (lines 20-58) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern3/bff/src/main/java/com/example/keycloakpattern/bff/SecurityConfig.java - Claim IDs:
AP3-C4 - Decision IDs: —
- Retrieval priority:
95.0000
AP3_BOUNDARY_RUNTIME AP3 token boundary endpoint의 input과 관측 output
- Type:
canonical-project - Status:
reviewed - Location:
bff/src/main/java/com/example/keycloakpattern/bff/BffController.java — tokenBoundary (lines 44-64) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern3/bff/src/main/java/com/example/keycloakpattern/bff/BffController.java - Claim IDs:
AP3-C5 - Decision IDs: —
- Retrieval priority:
95.0000
AP3_API_RUNTIME AP3 session input에서 downstream Bearer와 reader JSON까지
- Type:
canonical-project - Status:
reviewed - Location:
bff/src/main/java/com/example/keycloakpattern/bff/BffController.java — currentUser and authorizedClient (lines 67-111) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern3/bff/src/main/java/com/example/keycloakpattern/bff/BffController.java - Claim IDs:
AP3-C6 - Decision IDs: —
- Retrieval priority:
100.0000
AP3_CSRF_RUNTIME AP3 CSRF cookie-to-header transformation과 preferences output
- Type:
canonical-project - Status:
reviewed - Location:
bff/src/main/java/com/example/keycloakpattern/bff/CsrfController.java — csrf (lines 14-23) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern3/bff/src/main/java/com/example/keycloakpattern/bff/CsrfController.java - Claim IDs:
AP3-C7 - Decision IDs: —
- Retrieval priority:
100.0000
AP3_PREFERENCE_SCOPE AP3 preferences 예시의 process-global state 간극
- Type:
canonical-project - Status:
reviewed-gap - Location:
bff/src/main/java/com/example/keycloakpattern/bff/BffController.java — preferenceTheme and updatePreferences (lines 28-95) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern3/bff/src/main/java/com/example/keycloakpattern/bff/BffController.java - Claim IDs:
AP3-C8 - Decision IDs: —
- Retrieval priority:
90.0000
AP3_VERIFY AP3 browser token 비노출과 CSRF 방어 검증 계약
- Type:
canonical-project - Status:
test-defined - Location:
e2e/pattern3.mjs — AP3 Playwright acceptance contract (lines 43-191) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern3/e2e/pattern3.mjs - Claim IDs:
AP3-T1 - Decision IDs: —
- Retrieval priority:
80.0000
AP4_BOUNDARY AP4 oauth2-proxy와 nginx edge 책임 경계
- Type:
branch-note - Status:
reviewed - Location:
docs/ap4-edge-forward-auth.md — AP4 oauth2-proxy Edge Forward Auth (lines 3-70) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern4/docs/ap4-edge-forward-auth.md - Claim IDs:
AP4-C1 - Decision IDs:
AP4-D1 - Retrieval priority:
100.0000
AP4_NGINX AP4 auth_request와 identity header 덮어쓰기
- Type:
canonical-project - Status:
reviewed - Location:
frontend/default.conf.template — nginx AP4 server configuration (lines 13-74) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern4/frontend/default.conf.template - Claim IDs:
AP4-C2 - Decision IDs: —
- Retrieval priority:
90.0000
AP4_LOGIN_RUNTIME AP4 unauthenticated navigation에서 oauth2-proxy session까지
- Type:
canonical-project - Status:
reviewed - Location:
docker-compose.yml — oauth2-proxy service (lines 92-143) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern4/docker-compose.yml - Claim IDs:
AP4-C5 - Decision IDs: —
- Retrieval priority:
100.0000
AP4_REQUEST_RUNTIME AP4 external request에서 auth subrequest와 upstream input까지
- Type:
canonical-project - Status:
reviewed - Location:
frontend/default.conf.template — auth_request and upstream mapping (lines 13-74) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern4/frontend/default.conf.template - Claim IDs:
AP4-C6 - Decision IDs: —
- Retrieval priority:
100.0000
AP4_RESPONSE_RUNTIME AP4 trusted header input에서 edge identity JSON까지
- Type:
canonical-project - Status:
reviewed - Location:
backend/src/main/java/com/example/keycloakpattern/EdgeIdentityController.java — currentUser and hasValidInternalToken (lines 27-53) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern4/backend/src/main/java/com/example/keycloakpattern/EdgeIdentityController.java - Claim IDs:
AP4-C7 - Decision IDs: —
- Retrieval priority:
100.0000
AP4_BACKEND AP4 upstream의 내부 token 검증
- Type:
canonical-project - Status:
reviewed - Location:
backend/src/main/java/com/example/keycloakpattern/EdgeIdentityController.java — currentUser and hasValidInternalToken (lines 18-53) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern4/backend/src/main/java/com/example/keycloakpattern/EdgeIdentityController.java - Claim IDs:
AP4-C3 - Decision IDs: —
- Retrieval priority:
85.0000
AP4_VERIFY AP4 edge login과 header spoofing 방어 검증 계약
- Type:
canonical-project - Status:
test-defined - Location:
e2e/pattern4.mjs — AP4 Playwright acceptance contract (lines 44-131) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern4/e2e/pattern4.mjs - Claim IDs:
AP4-T1 - Decision IDs: —
- Retrieval priority:
80.0000
AP4_ALTERNATIVE AP4 Traefik ForwardAuth 대안과 추가 비용
- Type:
branch-note - Status:
config-tested - Location:
docs/traefik-forwardauth-alternative.md — Traefik ForwardAuth alternative (lines 3-22) - Public/reference URL:
repo://keycloak-pattern/develop-keycloak-pattern4/docs/traefik-forwardauth-alternative.md - Claim IDs:
AP4-C4 - Decision IDs:
AP4-D2 - Retrieval priority:
85.0000
BRANCH_REACHABILITY 네 pattern branch와 39개 feature ref의 도달성
- Type:
canonical-project - Status:
partially-verified - Location:
docs/keycloak-branch-manifest.tsv — branch target delivery registry (lines 1-40) - Public/reference URL:
repo://keycloak-pattern/develop/docs/keycloak-branch-manifest.tsv - Claim IDs:
COMMON-T1 - Decision IDs: —
- Retrieval priority:
70.0000
L4121b8d86b four pattern tradeoff matrix — Four Keycloak integration patterns
- Type:
local-document - Status:
unspecified - Location:
docs/four-pattern-tradeoff-matrix.md — Four Keycloak integration patterns (lines 1-14) - Public/reference URL:
repo:///docs/four-pattern-tradeoff-matrix.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
45.7404
La5d0a70f24 four pattern tradeoff matrix — 이 repository의 실행 증거
- Type:
local-document - Status:
unspecified - Location:
docs/four-pattern-tradeoff-matrix.md — 이 repository의 실행 증거 (lines 28-37) - Public/reference URL:
repo:///docs/four-pattern-tradeoff-matrix.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
21.7129
L2c120c8093 four pattern tradeoff matrix — 선택 기준
- Type:
local-document - Status:
unspecified - Location:
docs/four-pattern-tradeoff-matrix.md — 선택 기준 (lines 15-27) - Public/reference URL:
repo:///docs/four-pattern-tradeoff-matrix.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
17.2810
L4ec23ba045 keycloak branch index — Keycloak branch implementation index
- Type:
local-document - Status:
unspecified - Location:
docs/keycloak-branch-index.md — Keycloak branch implementation index (lines 1-29) - Public/reference URL:
repo:///docs/keycloak-branch-index.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
14.8301
Lb39734ea9b google idp brokering — Google IdP brokering
- Type:
local-document - Status:
unspecified - Location:
docs/google-idp-brokering.md — Google IdP brokering (lines 1-5) - Public/reference URL:
repo:///docs/google-idp-brokering.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
5.8515
La28755902d google claim to role — Google claim-to-role mapping
- Type:
local-document - Status:
unspecified - Location:
docs/google-claim-to-role.md — Google claim-to-role mapping (lines 1-18) - Public/reference URL:
repo:///docs/google-claim-to-role.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
4.7503
Le8474e5ddd https termination — HTTPS termination: nginx or Caddy
- Type:
local-document - Status:
unspecified - Location:
docs/https-termination.md — HTTPS termination: nginx or Caddy (lines 1-20) - Public/reference URL:
repo:///docs/https-termination.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
2.6850
L0eb117abf5 google redirect uri policy — Google redirect URI policy
- Type:
local-document - Status:
unspecified - Location:
docs/google-redirect-uri-policy.md — Google redirect URI policy (lines 1-24) - Public/reference URL:
repo:///docs/google-redirect-uri-policy.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
2.5149
L5d2c3b8016 reverse proxy headers — Reverse proxy headers
- Type:
local-document - Status:
unspecified - Location:
docs/reverse-proxy-headers.md — Reverse proxy headers (lines 1-15) - Public/reference URL:
repo:///docs/reverse-proxy-headers.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
1.8170
L03b6abccb3 google claim mapping — Google claim and identity mapping
- Type:
local-document - Status:
unspecified - Location:
docs/google-claim-mapping.md — Google claim and identity mapping (lines 1-23) - Public/reference URL:
repo:///docs/google-claim-mapping.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
1.5038
L0217277f31 account linking sub vs email — Federated account key: sub, not email
- Type:
local-document - Status:
unspecified - Location:
docs/account-linking-sub-vs-email.md — Federated account key:sub, not email (lines 1-18) - Public/reference URL:
repo:///docs/account-linking-sub-vs-email.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
1.4977
L4a3b756b3d google idp brokering — Two verification profiles
- Type:
local-document - Status:
unspecified - Location:
docs/google-idp-brokering.md — Two verification profiles (lines 6-28) - Public/reference URL:
repo:///docs/google-idp-brokering.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
1.0205
Le9a41ffd86 public domain tunneling — Public HTTPS domain for broker callbacks
- Type:
local-document - Status:
unspecified - Location:
docs/public-domain-tunneling.md — Public HTTPS domain for broker callbacks (lines 1-21) - Public/reference URL:
repo:///docs/public-domain-tunneling.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
0.7299
L55212df816 first broker login security — First Broker Login security
- Type:
local-document - Status:
unspecified - Location:
docs/first-broker-login-security.md — First Broker Login security (lines 1-27) - Public/reference URL:
repo:///docs/first-broker-login-security.md - Claim IDs: —
- Decision IDs: —
- Retrieval priority:
0.0881