refactor: 문서 개선 중

This commit is contained in:
donghyeon-ka
2026-09-21 14:30:55 +09:00
parent c93cdea150
commit 805a18f486
1497 changed files with 525837 additions and 59152 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,182 @@
{
"version": "1.1",
"id": "idp-broker-upstream-downstream-boundary",
"title": "외부 IdP 인증은 Keycloak broker에서 application credential로 다시 경계가 나뉜다",
"question": "외부 IdP의 인증 결과는 Keycloak broker에서 어떻게 local identity와 Keycloak-issued authorization code로 바뀌고 기존 AP1~AP4 경계로 이어지는가?",
"type": "data-flow",
"direction": "LR",
"audience": [
"외부 IdP brokering과 application OAuth 경계를 구분하려는 개발자"
],
"summary": "Google은 upstream identity provider이고 Keycloak이 그 결과를 검증해 local identity와 Keycloak-issued authorization code로 바꾼 뒤 기존 AP1~AP4 downstream 경계로 넘긴다.",
"alt": "Upstream IdP zone의 Google identity assertion이 Keycloak broker zone의 validation과 account linking을 거쳐 Keycloak authorization code가 되고 기존 AP1~AP4 application 경계로 이어지는 다이어그램.",
"long_description": "왼쪽 upstream IdP zone의 Google이 identity assertion을 Keycloak broker에 넘긴다. Keycloak은 assertion을 검증하고 provider alias와 upstream sub로 local identity를 연결한 뒤 자기 authorization code를 발급한다. 이 code가 기존 AP1·AP2·AP3·AP4 application 경계 중 하나로 이어지므로 application이 신뢰하는 issuer는 계속 Keycloak이다.",
"source_context": {
"document": "document.md",
"document_sha256": "ea10df24b892e2c57123a37a4b4f0d821e4f394353e6746f50df6a48342353e9",
"anchor": {
"kind": "heading",
"value": "Google login이 들어와도 네 애플리케이션 경계는 바뀌지 않는다",
"line": 1150
}
},
"composition": {
"profile": "two-zone-pipeline",
"diagram_only": true,
"reference_ids": [
"localization-pipeline"
],
"rationale": "핵심이 upstream IdP와 Keycloak/application 사이의 protocol boundary를 분리하면서 변환 순서를 함께 보여 주는 것이므로 two-zone-pipeline을 사용한다.",
"focus_node": "broker"
},
"groups": [
{
"id": "upstream-zone",
"label": "Upstream IdP",
"kind": "system",
"role": "zone",
"description": "Keycloak 앞에서 사용자 인증을 수행하는 외부 identity provider 경계.",
"evidence": [
{
"start_line": 1152,
"end_line": 1157
}
],
"assumption": false
},
{
"id": "broker-app-zone",
"label": "Keycloak → Application",
"kind": "system",
"role": "zone",
"description": "Keycloak이 upstream 결과를 local identity와 자기 authorization code로 바꿔 application OAuth 경계로 넘기는 구간.",
"evidence": [
{
"start_line": 1152,
"end_line": 1165
}
],
"assumption": false
}
],
"nodes": [
{
"id": "google",
"label": "Google IdP",
"kind": "service",
"role": "source",
"group": "upstream-zone",
"description": "Upstream authorization을 수행하고 identity assertion을 Keycloak에 돌려주는 IdP.",
"details": [
"identity assertion"
],
"evidence": [
{
"start_line": 1152,
"end_line": 1157
}
],
"assumption": false
},
{
"id": "broker",
"label": "Keycloak broker",
"kind": "service",
"role": "service",
"group": "broker-app-zone",
"emphasis": "primary",
"description": "Upstream response를 검증하고 provider alias와 upstream sub로 local user와 session을 연결하는 broker.",
"details": [
"broker validation",
"provider alias + sub",
"local user · session"
],
"evidence": [
{
"start_line": 1152,
"end_line": 1160
}
],
"assumption": false
},
{
"id": "keycloak-code",
"label": "Keycloak authorization code",
"kind": "data",
"role": "service",
"group": "broker-app-zone",
"description": "Upstream token이 아니라 Keycloak이 downstream application에 발급하는 authorization code.",
"evidence": [
{
"start_line": 1161,
"end_line": 1165
}
],
"assumption": false
},
{
"id": "downstream",
"label": "AP1 · AP2 · AP3 · AP4",
"kind": "service",
"role": "sink",
"group": "broker-app-zone",
"description": "외부 IdP와 무관하게 기존 application credential boundary 중 하나가 이어지는 downstream 경계.",
"evidence": [
{
"start_line": 1162,
"end_line": 1165
}
],
"assumption": false
}
],
"edges": [
{
"id": "b1",
"from": "google",
"to": "broker",
"label": "identity assertion",
"kind": "data",
"evidence": [
{
"start_line": 1157,
"end_line": 1158
}
],
"assumption": false
},
{
"id": "b2",
"from": "broker",
"to": "keycloak-code",
"label": "issue code",
"kind": "data",
"emphasis": "primary",
"evidence": [
{
"start_line": 1158,
"end_line": 1161
}
],
"assumption": false
},
{
"id": "b3",
"from": "keycloak-code",
"to": "downstream",
"label": "Keycloak issuer",
"kind": "data",
"evidence": [
{
"start_line": 1161,
"end_line": 1165
}
],
"assumption": false
}
],
"legend": [],
"metadata": {
"rationale": "Google federation을 다섯 번째 application pattern으로 그리지 않고 upstream IdP → Keycloak broker → 기존 application boundary로 분리한다."
}
}