refactor: 문서 개선 중
This commit is contained in:
@@ -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로 분리한다."
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user