chore: readme 수정

This commit is contained in:
DongHyeonka
2026-07-29 18:03:21 +09:00
parent 8daa568746
commit 741c79b69f
180 changed files with 62890 additions and 13 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,221 @@
{
"version": "1.1",
"id": "ap4-edge-trust-architecture",
"title": "AP4는 공개 edge에서 session을 정제된 upstream identity로 바꾼다",
"question": "AP4에서 외부 session 요청은 어떤 공개·비공개 경계를 지나 trusted identity header와 internal token이 되는가?",
"type": "network",
"direction": "LR",
"audience": [
"Forward-auth edge와 upstream 신뢰 경계를 설계하는 개발자"
],
"summary": "외부 브라우저 요청은 host-published Nginx에서 internal oauth2-proxy auth subrequest로 검증되고, Nginx가 덮어쓴 identity header와 internal token만 host 비공개 Spring upstream으로 전달된다.",
"alt": "외부 브라우저 zone과 Nginx, oauth2-proxy, Spring upstream이 있는 AP4 deployment path를 나눈 edge trust 아키텍처.",
"long_description": "왼쪽 외부 브라우저가 AP4_SESSION과 함께 AP4 deployment path의 공개 Nginx entry point를 호출한다. 같은 deployment path에서 Nginx는 host 비공개 oauth2-proxy의 internal /oauth2/auth endpoint에 subrequest를 보내 session을 검증하고 user와 email 결과를 받는다. 이어서 client가 보낸 동명 header를 덮어쓰고 Nginx-owned identity header와 internal token을 host 비공개 Spring upstream의 /edge/me로 전달한다. Upstream은 user header와 internal token을 함께 확인하며 JWT를 직접 입력으로 받지 않는다.",
"source_context": {
"document": "document.md",
"document_sha256": "df4d1a604c74e756672b5b40510abfedb8c67b39af280a5f51985ea9972f5371",
"anchor": {
"kind": "marker",
"value": "ap4-edge-trust-architecture",
"line": 182
}
},
"composition": {
"profile": "two-zone-pipeline",
"diagram_only": true,
"reference_ids": [
"localization-pipeline"
],
"rationale": "외부 browser와 AP4 deployment path의 경계 crossing, 그리고 deployment 내부 Nginx·auth service·upstream 관계가 중심이므로 zone containment와 crossing label을 드러내는 구성이 적합하다.",
"focus_node": "nginx"
},
"groups": [
{
"id": "external-client-zone",
"label": "External browser",
"kind": "system",
"role": "zone",
"description": "AP4_SESSION을 애플리케이션의 공개 entry point로 보내는 외부 client 경계.",
"evidence": [
{
"start_line": 914,
"end_line": 919
},
{
"start_line": 980,
"end_line": 999
}
],
"assumption": false
},
{
"id": "ap4-deployment-zone",
"label": "AP4 deployment path",
"kind": "system",
"role": "zone",
"description": "Host-published Nginx와 host 비공개 oauth2-proxy 및 Spring app이 연결되는 deployment 경계.",
"evidence": [
{
"start_line": 914,
"end_line": 914
},
{
"start_line": 1093,
"end_line": 1093
}
],
"assumption": false
}
],
"nodes": [
{
"id": "browser",
"label": "Browser",
"kind": "actor",
"role": "source",
"group": "external-client-zone",
"shape": "actor",
"description": "Opaque AP4_SESSION을 자동 첨부해 공개 edge endpoint를 호출한다.",
"details": [
"HttpOnly AP4_SESSION"
],
"evidence": [
{
"start_line": 980,
"end_line": 999
}
],
"assumption": false
},
{
"id": "nginx",
"label": "Nginx edge",
"kind": "service",
"role": "service",
"group": "ap4-deployment-zone",
"emphasis": "primary",
"description": "Internal auth subrequest를 만들고 검증 결과를 allowlisted upstream header로 다시 조립하는 공개 gateway.",
"details": [
"auth_request",
"client header overwrite"
],
"evidence": [
{
"start_line": 914,
"end_line": 928
},
{
"start_line": 1009,
"end_line": 1028
}
],
"assumption": false
},
{
"id": "spring-upstream",
"label": "Spring upstream",
"kind": "service",
"role": "sink",
"group": "ap4-deployment-zone",
"description": "정제된 user header와 Nginx-owned internal token을 함께 검증하는 /edge/me upstream.",
"details": [
"X-Auth-Request-User",
"X-Auth-Request-Email",
"X-Internal-Auth-Token",
"/edge/me controller check"
],
"evidence": [
{
"start_line": 1017,
"end_line": 1037
},
{
"start_line": 1065,
"end_line": 1078
}
],
"assumption": false
},
{
"id": "oauth2-proxy",
"label": "oauth2-proxy",
"kind": "service",
"role": "service",
"group": "ap4-deployment-zone",
"description": "Confidential edge-proxy client이자 AP4_SESSION의 유효성을 판단하는 host 비공개 auth service.",
"details": [
"edge-proxy client",
"minimal cookie session",
"returns user · email"
],
"evidence": [
{
"start_line": 940,
"end_line": 990
},
{
"start_line": 1009,
"end_line": 1014
}
],
"assumption": false
}
],
"edges": [
{
"id": "browser-to-nginx",
"from": "browser",
"to": "nginx",
"label": "GET /api/edge · AP4_SESSION",
"kind": "request",
"evidence": [
{
"start_line": 994,
"end_line": 999
}
],
"assumption": false
},
{
"id": "nginx-to-oauth2-proxy",
"from": "nginx",
"to": "oauth2-proxy",
"label": "internal /oauth2/auth subrequest",
"kind": "request",
"evidence": [
{
"start_line": 922,
"end_line": 928
},
{
"start_line": 1009,
"end_line": 1009
}
],
"assumption": false
},
{
"id": "nginx-to-upstream",
"from": "nginx",
"to": "spring-upstream",
"label": "allowlisted identity + internal token",
"kind": "data",
"emphasis": "primary",
"evidence": [
{
"start_line": 1017,
"end_line": 1026
},
{
"start_line": 1065,
"end_line": 1078
}
],
"assumption": false
}
],
"legend": [],
"metadata": {
"rationale": "Auth subrequest와 upstream forwarding을 한 직선 sequence가 아니라 공개 edge에서 갈라지는 trust topology로 표현했다."
}
}