docs: add OIDC cross-zone redirect diagram to sso-and-identity.md
Sequence diagram showing the browser carries every hop itself - Authentik and the app never talk directly - with only the OAuth authorize/token exchange crossing from the browser-facing zone into the service-to-service zone. Built to the public-repo diagram conventions in CLAUDE.md (labelBackgroundColor + matching rich-text span, off-line label positioning, line-color-matched labels, legend instead of a color-explaining caption).
This commit is contained in:
2 files changed
+6
No files matched your search
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Do not edit this file with editors other than draw.io -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="907px" height="661px" viewBox="0 0 907 661" content="<mxfile host="embed.diagrams.net" scale="1" border="0"> <diagram name="OIDC Cross-Zone Redirect" id="oidc-redirect-2"> <mxGraphModel dx="1414" dy="791" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1000" pageHeight="760" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="band-local" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#333333;opacity=40;" value="BROWSER-FACING ZONE — *.local.thesabear.net" vertex="1"> <mxGeometry height="560" width="260" x="60" y="60" as="geometry" /> </mxCell> <mxCell id="band-caddy" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#333333;opacity=40;" value="SERVICE-TO-SERVICE ZONE — *.caddy.thesabear.net (no mTLS on this hop)" vertex="1"> <mxGeometry height="560" width="260" x="680" y="60" as="geometry" /> </mxCell> <mxCell id="browser" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#666666;fontColor=#333333;fontSize=14;fontStyle=1;shadow=1;" value="Browser" vertex="1"> <mxGeometry height="50" width="160" x="420" y="80" as="geometry" /> </mxCell> <mxCell id="app" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333;fontSize=14;fontStyle=1;shadow=1;" value="App" vertex="1"> <mxGeometry height="50" width="140" x="120" y="100" as="geometry" /> </mxCell> <mxCell id="authentik" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;fontSize=14;fontStyle=1;shadow=1;" value="Authentik" vertex="1"> <mxGeometry height="50" width="140" x="740" y="100" as="geometry" /> </mxCell> <mxCell id="ll-app" edge="1" parent="1" style="endArrow=none;dashed=1;html=1;strokeColor=#999999;"> <mxGeometry relative="1" as="geometry"> <mxPoint x="189.58" y="160" as="sourcePoint" /> <mxPoint x="189.58" y="590" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="ll-browser" edge="1" parent="1" style="endArrow=none;dashed=1;html=1;strokeColor=#999999;"> <mxGeometry relative="1" as="geometry"> <mxPoint x="500" y="130" as="sourcePoint" /> <mxPoint x="500" y="560" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="ll-authentik" edge="1" parent="1" style="endArrow=none;dashed=1;html=1;strokeColor=#999999;"> <mxGeometry relative="1" as="geometry"> <mxPoint x="810" y="130" as="sourcePoint" /> <mxPoint x="810" y="560" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="s1" edge="1" parent="1" style="html=1;labelBackgroundColor=#1C1D1E;endArrow=block;strokeColor=#666666;fontColor=#666666;strokeWidth=2;fontSize=12;" value="&lt;span style=&quot;background-color: light-dark(rgb(255, 255, 255), Line truncated
|
||||||
|
After Width: | Height: | Size: 484 KiB |
@@ -53,6 +53,8 @@ For an app using native OIDC, the login always follows the same path:
|
|||||||
3. That exchange happens against Authentik's own address on the **service-to-service zone** — reachable from a browser for this one hop specifically, even though that zone doesn't get the mutual-TLS treatment the browser-facing zone does.
|
3. That exchange happens against Authentik's own address on the **service-to-service zone** — reachable from a browser for this one hop specifically, even though that zone doesn't get the mutual-TLS treatment the browser-facing zone does.
|
||||||
4. On success, the browser lands back on the app, still on the browser-facing zone.
|
4. On success, the browser lands back on the app, still on the browser-facing zone.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
So an app's OIDC discovery/authority setting always points at the service-to-service zone, even though the app itself is normally reached on the browser-facing zone — the two zones are defined in [`docs/dns-naming.md`](dns-naming.md). This is confirmed against one real app's actual login flow, not assumed to hold for every app without checking. Every other app-specific setting (token lifetime, scopes, flow type) doesn't generalize the same way — each app's own OIDC documentation gets read fresh rather than copying another app's provider config, since those details genuinely differ per vendor.
|
So an app's OIDC discovery/authority setting always points at the service-to-service zone, even though the app itself is normally reached on the browser-facing zone — the two zones are defined in [`docs/dns-naming.md`](dns-naming.md). This is confirmed against one real app's actual login flow, not assumed to hold for every app without checking. Every other app-specific setting (token lifetime, scopes, flow type) doesn't generalize the same way — each app's own OIDC documentation gets read fresh rather than copying another app's provider config, since those details genuinely differ per vendor.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
|
|||||||
Reference in new issue
Block a user