<mxfile host="app.diagrams.net" agent="architecture-diagram" version="24.0.0">
  <diagram name="Identity — Who Proves What, To Whom, In What Order" id="24-identity-and-access-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="1660" pageHeight="930" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="n.h-usr" value="&lt;b&gt;Shopper&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=#08427b;strokeColor=#073b6f;fontColor=#ffffff;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="60" y="80" width="170" height="730" as="geometry" />
        </mxCell>
        <mxCell id="_plate1" value="" style="rounded=1;arcSize=22;html=1;fillColor=#ffffff;strokeColor=none;movable=0;resizable=0;connectable=0;" vertex="1" parent="n.h-usr">
          <mxGeometry x="5" y="13" width="32" height="32" 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,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACWklEQVRoge3Zz4tNYRzH8dfIrwmJGcZMIgpJEjZsiA1pLGhK2VDEcpLFWCkrG3tr/8GQHRNWipRhocxmombIaESNjDFj8XTrNHPunXueOfec2zTv+m7Ovd9z3p/uvec8z/eyRLm05Hy+lTiBbuzEFvzGKF6hH0M5XzMXVuAaRjAzTz3BwXI002nHc/OLJ2sKfSW4zqELw7LJJ+te4cYJWoXvdax8pa4WLV7hdp2C89UEthbsrh0/FyierPvF6nM9J/FK/cKqGJFlkQHORvZVYy2OxzTGBtgX2Zf7OWMDdET21aIzpik2wHRkXy3+xTTFBhiN7KvFSExTbIB3kX21eN+Ac1blknxvo9+xvMgA6zGWY4BS1kQ3ImVn1zjaCnZH+MifZpSdXdO4ULR4ko3Cjy9W/lbxynNZh0eyyU/gYhmytTiPD2qLT+EBtuV10bw39XAIZ7BLWHL8wWe8xmPhlrnEoiH2K7RfGI10YgMm8RBv6uhtRY+wfJ7CV3zCC/zIKpIlwBr04oowtErjozD3GRSmFePCTqsNe3EUJ4U712z+4hnuCmOaXOlW39Aqr+oXnjG5cFNYqxclX6kh7Fmo/OUSxJM1jM2x8oeFe3iZAWYwEBtgoAnkK3Uuq/yxJpBO1ttqotW2lD1ZEzeYA9id9kK1AKcb5xLNqbSDaQFasL2xLlHsSDuYFqBN+Kuo2ehKO5gWYHWDRWJJ9YqdCzUNizLAZOEW9ZHqlRZgTGNmnwtlMMube5X/9E3WN2zKEqAFdzTHYm5IWFhWFa1FB44o77nwBS+FrecSTcl/+F0YjmstwYwAAAAASUVORK5CYII=;" vertex="1" parent="n.h-usr">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.h-app" value="&lt;b&gt;Mobile app&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="250" y="80" width="170" height="730" 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,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAYAAABxLuKEAAAABmJLR0QA/wD/AP+gvaeTAAAE6klEQVR4nO2Za2wUVRTH/+fudFqUNoUKacNCSLc8FDVG/SIPqfVRpEYIWKMgIKUk+gUSomjF6hg0NgFTUdAQiiWEKEEesdZoVFiMRiQhhojRCMailBZZ+qalS2fu8QsaLO12dncea72/5H7Zveec//5z5+bMWUChUCgUCoVCoVAoFApFcpDfAuyweFdLlpCBnDQTdClDdH6wKOuC2zVTzpjCMGsT/mgvAeM+EGaBMQ2A1m9bFwHHAYSJee+O5aNPOK0jZYwp2x7JtALaMwysBJAXZ/hBkKzcuSzniFN6UsKYpbWti0C0EfEb0p+6gNTKa8syI8lq8tWY0j2sj+hp3wKg3MG0ZwXLR3Ysz/kumSS+GbNk57nr2dI/BTDLhfRREBbuenL0J4km8MWY0j0cSLvYtg/APBfL9EjIot1lNxxNJFg4rcZW0a7WjZJ5nmSGi+s6MB14YmskoXvLc2MerWmdwcAqCcCDlXdZE1sS0enpo2QYLH4MtvwAYJqXdUlw4YdlY76KJ6Z/4+QqJ4IXSpi9NQUAYPE6AHEZ49mJWbCtJWix3E3ADK9qXgVbZIU+XpnbYDfA1RMz/91IoSRZDqLZprSCAMBuFhwcAgfmAXjTboArxpRsjZQI5tdN8C0A+ebGv+Ei+GVMyTvto5iim1jKJZaTiZ3h1ng2x7xj6uvrn2bmuQAyhkrUZaXrB85Pvb3TTB8ZjwAPse46P1Y3DJJ2Ng9qTF1d3UIi2msnyUUzDfsjN6LdTLcr0h+Y17PAoe5L5tEja8ZfirU1ljFVRPTcULUsJuw7PwVN0VQ9KNdCQBsTaizTeuvwqmDjQHsG7XyFECftFDnSMQ6NvSMhGf+ZZTFGSYlnSQR+Knq76SkwX3NABj0x4XBY6+rq2kBEDwJIG2hPm5mh1Z69abxkSom5ThK8Ty15yw4bZP79QVI/aOamphoirEhel/8wsP+b1rxSXLmcEzamsLohu0/ofwLQHVPnMwx+8dvVwdeAJN6ue0kvlsy6y6MDTxczjOnVjbcBSTR4zDw3JRpaZ9EANgDMJ8MwRCgUeghAbjwZtrfOqOiWaRPdUOczTJKmavn5+dsAlMUdDYYchkcGAEHIhzUiejyR6G5Lg+Rh6gzjfg1AD4AR8QZr6EMfD9jeDAfyNQDrAGxGnBdxluhFtzVsjRlHAFBbW5ut63oonsjNzXe+0CnTF7ijy3ciCTd4U6saionoMyfVpBDfJ9zH5PaePticMTECYIyDglID5p+TelcqqPrtDQKtcUpPqkCMx4Y0Zu3atUEhxIDvQw0Zk7OP6XcfBIls5+X5Rg9FrbxBH6WKioocIjqEGLPS0OVfITkNx9Knu6LQF5irG4xJnbHumBWwMUAuMH9BUyCIxsAE58T5RyQQoA1AjN5FCJHJNjpbYomZ0TA+1+cgEhjroEbPscBY+vu6gg4g9tjhIwB9djIG2MQ9l7/EGOuc72PLBBdL5tWNlQX/tB8xL9/KyspplmU9AJvDKBNChPV7i8+I4Gw7+1OEKAHlzS9N2nX1h67ManPXnyqUjFcB9uN/6nj4miVWRYzJx/t/4eoQe+wrp4ol5GKA5iB1GsEoCF8w83stL085MNgmb6b7BosccfIOZrqZmPMAyvKk7hUYsg8QZwA6zRniaNvzoQ4v6ysUCoVCoVAoFAqFQvH/5C/K90IiZ8IiIQAAAABJRU5ErkJggg==;" vertex="1" parent="n.h-app">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.h-gw" value="&lt;b&gt;Envoy Gateway&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="450" y="80" width="170" height="730" 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,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;" vertex="1" parent="n.h-gw">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.h-kc" value="&lt;b&gt;Keycloak&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="650" y="80" width="170" height="730" 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,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;" vertex="1" parent="n.h-kc">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.h-risk" value="&lt;b&gt;Risk engine&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="840" y="80" width="170" height="730" 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,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAADDUlEQVRoge3azatVVRjH8Y+aebMX4Q6EQKQXaiBRDkS46TCLZgbpIMgKylHQC6HYX+BMmgS90BvhoJpEgmiFoNmk0sAyiKK07GVwzTJLUe9tsN1w2j37nL32XvvcBn5hDc5z1lrP73fWWnuvtThcZm6Z11O/a/EwVuIP7MJrONlTvixMYBMOYzYoZ/EW1syVwDpuwXZMi4VH5VNsxuI50Avm4y68h5lAYNPyG57DjeMSvhRb8X0H0VG5iPexAQv6EL4GO3EuUdi04ldOafMNnsFkV9GjFmWTsn+gn0OJbVsv+iuwDac6CB80MMidePOSuJR+DigeyY14IYPwOgMlS/EsjiX09TtuGyX+dt2eKk0NlCzAeuxtmPfdUQYezyi+iYFBbsUOwxf9qWqj+ZXP1yQkzM3XeArLFC+5r4I6/9FXNXA2v65kzuAlvBh891c1UDXwdx+KWnJdEBtpYDqziC673ehFdroaqBo40SFhxGyHtsuD2PFqoGrgxw4JI7qMwE1B7IdqIBqBMx2S5mIxVgTxY9VA1cAMvsgopO0UWoWFQfxwNVA1AJ+3TBrRdgqtrokfqgYiAwdbJs3JVBD7VYNFDB9ml5PG1bg7iH8QVY4M/IQvcypK5D7xlmZPVDkyAO9kk5POg0HsghoDdayQZzd6IFH8sktiq/3sqmtQNwJH8Uli8hxsEx/qX2/T2SbjHYEbxJcGJ3BlGwMT+HmMBl6p6WNLG/ElT47JwJR47p/Eki4GrlJs8Po0cK3iLihq/3QX8SUPdDDwUYP+X61p+y0W5TAwD/t6MrC5pt0M1uUQX3Kz4jSU08AG8byfxcs5xZc8mtHAPervWY/q8Xakbr6mGHhsiPjT4oNMNhbh45YGFuL5IXXP494+xZdM4kiigSl8NqTeBTw0DvEl1yuOnqMMHFG8YYfde57D/eMUXzIpbTpF5U+ZH5epTEhf2GX5Tv3Zd+w8ori/byr+DR33OH2wHG8bLvw4Ns6VwKasxW7/Fv4LnpBpbzNIX381oNh+3KGYWgf9P67uL5OdfwCdL2jqexBRtgAAAABJRU5ErkJggg==;" vertex="1" parent="n.h-risk">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.h-svc" value="&lt;b&gt;Order service&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="1040" y="80" width="170" height="730" as="geometry" />
        </mxCell>
        <mxCell id="_ico7" 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.h-svc">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.h-opa" value="&lt;b&gt;Policy engine&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="1240" y="80" width="170" height="730" as="geometry" />
        </mxCell>
        <mxCell id="_ico8" 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+gvaeTAAADDUlEQVRoge3azatVVRjH8Y+aebMX4Q6EQKQXaiBRDkS46TCLZgbpIMgKylHQC6HYX+BMmgS90BvhoJpEgmiFoNmk0sAyiKK07GVwzTJLUe9tsN1w2j37nL32XvvcBn5hDc5z1lrP73fWWnuvtThcZm6Z11O/a/EwVuIP7MJrONlTvixMYBMOYzYoZ/EW1syVwDpuwXZMi4VH5VNsxuI50Avm4y68h5lAYNPyG57DjeMSvhRb8X0H0VG5iPexAQv6EL4GO3EuUdi04ldOafMNnsFkV9GjFmWTsn+gn0OJbVsv+iuwDac6CB80MMidePOSuJR+DigeyY14IYPwOgMlS/EsjiX09TtuGyX+dt2eKk0NlCzAeuxtmPfdUQYezyi+iYFBbsUOwxf9qWqj+ZXP1yQkzM3XeArLFC+5r4I6/9FXNXA2v65kzuAlvBh891c1UDXwdx+KWnJdEBtpYDqziC673ehFdroaqBo40SFhxGyHtsuD2PFqoGrgxw4JI7qMwE1B7IdqIBqBMx2S5mIxVgTxY9VA1cAMvsgopO0UWoWFQfxwNVA1AJ+3TBrRdgqtrokfqgYiAwdbJs3JVBD7VYNFDB9ml5PG1bg7iH8QVY4M/IQvcypK5D7xlmZPVDkyAO9kk5POg0HsghoDdayQZzd6IFH8sktiq/3sqmtQNwJH8Uli8hxsEx/qX2/T2SbjHYEbxJcGJ3BlGwMT+HmMBl6p6WNLG/ElT47JwJR47p/Eki4GrlJs8Po0cK3iLihq/3QX8SUPdDDwUYP+X61p+y0W5TAwD/t6MrC5pt0M1uUQX3Kz4jSU08AG8byfxcs5xZc8mtHAPervWY/q8Xakbr6mGHhsiPjT4oNMNhbh45YGFuL5IXXP494+xZdM4kiigSl8NqTeBTw0DvEl1yuOnqMMHFG8YYfde57D/eMUXzIpbTpF5U+ZH5epTEhf2GX5Tv3Zd+w8ori/byr+DR33OH2wHG8bLvw4Ns6VwKasxW7/Fv4LnpBpbzNIX381oNh+3KGYWgf9P67uL5OdfwCdL2jqexBRtgAAAABJRU5ErkJggg==;" vertex="1" parent="n.h-opa">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.h-aud" value="&lt;b&gt;Audit log&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="1430" y="80" width="170" height="730" as="geometry" />
        </mxCell>
        <mxCell id="_ico9" 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+gvaeTAAADDUlEQVRoge3azatVVRjH8Y+aebMX4Q6EQKQXaiBRDkS46TCLZgbpIMgKylHQC6HYX+BMmgS90BvhoJpEgmiFoNmk0sAyiKK07GVwzTJLUe9tsN1w2j37nL32XvvcBn5hDc5z1lrP73fWWnuvtThcZm6Z11O/a/EwVuIP7MJrONlTvixMYBMOYzYoZ/EW1syVwDpuwXZMi4VH5VNsxuI50Avm4y68h5lAYNPyG57DjeMSvhRb8X0H0VG5iPexAQv6EL4GO3EuUdi04ldOafMNnsFkV9GjFmWTsn+gn0OJbVsv+iuwDac6CB80MMidePOSuJR+DigeyY14IYPwOgMlS/EsjiX09TtuGyX+dt2eKk0NlCzAeuxtmPfdUQYezyi+iYFBbsUOwxf9qWqj+ZXP1yQkzM3XeArLFC+5r4I6/9FXNXA2v65kzuAlvBh891c1UDXwdx+KWnJdEBtpYDqziC673ehFdroaqBo40SFhxGyHtsuD2PFqoGrgxw4JI7qMwE1B7IdqIBqBMx2S5mIxVgTxY9VA1cAMvsgopO0UWoWFQfxwNVA1AJ+3TBrRdgqtrokfqgYiAwdbJs3JVBD7VYNFDB9ml5PG1bg7iH8QVY4M/IQvcypK5D7xlmZPVDkyAO9kk5POg0HsghoDdayQZzd6IFH8sktiq/3sqmtQNwJH8Uli8hxsEx/qX2/T2SbjHYEbxJcGJ3BlGwMT+HmMBl6p6WNLG/ElT47JwJR47p/Eki4GrlJs8Po0cK3iLihq/3QX8SUPdDDwUYP+X61p+y0W5TAwD/t6MrC5pt0M1uUQX3Kz4jSU08AG8byfxcs5xZc8mtHAPervWY/q8Xakbr6mGHhsiPjT4oNMNhbh45YGFuL5IXXP494+xZdM4kiigSl8NqTeBTw0DvEl1yuOnqMMHFG8YYfde57D/eMUXzIpbTpF5U+ZH5epTEhf2GX5Tv3Zd+w8ori/byr+DR33OH2wHG8bLvw4Ns6VwKasxW7/Fv4LnpBpbzNIX381oNh+3KGYWgf9P67uL5OdfwCdL2jqexBRtgAAAABJRU5ErkJggg==;" vertex="1" parent="n.h-aud">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_m10" value="1. phone number" 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.1260;exitDx=0;exitDy=0;entryX=0.5;entryY=0.1260;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-usr" target="n.h-app">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m11" value="2. PKCE auth request" 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.1808;exitDx=0;exitDy=0;entryX=0.5;entryY=0.1808;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-app" target="n.h-kc">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m12" value="3. device, geo, velocity" 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.2356;exitDx=0;exitDy=0;entryX=0.5;entryY=0.2356;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-kc" target="n.h-risk">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m13" value="4. risk score" 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.2904;exitDx=0;exitDy=0;entryX=0.5;entryY=0.2904;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-risk" target="n.h-kc">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m14" value="5. OTP, step-up if risky" 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.3452;exitDx=0;exitDy=0;entryX=0.5;entryY=0.3452;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-kc" target="n.h-usr">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m15" value="6. access 15 min + refresh" 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.4000;exitDx=0;exitDy=0;entryX=0.5;entryY=0.4000;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-kc" target="n.h-app">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m16" value="7. GET /orders + 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.4548;exitDx=0;exitDy=0;entryX=0.5;entryY=0.4548;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-app" target="n.h-gw">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m17" value="8. verify JWT, no introspect" 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.5096;exitDx=0;exitDy=0;entryX=0.5;entryY=0.5425;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.h-gw" target="n.h-gw">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="620" y="450" />
              <mxPoint x="620" y="480" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m18" value="9. mTLS + identity header" 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.5808;exitDx=0;exitDy=0;entryX=0.5;entryY=0.5808;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-gw" target="n.h-svc">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m19" value="10. may this subject read?" 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.6356;exitDx=0;exitDy=0;entryX=0.5;entryY=0.6356;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-svc" target="n.h-opa">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m20" value="11. allow, field mask" 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.6904;exitDx=0;exitDy=0;entryX=0.5;entryY=0.6904;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-opa" target="n.h-svc">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m21" value="12. access record" 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=#d79b00;exitX=0.5;exitY=0.7452;exitDx=0;exitDy=0;entryX=0.5;entryY=0.7452;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-svc" target="n.h-aud">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m22" value="13. orders, masked PII" 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.8000;exitDx=0;exitDy=0;entryX=0.5;entryY=0.8000;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-svc" target="n.h-app">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m23" value="14. refresh, rotate 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.8548;exitDx=0;exitDy=0;entryX=0.5;entryY=0.8548;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-app" target="n.h-kc">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m24" value="15. reuse detected: revoke family" 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.9096;exitDx=0;exitDy=0;entryX=0.5;entryY=0.9096;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.h-kc" target="n.h-app">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="title" value="Identity — Who Proves What, To Whom, In What Order" 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="1570" 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="1570" height="10" as="geometry" />
        </mxCell>
        <mxCell id="note" value="Customers, sellers and staff use three separate realms. Staff and seller staff federate to Microsoft Entra ID with conditional access; only the customer realm is Keycloak-native, and no realm shares a token audience." 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="860" width="1570" 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="880" width="1570" height="10" as="geometry" />
        </mxCell>
        <mxCell id="foot" value="v 1.0   ·   owner Security Architecture   ·   date 2026-09" 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="890" width="1570" height="10" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
