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,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2026-07-23T00:00:00.000Z" agent="techviz-harness" version="24.7.17" type="device">
<diagram id="bearer-jwt-validation-chain" name="Bearer JWT가 검증과 역할 변환을 지나 principal이 된다">
<mxGraphModel dx="680" dy="2231" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="2231" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="n_bearer-input" value="Bearer JWT" tooltip="Resource Server가 Authorization header에서 받은 raw Bearer JWT. | Evidence: L354-L359" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="48.5" y="145.0" width="150.0" height="64.0" as="geometry"/>
</mxCell>
<mxCell id="n_jwt-decoder" value="NimbusJwtDecoder&lt;br/&gt;JWK signature" tooltip="JWK를 이용해 JWT 서명을 검증하는 decoder. | Evidence: L359-L360" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="45.0" y="455.0" width="150.0" height="71.0" as="geometry"/>
</mxCell>
<mxCell id="n_issuer-time" value="Issuer · Time validators" tooltip="Expected issuer와 timestamp 조건을 확인하는 default validators. | Evidence: L361-L361" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="43.5" y="765.0" width="150.0" height="74.0" as="geometry"/>
</mxCell>
<mxCell id="n_audience-validator" value="AudienceValidator&lt;br/&gt;keycloak-pattern-api" tooltip="keycloak-pattern-api audience 포함 여부를 확인하는 project validator. | Evidence: L362-L370" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="45.0" y="1075.0" width="174.0" height="71.0" as="geometry"/>
</mxCell>
<mxCell id="n_validated-jwt" value="Validated Jwt" tooltip="서명, issuer·시간, audience 검증을 통과한 Jwt. | Evidence: L363-L363" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="48.5" y="1409.0" width="150.0" height="64.0" as="geometry"/>
</mxCell>
<mxCell id="n_role-converter" value="Realm role converter&lt;br/&gt;KeycloakRealmRoleConverter" tooltip="realm_access.roles 문자열에 ROLE_ prefix를 붙여 authority로 변환한다. | Evidence: L364-L370" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="45.0" y="1719.0" width="216.0" height="71.0" as="geometry"/>
</mxCell>
<mxCell id="n_principal" value="Authenticated principal&lt;br/&gt;ROLE_* authorities" tooltip="검증된 JWT와 ROLE_* authorities를 가진 인증 결과. | Evidence: L365-L365" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;dashed=1;fillColor=#f5f7fa;" vertex="1" parent="1">
<mxGeometry x="35.0" y="2095.0" width="160.0" height="91.0" as="geometry"/>
</mxCell>
<mxCell id="e_e1" value="decode" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_bearer-input" target="n_jwt-decoder">
<mxGeometry relative="1" as="geometry">
<mxPoint x="121.8" y="304.0" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="e_e2" value="signature ok" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_jwt-decoder" target="n_issuer-time">
<mxGeometry relative="1" as="geometry">
<mxPoint x="119.2" y="617.5" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="e_e3" value="claims" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_issuer-time" target="n_audience-validator">
<mxGeometry relative="1" as="geometry">
<mxPoint x="125.2" y="929.0" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="e_e4" value="valid audience" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_audience-validator" target="n_validated-jwt">
<mxGeometry relative="1" as="geometry">
<mxPoint x="127.8" y="1249.5" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="e_e5" value="realm roles" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_validated-jwt" target="n_role-converter">
<mxGeometry relative="1" as="geometry">
<mxPoint x="138.2" y="1568.0" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="e_e6" value="authorities" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_role-converter" target="n_principal">
<mxGeometry relative="1" as="geometry">
<mxPoint x="134.0" y="1914.5" as="offset"/>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>