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
@@ -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로 분리한다."
}
}