<mxfile host="app.diagrams.net" agent="architecture-diagram" version="24.0.0">
  <diagram name="API Authorization — token to gateway to backend to data" id="14-api-authorization-flow">
    <mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1780" pageHeight="990" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="n.cli" value="&lt;b&gt;Client application&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="70" y="80" width="240" height="790" as="geometry" />
        </mxCell>
        <mxCell id="_ico1" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACpUlEQVRoge3YTYhNYRzH8Y+3iLzkbZoSdhJZkI1YUWzYWbCxJCU1ZShlpVhQKIoFG28pKxaKDUnyUtTQZJCExZSJEYMMFs+cXMe5955z7jn3jppf/evWfc7/+f6e5/+8nMOIWqsxJeWdhA3YhMUYQG9JfRWqZTiJfvyKxRPsxuyW0VXRHAGsx7/QSfED17ER41rACyYMAVwZAkoDnhTvhRlb2izwWiXSaJRWYvOxDy9yQOWZnW+4jPUaKLFGS+QBdmIGFuGgsAuVXmLTcUS+EnmDA1hQJff4oUG5mnNQ7mNdLfjJeJQx6QDOY61sZ0o7dqErY38/saVa0r0ZEt3BVkzLAF1Ny3EcfSn77sOUpEQ36zz4FkexpADoJI0XFu4lfK/DsjopwdOEhgO4INReWdeOJEUl9iSB6Rc2Rw1H10n0CS/RjcEySKuoF8/wOstDSTMQxaA/x//YIkljahcOs1c1WP6agbQG4mvhIOYWBD0aa6Sr/UIMRFF5KcuzPqYJh93zjP0WZqAyeoSpn5UCPLpPfWmgv8INRPEV57Aqljsa7ax9DDbbQGV0oQOn8Tnjs++wHwtbaSBP3Pb3i87EegbK3BLT6oOwAx0TDq5MaqWBhziFs8KCzqVmG+jHRZzA4yISNtPAGewQFnRhqncXKlLdCoanuQZK0YiBVuu/NzAcDrJqasOeeo0qDXwsjyWT2tCJbcJVIkkfoh+VJXSrRKg0asNh4RW2Q3X4r7iX9Mds4R20rItaZx3wtDfWvbVGYR6uNclAVvA+bMeoWgYirRC+i5ZhYKbwTp0WvH+ofa6PaCtxoyADh2Qf8X2Ymgc8rjJmpJQRb6WRUsHLNNJU8LgaMdJS8LiyGBlW4HHVMjKsweNaKXyW78Zd4atdIdvhiEZUsH4D+zfN9JHFLwAAAAAASUVORK5CYII=;" vertex="1" parent="n.cli">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.entra" value="&lt;b&gt;Entra ID&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#3a2b44;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="350" y="80" width="240" height="790" as="geometry" />
        </mxCell>
        <mxCell id="_ico2" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,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;" vertex="1" parent="n.entra">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.apim" value="&lt;b&gt;API Management&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#4a3200;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="630" y="80" width="240" height="790" as="geometry" />
        </mxCell>
        <mxCell id="_ico3" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,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;" vertex="1" parent="n.apim">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.api" value="&lt;b&gt;Orders API&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="910" y="80" width="240" height="790" as="geometry" />
        </mxCell>
        <mxCell id="_ico4" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACpUlEQVRoge3YTYhNYRzH8Y+3iLzkbZoSdhJZkI1YUWzYWbCxJCU1ZShlpVhQKIoFG28pKxaKDUnyUtTQZJCExZSJEYMMFs+cXMe5955z7jn3jppf/evWfc7/+f6e5/+8nMOIWqsxJeWdhA3YhMUYQG9JfRWqZTiJfvyKxRPsxuyW0VXRHAGsx7/QSfED17ER41rACyYMAVwZAkoDnhTvhRlb2izwWiXSaJRWYvOxDy9yQOWZnW+4jPUaKLFGS+QBdmIGFuGgsAuVXmLTcUS+EnmDA1hQJff4oUG5mnNQ7mNdLfjJeJQx6QDOY61sZ0o7dqErY38/saVa0r0ZEt3BVkzLAF1Ny3EcfSn77sOUpEQ36zz4FkexpADoJI0XFu4lfK/DsjopwdOEhgO4INReWdeOJEUl9iSB6Rc2Rw1H10n0CS/RjcEySKuoF8/wOstDSTMQxaA/x//YIkljahcOs1c1WP6agbQG4mvhIOYWBD0aa6Sr/UIMRFF5KcuzPqYJh93zjP0WZqAyeoSpn5UCPLpPfWmgv8INRPEV57Aqljsa7ax9DDbbQGV0oQOn8Tnjs++wHwtbaSBP3Pb3i87EegbK3BLT6oOwAx0TDq5MaqWBhziFs8KCzqVmG+jHRZzA4yISNtPAGewQFnRhqncXKlLdCoanuQZK0YiBVuu/NzAcDrJqasOeeo0qDXwsjyWT2tCJbcJVIkkfoh+VJXSrRKg0asNh4RW2Q3X4r7iX9Mds4R20rItaZx3wtDfWvbVGYR6uNclAVvA+bMeoWgYirRC+i5ZhYKbwTp0WvH+ofa6PaCtxoyADh2Qf8X2Ymgc8rjJmpJQRb6WRUsHLNNJU8LgaMdJS8LiyGBlW4HHVMjKsweNaKXyW78Zd4atdIdvhiEZUsH4D+zfN9JHFLwAAAAAASUVORK5CYII=;" vertex="1" parent="n.api">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.down" value="&lt;b&gt;Downstream API&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1190" y="80" width="240" height="790" as="geometry" />
        </mxCell>
        <mxCell id="_ico5" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACpUlEQVRoge3YTYhNYRzH8Y+3iLzkbZoSdhJZkI1YUWzYWbCxJCU1ZShlpVhQKIoFG28pKxaKDUnyUtTQZJCExZSJEYMMFs+cXMe5955z7jn3jppf/evWfc7/+f6e5/+8nMOIWqsxJeWdhA3YhMUYQG9JfRWqZTiJfvyKxRPsxuyW0VXRHAGsx7/QSfED17ER41rACyYMAVwZAkoDnhTvhRlb2izwWiXSaJRWYvOxDy9yQOWZnW+4jPUaKLFGS+QBdmIGFuGgsAuVXmLTcUS+EnmDA1hQJff4oUG5mnNQ7mNdLfjJeJQx6QDOY61sZ0o7dqErY38/saVa0r0ZEt3BVkzLAF1Ny3EcfSn77sOUpEQ36zz4FkexpADoJI0XFu4lfK/DsjopwdOEhgO4INReWdeOJEUl9iSB6Rc2Rw1H10n0CS/RjcEySKuoF8/wOstDSTMQxaA/x//YIkljahcOs1c1WP6agbQG4mvhIOYWBD0aa6Sr/UIMRFF5KcuzPqYJh93zjP0WZqAyeoSpn5UCPLpPfWmgv8INRPEV57Aqljsa7ax9DDbbQGV0oQOn8Tnjs++wHwtbaSBP3Pb3i87EegbK3BLT6oOwAx0TDq5MaqWBhziFs8KCzqVmG+jHRZzA4yISNtPAGewQFnRhqncXKlLdCoanuQZK0YiBVuu/NzAcDrJqasOeeo0qDXwsjyWT2tCJbcJVIkkfoh+VJXSrRKg0asNh4RW2Q3X4r7iX9Mds4R20rItaZx3wtDfWvbVGYR6uNclAVvA+bMeoWgYirRC+i5ZhYKbwTp0WvH+ofa6PaCtxoyADh2Qf8X2Ymgc8rjJmpJQRb6WRUsHLNNJU8LgaMdJS8LiyGBlW4HHVMjKsweNaKXyW78Zd4atdIdvhiEZUsH4D+zfN9JHFLwAAAAAASUVORK5CYII=;" vertex="1" parent="n.down">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.sql" value="&lt;b&gt;Azure SQL&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#1e3a1e;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1480" y="80" width="240" height="790" as="geometry" />
        </mxCell>
        <mxCell id="_ico6" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,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;" vertex="1" parent="n.sql">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_m7" value="1. auth code or client credentials" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.1165;exitDx=0;exitDy=0;entryX=0.5;entryY=0.1165;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.cli" target="n.entra">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m8" value="2. access_token  aud=api://orders" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#5a6570;exitX=0.5;exitY=0.1671;exitDx=0;exitDy=0;entryX=0.5;entryY=0.1671;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.entra" target="n.cli">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m9" value="3. GET /orders/{id} + Bearer" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.2177;exitDx=0;exitDy=0;entryX=0.5;entryY=0.2177;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.cli" target="n.apim">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m10" value="4. validate-jwt: iss, aud, exp, signature" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.2684;exitDx=0;exitDy=0;entryX=0.5;entryY=0.2987;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.apim" target="n.apim">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="830" y="290" />
              <mxPoint x="830" y="320" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m11" value="5. require scp Orders.Read, quota by tid" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.3342;exitDx=0;exitDy=0;entryX=0.5;entryY=0.3646;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.apim" target="n.apim">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="830" y="350" />
              <mxPoint x="830" y="370" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m12" value="6. forward + tenant id from claim" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.4000;exitDx=0;exitDy=0;entryX=0.5;entryY=0.4000;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.apim" target="n.api">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m13" value="7. app role check, then tenant predicate" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.4506;exitDx=0;exitDy=0;entryX=0.5;entryY=0.4810;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.api" target="n.api">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1110" y="440" />
              <mxPoint x="1110" y="460" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m14" value="8. on-behalf-of exchange" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.5165;exitDx=0;exitDy=0;entryX=0.5;entryY=0.5165;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.api" target="n.entra">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m15" value="9. downstream token, user-scoped" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#5a6570;exitX=0.5;exitY=0.5671;exitDx=0;exitDy=0;entryX=0.5;entryY=0.5671;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.entra" target="n.api">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m16" value="10. call with delegated token" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.6177;exitDx=0;exitDy=0;entryX=0.5;entryY=0.6177;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.api" target="n.down">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m17" value="11. result" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#5a6570;exitX=0.5;exitY=0.6684;exitDx=0;exitDy=0;entryX=0.5;entryY=0.6684;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.down" target="n.api">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m18" value="12. managed identity + RLS context" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.7190;exitDx=0;exitDy=0;entryX=0.5;entryY=0.7190;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.api" target="n.sql">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m19" value="13. rows for this tenant only" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#5a6570;exitX=0.5;exitY=0.7696;exitDx=0;exitDy=0;entryX=0.5;entryY=0.7696;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.sql" target="n.api">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m20" value="14. 200 OK" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#5a6570;exitX=0.5;exitY=0.8203;exitDx=0;exitDy=0;entryX=0.5;entryY=0.8203;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.api" target="n.apim">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m21" value="15. 200 + correlation id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#5a6570;exitX=0.5;exitY=0.8709;exitDx=0;exitDy=0;entryX=0.5;entryY=0.8709;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.apim" target="n.cli">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m22" value="16. 401 invalid_token / 403 insufficient_scope" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;dashed=1;strokeColor=#b85450;fontColor=#b85450;exitX=0.5;exitY=0.9215;exitDx=0;exitDy=0;entryX=0.5;entryY=0.9215;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.apim" target="n.cli">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="title" value="API Authorization — token to gateway to backend to data" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=20;fontStyle=1;fontColor=#16202c;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="20" width="1690" height="30" as="geometry" />
        </mxCell>
        <mxCell id="rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#c9d3de;" vertex="1" parent="1">
          <mxGeometry x="40" y="50" width="1690" height="10" as="geometry" />
        </mxCell>
        <mxCell id="note" value="No connection string and no client secret appears anywhere in this flow. The gateway rejects a malformed or foreign-tenant token before the backend is reached, and the backend still re-checks: the gateway is defence, not the authority." style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="920" width="1690" height="20" as="geometry" />
        </mxCell>
        <mxCell id="foot-rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#e3e9ef;" vertex="1" parent="1">
          <mxGeometry x="40" y="940" width="1690" height="10" as="geometry" />
        </mxCell>
        <mxCell id="foot" value="v 1.0   ·   owner Data &amp; AI Global Practice   ·   date 2026-08" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=9;fontColor=#9aa7b4;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="950" width="1690" height="10" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
