feat: 가상화 문서들 추가
This commit is contained in:
@@ -13,20 +13,20 @@
|
||||
"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",
|
||||
"document_sha256": "e2cc061f683294c937f089ad874cbf7a617f7313c07a92c2148fb11287a0da37",
|
||||
"anchor": {
|
||||
"kind": "marker",
|
||||
"value": "ap4-edge-trust-architecture",
|
||||
"line": 182
|
||||
"kind": "heading",
|
||||
"value": "AP4: OAuth를 모르는 upstream 앞에서 신뢰 경로를 만든다",
|
||||
"line": 202
|
||||
}
|
||||
},
|
||||
"composition": {
|
||||
"profile": "two-zone-pipeline",
|
||||
"profile": "component-flow",
|
||||
"diagram_only": true,
|
||||
"reference_ids": [
|
||||
"localization-pipeline"
|
||||
"payment-event-flow"
|
||||
],
|
||||
"rationale": "외부 browser와 AP4 deployment path의 경계 crossing, 그리고 deployment 내부 Nginx·auth service·upstream 관계가 중심이므로 zone containment와 crossing label을 드러내는 구성이 적합하다.",
|
||||
"rationale": "경계는 group 으로 남기고 방향이 있는 경로로 그린다 — two-zone-pipeline 은 지역 안쪽 엣지 라벨을 캔버스 위쪽에 고정해 group 테두리를 덮는다.",
|
||||
"focus_node": "nginx"
|
||||
},
|
||||
"groups": [
|
||||
@@ -38,12 +38,12 @@
|
||||
"description": "AP4_SESSION을 애플리케이션의 공개 entry point로 보내는 외부 client 경계.",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 914,
|
||||
"end_line": 919
|
||||
"start_line": 952,
|
||||
"end_line": 957
|
||||
},
|
||||
{
|
||||
"start_line": 980,
|
||||
"end_line": 999
|
||||
"start_line": 1018,
|
||||
"end_line": 1039
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -56,12 +56,12 @@
|
||||
"description": "Host-published Nginx와 host 비공개 oauth2-proxy 및 Spring app이 연결되는 deployment 경계.",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 914,
|
||||
"end_line": 914
|
||||
"start_line": 952,
|
||||
"end_line": 952
|
||||
},
|
||||
{
|
||||
"start_line": 1093,
|
||||
"end_line": 1093
|
||||
"start_line": 1133,
|
||||
"end_line": 1133
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -81,8 +81,8 @@
|
||||
],
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 980,
|
||||
"end_line": 999
|
||||
"start_line": 1018,
|
||||
"end_line": 1039
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -96,17 +96,18 @@
|
||||
"emphasis": "primary",
|
||||
"description": "Internal auth subrequest를 만들고 검증 결과를 allowlisted upstream header로 다시 조립하는 공개 gateway.",
|
||||
"details": [
|
||||
"/api/edge",
|
||||
"auth_request",
|
||||
"client header overwrite"
|
||||
],
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 914,
|
||||
"end_line": 928
|
||||
"start_line": 952,
|
||||
"end_line": 966
|
||||
},
|
||||
{
|
||||
"start_line": 1009,
|
||||
"end_line": 1028
|
||||
"start_line": 1049,
|
||||
"end_line": 1068
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -126,12 +127,12 @@
|
||||
],
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 1017,
|
||||
"end_line": 1037
|
||||
"start_line": 1057,
|
||||
"end_line": 1077
|
||||
},
|
||||
{
|
||||
"start_line": 1065,
|
||||
"end_line": 1078
|
||||
"start_line": 1105,
|
||||
"end_line": 1118
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -150,12 +151,12 @@
|
||||
],
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 940,
|
||||
"end_line": 990
|
||||
"start_line": 978,
|
||||
"end_line": 1028
|
||||
},
|
||||
{
|
||||
"start_line": 1009,
|
||||
"end_line": 1014
|
||||
"start_line": 1049,
|
||||
"end_line": 1054
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -166,12 +167,12 @@
|
||||
"id": "browser-to-nginx",
|
||||
"from": "browser",
|
||||
"to": "nginx",
|
||||
"label": "GET /api/edge · AP4_SESSION",
|
||||
"label": "AP4_SESSION",
|
||||
"kind": "request",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 994,
|
||||
"end_line": 999
|
||||
"start_line": 1034,
|
||||
"end_line": 1039
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -180,16 +181,16 @@
|
||||
"id": "nginx-to-oauth2-proxy",
|
||||
"from": "nginx",
|
||||
"to": "oauth2-proxy",
|
||||
"label": "internal /oauth2/auth subrequest",
|
||||
"label": "auth subrequest",
|
||||
"kind": "request",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 922,
|
||||
"end_line": 928
|
||||
"start_line": 960,
|
||||
"end_line": 966
|
||||
},
|
||||
{
|
||||
"start_line": 1009,
|
||||
"end_line": 1009
|
||||
"start_line": 1049,
|
||||
"end_line": 1049
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -198,17 +199,17 @@
|
||||
"id": "nginx-to-upstream",
|
||||
"from": "nginx",
|
||||
"to": "spring-upstream",
|
||||
"label": "allowlisted identity + internal token",
|
||||
"label": "identity",
|
||||
"kind": "data",
|
||||
"emphasis": "primary",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 1017,
|
||||
"end_line": 1026
|
||||
"start_line": 1057,
|
||||
"end_line": 1066
|
||||
},
|
||||
{
|
||||
"start_line": 1065,
|
||||
"end_line": 1078
|
||||
"start_line": 1105,
|
||||
"end_line": 1118
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
|
||||
Reference in New Issue
Block a user