{"templateId":"markdown","versions":[{"version":"v1.39","label":"v1.39 STS","link":"/products/custody/identity-and-access/sso","default":true,"active":true,"folderId":"c15a2701"},{"version":"v1.38","label":"v1.38 STS","link":"/products/custody/v1.38/identity-and-access/sso","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.34","label":"v1.34 LTS","link":"/products/custody/v1.34/identity-and-access/sso","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.26","label":"v1.26 LTS","link":"/products/custody/v1.26/identity-and-access/sso","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.19","label":"v1.19 LTS","link":"/products/custody/v1.19/identity-and-access/sso","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.15","label":"v1.15 LTS","link":"/products/custody/v1.15/identity-and-access/sso","default":false,"active":false,"folderId":"c15a2701"}],"sharedDataIds":{"sidebar":"sidebar-products/custody/@v1.15/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Federated identity and SSO","description":"User guides, API reference, and support resources.","siteUrl":"https://docs.ripple.com","lang":"en-US","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"federated-identity-and-sso","__idx":0},"children":["Federated identity and SSO"]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Executive summary"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Federated identity lets users authenticate to ","Ripple Custody"," through an external OpenID Connect identity provider, with Keycloak acting as the broker for the Custody realm."]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["OIDC federation changes how users authenticate; it does not replace Custody authorization or signature requirements."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The Keycloak provider alias must match the provider ID used in the user's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["loginIds"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Mapper configuration determines the user identifier that ","Ripple Custody"," receives in the Keycloak-issued token."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Session lifetime, session limiting, and logout behavior are controlled by Keycloak and your upstream identity provider configuration."]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"success","name":"Why this matters"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Federated login depends on correct identity-provider configuration, Keycloak mapper configuration, and Custody user provisioning. Treat SSO as an identity mapping project: choose stable identifiers, configure mappers deliberately, and test the full login path before enabling it for production users."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-federation-works","__idx":1},"children":["How federation works"]},{"$$mdtype":"Tag","name":"Diagram","attributes":{"data-language":"mermaid","diagramType":"mermaid","diagramSource":"sequenceDiagram\n    actor User\n    participant UI as Custody UI\n    participant KC as Keycloak Metaco realm\n    participant IDP as External OIDC provider\n    participant CUS as Custody APIs\n\n    User->>UI: Start sign in\n    UI->>KC: Redirect to Keycloak\n    KC->>IDP: OIDC authorization code flow\n    IDP-->>KC: ID token and claims\n    KC->>KC: Apply provider mappers\n    KC-->>UI: Keycloak-issued token\n    UI->>CUS: Call APIs with token\n    CUS->>CUS: Apply Custody authorization and signature checks\n","diagramHtml":"<svg id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1306.5px;\" viewBox=\"-50 -10 1306.5 663\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"944.5\" y=\"577\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"CUS\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1019.5\" y=\"609.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1019.5\" dy=\"0\">Custody APIs</tspan></text></g><g><rect x=\"703.5\" y=\"577\" fill=\"#eaeaea\" stroke=\"#666\" width=\"191\" height=\"65\" name=\"IDP\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"799\" y=\"609.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"799\" dy=\"0\">External OIDC provider</tspan></text></g><g><rect x=\"414\" y=\"577\" fill=\"#eaeaea\" stroke=\"#666\" width=\"192\" height=\"65\" name=\"KC\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"510\" y=\"609.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"510\" dy=\"0\">Keycloak Metaco realm</tspan></text></g><g><rect x=\"200\" y=\"577\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"UI\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"275\" y=\"609.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"275\" dy=\"0\">Custody UI</tspan></text></g><g></g><g><line id=\"actor4\" x1=\"1019.5\" y1=\"65\" x2=\"1019.5\" y2=\"577\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"CUS\" data-et=\"life-line\" data-id=\"CUS\"></line><g id=\"root-4\" data-et=\"participant\" data-type=\"participant\" data-id=\"CUS\"><rect x=\"944.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"CUS\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1019.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1019.5\" dy=\"0\">Custody APIs</tspan></text></g></g><g><line id=\"actor3\" x1=\"799\" y1=\"65\" x2=\"799\" y2=\"577\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"IDP\" data-et=\"life-line\" data-id=\"IDP\"></line><g id=\"root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"IDP\"><rect x=\"703.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"191\" height=\"65\" name=\"IDP\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"799\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"799\" dy=\"0\">External OIDC provider</tspan></text></g></g><g><line id=\"actor2\" x1=\"510\" y1=\"65\" x2=\"510\" y2=\"577\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"KC\" data-et=\"life-line\" data-id=\"KC\"></line><g id=\"root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"KC\"><rect x=\"414\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"192\" height=\"65\" name=\"KC\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"510\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"510\" dy=\"0\">Keycloak Metaco realm</tspan></text></g></g><g><line id=\"actor1\" x1=\"275\" y1=\"65\" x2=\"275\" y2=\"577\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"UI\" data-et=\"life-line\" data-id=\"UI\"></line><g id=\"root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"UI\"><rect x=\"200\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"UI\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"275\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"275\" dy=\"0\">Custody UI</tspan></text></g></g><g><line id=\"actor0\" x1=\"75\" y1=\"80\" x2=\"75\" y2=\"577\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"User\" data-et=\"life-line\" data-id=\"User\"></line></g><style>#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .error-icon{fill:#552222;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .error-text{fill:#552222;stroke:#552222;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .edge-thickness-normal{stroke-width:1px;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .edge-thickness-thick{stroke-width:3.5px;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .edge-pattern-solid{stroke-dasharray:0;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .marker{fill:#333333;stroke:#333333;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .marker.cross{stroke:#333333;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 svg{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 p{margin:0;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .actor{stroke:#9370DB;fill:#ECECFF;stroke-width:1;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 rect.note[data-look=\"neo\"]{stroke:#aaaa33;fill:#fff5ad;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 text.actor&gt;tspan{fill:black;stroke:none;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .actor-line{stroke:#9370DB;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [id$=\"-arrowhead\"] path{fill:#333;stroke:#333;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .sequenceNumber{fill:white;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [id$=\"-sequencenumber\"]{fill:#333;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [id$=\"-crosshead\"] path{fill:#333;stroke:#333;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .messageText{fill:#333;stroke:none;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .labelBox{stroke:#9370DB;fill:#ECECFF;filter:none;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .labelText,#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .labelText&gt;tspan{fill:black;stroke:none;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .loopText,#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .loopText&gt;tspan{fill:black;stroke:none;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .sectionTitle,#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .sectionTitle&gt;tspan{fill:black;stroke:none;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#9370DB;fill:#9370DB;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .note{stroke:#aaaa33;fill:#fff5ad;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .noteText,#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .noteText&gt;tspan{fill:black;stroke:none;font-weight:normal;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .activation0{fill:#f4f4f4;stroke:#666;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .activation1{fill:#f4f4f4;stroke:#666;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .activation2{fill:#f4f4f4;stroke:#666;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .actorPopupMenu{position:absolute;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .actor-man circle,#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 line{fill:#ECECFF;stroke-width:2px;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 g rect.rect{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));stroke:#9370DB;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 .node .neo-node{stroke:#9370DB;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [data-look=\"neo\"].node rect,#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [data-look=\"neo\"].cluster rect,#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}</style><g></g><defs><symbol id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g class=\"actor-man actor-top\" name=\"User\" data-et=\"participant\" data-type=\"actor\" data-id=\"User\" style=\"stroke: rgb(147, 112, 219);\"><line id=\"actor-man-torso0\" x1=\"75\" y1=\"25\" x2=\"75\" y2=\"45\"></line><line id=\"actor-man-arms0\" x1=\"57\" y1=\"33\" x2=\"93\" y2=\"33\"></line><line x1=\"57\" y1=\"60\" x2=\"75\" y2=\"45\"></line><line x1=\"75\" y1=\"45\" x2=\"91\" y2=\"60\"></line><circle cx=\"75\" cy=\"10\" r=\"15\" width=\"150\" height=\"65\"></circle><text x=\"75\" y=\"67.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-man\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">User</tspan></text></g><text x=\"174\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Start sign in</text><line x1=\"76\" y1=\"119\" x2=\"271\" y2=\"119\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"User\" data-to=\"UI\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-arrowhead)\" style=\"fill: none;\"></line><text x=\"391\" y=\"134\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Redirect to Keycloak</text><line x1=\"276\" y1=\"173\" x2=\"506\" y2=\"173\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"UI\" data-to=\"KC\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-arrowhead)\" style=\"fill: none;\"></line><text x=\"653\" y=\"188\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">OIDC authorization code flow</text><line x1=\"511\" y1=\"227\" x2=\"795\" y2=\"227\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"KC\" data-to=\"IDP\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-arrowhead)\" style=\"fill: none;\"></line><text x=\"656\" y=\"242\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">ID token and claims</text><line x1=\"798\" y1=\"281\" x2=\"514\" y2=\"281\" class=\"messageLine1\" data-et=\"message\" data-id=\"i3\" data-from=\"IDP\" data-to=\"KC\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"511\" y=\"296\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Apply provider mappers</text><path d=\"M 511,335 C 571,325 571,365 511,355\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"KC\" data-to=\"KC\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-arrowhead)\" style=\"fill: none;\"></path><text x=\"394\" y=\"380\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Keycloak-issued token</text><line x1=\"509\" y1=\"419\" x2=\"279\" y2=\"419\" class=\"messageLine1\" data-et=\"message\" data-id=\"i5\" data-from=\"KC\" data-to=\"UI\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"646\" y=\"434\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Call APIs with token</text><line x1=\"276\" y1=\"473\" x2=\"1015.5\" y2=\"473\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"UI\" data-to=\"CUS\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-arrowhead)\" style=\"fill: none;\"></line><text x=\"1021\" y=\"488\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Apply Custody authorization and signature checks</text><path d=\"M 1020.5,527 C 1080.5,517 1080.5,557 1020.5,547\" class=\"messageLine0\" data-et=\"message\" data-id=\"i7\" data-from=\"CUS\" data-to=\"CUS\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-982b6e7040590afdfeace7bc03b1f141c4fd0e42e9c3df301b44f50ff1e31595-arrowhead)\" style=\"fill: none;\"></path><g class=\"actor-man actor-bottom\" name=\"User\" style=\"stroke: rgb(147, 112, 219);\"><line id=\"actor-man-torso4\" x1=\"75\" y1=\"602\" x2=\"75\" y2=\"622\"></line><line id=\"actor-man-arms4\" x1=\"57\" y1=\"610\" x2=\"93\" y2=\"610\"></line><line x1=\"57\" y1=\"637\" x2=\"75\" y2=\"622\"></line><line x1=\"75\" y1=\"622\" x2=\"91\" y2=\"637\"></line><circle cx=\"75\" cy=\"587\" r=\"15\" width=\"150\" height=\"65\"></circle><text x=\"75\" y=\"644.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-man\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">User</tspan></text></g></svg>","diagramHtmlDark":"<svg id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1306.5px;\" viewBox=\"-50 -10 1306.5 663\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"944.5\" y=\"577\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"CUS\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1019.5\" y=\"609.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1019.5\" dy=\"0\">Custody APIs</tspan></text></g><g><rect x=\"703.5\" y=\"577\" fill=\"#eaeaea\" stroke=\"#666\" width=\"191\" height=\"65\" name=\"IDP\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"799\" y=\"609.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"799\" dy=\"0\">External OIDC provider</tspan></text></g><g><rect x=\"414\" y=\"577\" fill=\"#eaeaea\" stroke=\"#666\" width=\"192\" height=\"65\" name=\"KC\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"510\" y=\"609.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"510\" dy=\"0\">Keycloak Metaco realm</tspan></text></g><g><rect x=\"200\" y=\"577\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"UI\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"275\" y=\"609.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"275\" dy=\"0\">Custody UI</tspan></text></g><g></g><g><line id=\"actor4\" x1=\"1019.5\" y1=\"65\" x2=\"1019.5\" y2=\"577\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"CUS\" data-et=\"life-line\" data-id=\"CUS\"></line><g id=\"root-4\" data-et=\"participant\" data-type=\"participant\" data-id=\"CUS\"><rect x=\"944.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"CUS\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1019.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1019.5\" dy=\"0\">Custody APIs</tspan></text></g></g><g><line id=\"actor3\" x1=\"799\" y1=\"65\" x2=\"799\" y2=\"577\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"IDP\" data-et=\"life-line\" data-id=\"IDP\"></line><g id=\"root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"IDP\"><rect x=\"703.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"191\" height=\"65\" name=\"IDP\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"799\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"799\" dy=\"0\">External OIDC provider</tspan></text></g></g><g><line id=\"actor2\" x1=\"510\" y1=\"65\" x2=\"510\" y2=\"577\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"KC\" data-et=\"life-line\" data-id=\"KC\"></line><g id=\"root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"KC\"><rect x=\"414\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"192\" height=\"65\" name=\"KC\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"510\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"510\" dy=\"0\">Keycloak Metaco realm</tspan></text></g></g><g><line id=\"actor1\" x1=\"275\" y1=\"65\" x2=\"275\" y2=\"577\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"UI\" data-et=\"life-line\" data-id=\"UI\"></line><g id=\"root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"UI\"><rect x=\"200\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"UI\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"275\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"275\" dy=\"0\">Custody UI</tspan></text></g></g><g><line id=\"actor0\" x1=\"75\" y1=\"80\" x2=\"75\" y2=\"577\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"User\" data-et=\"life-line\" data-id=\"User\"></line></g><style>#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .error-icon{fill:#a44141;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .error-text{fill:#ddd;stroke:#ddd;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .edge-thickness-normal{stroke-width:1px;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .edge-thickness-thick{stroke-width:3.5px;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .edge-pattern-solid{stroke-dasharray:0;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .edge-pattern-dashed{stroke-dasharray:3;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .edge-pattern-dotted{stroke-dasharray:2;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .marker{fill:lightgrey;stroke:lightgrey;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .marker.cross{stroke:lightgrey;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d svg{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d p{margin:0;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .actor{stroke:#ccc;fill:#1f2020;stroke-width:1;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d rect.note[data-look=\"neo\"]{stroke:hsl(180, 0%, 18.3529411765%);fill:hsl(180, 1.5873015873%, 28.3529411765%);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d text.actor&gt;tspan{fill:lightgrey;stroke:none;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .actor-line{stroke:#ccc;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .innerArc{stroke-width:1.5;stroke-dasharray:none;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:lightgrey;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:lightgrey;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [id$=\"-arrowhead\"] path{fill:lightgrey;stroke:lightgrey;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .sequenceNumber{fill:black;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [id$=\"-sequencenumber\"]{fill:lightgrey;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [id$=\"-crosshead\"] path{fill:lightgrey;stroke:lightgrey;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .messageText{fill:lightgrey;stroke:none;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .labelBox{stroke:#ccc;fill:#1f2020;filter:none;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .labelText,#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .labelText&gt;tspan{fill:lightgrey;stroke:none;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .loopText,#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .loopText&gt;tspan{fill:lightgrey;stroke:none;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .sectionTitle,#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .sectionTitle&gt;tspan{fill:lightgrey;stroke:none;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#ccc;fill:#ccc;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .note{stroke:hsl(180, 0%, 18.3529411765%);fill:hsl(180, 1.5873015873%, 28.3529411765%);}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .noteText,#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .noteText&gt;tspan{fill:rgb(183.8476190475, 181.5523809523, 181.5523809523);stroke:none;font-weight:normal;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .activation0{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .activation1{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .activation2{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .actorPopupMenu{position:absolute;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .actorPopupMenuPanel{position:absolute;fill:#1f2020;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .actor-man circle,#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d line{fill:#1f2020;stroke-width:2px;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:#ccc;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d .node .neo-node{stroke:#ccc;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [data-look=\"neo\"].node rect,#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [data-look=\"neo\"].cluster rect,#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [data-look=\"neo\"].node polygon{stroke:url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [data-look=\"neo\"].node path{stroke:url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-gradient);stroke-width:1px;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [data-look=\"neo\"].node .neo-line path{stroke:#ccc;filter:none;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [data-look=\"neo\"].node circle{stroke:url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [data-look=\"neo\"].icon-shape .icon{fill:url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}</style><g></g><defs><symbol id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g class=\"actor-man actor-top\" name=\"User\" data-et=\"participant\" data-type=\"actor\" data-id=\"User\" style=\"stroke: rgb(204, 204, 204);\"><line id=\"actor-man-torso0\" x1=\"75\" y1=\"25\" x2=\"75\" y2=\"45\"></line><line id=\"actor-man-arms0\" x1=\"57\" y1=\"33\" x2=\"93\" y2=\"33\"></line><line x1=\"57\" y1=\"60\" x2=\"75\" y2=\"45\"></line><line x1=\"75\" y1=\"45\" x2=\"91\" y2=\"60\"></line><circle cx=\"75\" cy=\"10\" r=\"15\" width=\"150\" height=\"65\"></circle><text x=\"75\" y=\"67.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-man\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">User</tspan></text></g><text x=\"174\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Start sign in</text><line x1=\"76\" y1=\"119\" x2=\"271\" y2=\"119\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"User\" data-to=\"UI\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-arrowhead)\" style=\"fill: none;\"></line><text x=\"391\" y=\"134\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Redirect to Keycloak</text><line x1=\"276\" y1=\"173\" x2=\"506\" y2=\"173\" class=\"messageLine0\" data-et=\"message\" data-id=\"i1\" data-from=\"UI\" data-to=\"KC\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-arrowhead)\" style=\"fill: none;\"></line><text x=\"653\" y=\"188\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">OIDC authorization code flow</text><line x1=\"511\" y1=\"227\" x2=\"795\" y2=\"227\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"KC\" data-to=\"IDP\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-arrowhead)\" style=\"fill: none;\"></line><text x=\"656\" y=\"242\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">ID token and claims</text><line x1=\"798\" y1=\"281\" x2=\"514\" y2=\"281\" class=\"messageLine1\" data-et=\"message\" data-id=\"i3\" data-from=\"IDP\" data-to=\"KC\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"511\" y=\"296\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Apply provider mappers</text><path d=\"M 511,335 C 571,325 571,365 511,355\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"KC\" data-to=\"KC\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-arrowhead)\" style=\"fill: none;\"></path><text x=\"394\" y=\"380\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Keycloak-issued token</text><line x1=\"509\" y1=\"419\" x2=\"279\" y2=\"419\" class=\"messageLine1\" data-et=\"message\" data-id=\"i5\" data-from=\"KC\" data-to=\"UI\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"646\" y=\"434\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Call APIs with token</text><line x1=\"276\" y1=\"473\" x2=\"1015.5\" y2=\"473\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"UI\" data-to=\"CUS\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-arrowhead)\" style=\"fill: none;\"></line><text x=\"1021\" y=\"488\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Apply Custody authorization and signature checks</text><path d=\"M 1020.5,527 C 1080.5,517 1080.5,557 1020.5,547\" class=\"messageLine0\" data-et=\"message\" data-id=\"i7\" data-from=\"CUS\" data-to=\"CUS\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-5485b6107100e03fa96994eb6de91a7cdd50529a0c23f46624452ab81bc7f11d-arrowhead)\" style=\"fill: none;\"></path><g class=\"actor-man actor-bottom\" name=\"User\" style=\"stroke: rgb(204, 204, 204);\"><line id=\"actor-man-torso4\" x1=\"75\" y1=\"602\" x2=\"75\" y2=\"622\"></line><line id=\"actor-man-arms4\" x1=\"57\" y1=\"610\" x2=\"93\" y2=\"610\"></line><line x1=\"57\" y1=\"637\" x2=\"75\" y2=\"622\"></line><line x1=\"75\" y1=\"622\" x2=\"91\" y2=\"637\"></line><circle cx=\"75\" cy=\"587\" r=\"15\" width=\"150\" height=\"65\"></circle><text x=\"75\" y=\"644.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-man\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">User</tspan></text></g></svg>"},"children":["sequenceDiagram\n    actor User\n    participant UI as Custody UI\n    participant KC as Keycloak Metaco realm\n    participant IDP as External OIDC provider\n    participant CUS as Custody APIs\n\n    User->>UI: Start sign in\n    UI->>KC: Redirect to Keycloak\n    KC->>IDP: OIDC authorization code flow\n    IDP-->>KC: ID token and claims\n    KC->>KC: Apply provider mappers\n    KC-->>UI: Keycloak-issued token\n    UI->>CUS: Call APIs with token\n    CUS->>CUS: Apply Custody authorization and signature checks\n"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Keycloak is the broker between ","Ripple Custody"," and the external identity provider. The upstream provider authenticates the user and emits claims. Keycloak maps those claims to a local Keycloak user and issues the token used by ","Ripple Custody","."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"login-and-logout-checkpoints","__idx":2},"children":["Login and logout checkpoints"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The exact screens depend on your identity provider, but the control points are consistent."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Flow"},"children":["Flow"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Checkpoint"},"children":["Checkpoint"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What to verify"},"children":["What to verify"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Login"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Browser redirects to Keycloak."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The Keycloak issuer, callback URL, TLS certificate, and realm endpoint are reachable."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Login"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Keycloak redirects to the upstream OIDC provider."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The provider discovery document, client ID, redirect URI, scopes, and required claims are correct."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Login"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Keycloak exchanges the authorization code server-side."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Keycloak can reach the provider token endpoint, validate TLS, and authenticate with the configured client secret."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Login"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Ripple Custody"," receives a Keycloak-issued token."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The token subject, issuer, audience, and mapped login ID match the Custody user."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Logout"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The local application session is cleared."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The user can no longer call protected UI routes with the old browser session."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Logout"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Keycloak token/session state is revoked or expired."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Token revocation and session lifetime settings match your security requirements."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Upstream identity-provider logout support varies. At minimum, plan for local Keycloak session termination. If you require upstream SSO logout as well, verify that your identity provider supports the logout behavior you expect."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"authentication-versus-authorization","__idx":3},"children":["Authentication versus authorization"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Area"},"children":["Area"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What SSO controls"},"children":["What SSO controls"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What stays in Ripple Custody"},"children":["What stays in ","Ripple Custody"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Authentication"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["How a user signs in through an external identity provider."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["API authentication and signing still follow the documented Custody flows."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["User identity"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Which external identifier maps to a Custody user login ID."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["User records, roles, domains, and public keys."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Authorization"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Nothing by itself."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Custody authorization and signature requirements remain separate from federation."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Session behavior"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Keycloak and upstream IdP session lifetimes, session limits, and logout behavior."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Custody intent lifecycle and approval state."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"sso-topics","__idx":4},"children":["SSO topics"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Task"},"children":["Task"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Start here"},"children":["Start here"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Plan an SSO rollout"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/identity-and-access/sso/identity-federation-guide"},"children":["Plan identity federation"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Configure an OIDC provider in Keycloak"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/identity-and-access/sso/keycloak-integration"},"children":["Configure OIDC federation in Keycloak"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Limit concurrent Keycloak sessions"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/identity-and-access/sso/keycloak-session-limiting"},"children":["Keycloak session limiting"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Configure frontend inactivity logout"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/identity-and-access/sso/keycloak-inactivity-timeout"},"children":["Keycloak inactivity timeout"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Investigate SSO login failures"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/identity-and-access/sso/troubleshooting"},"children":["Troubleshoot SSO"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Review deployment configuration areas"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/deployment/reference/keycloak"},"children":["Keycloak configuration"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"supported-federation-path","__idx":5},"children":["Supported federation path"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use OpenID Connect for federated identity. The public SSO documentation covers OIDC federation through Keycloak. SAML federation is not covered in this section."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"troubleshooting-data","__idx":6},"children":["Troubleshooting data"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When troubleshooting SSO with Ripple or an identity-provider vendor, share only the information needed to prove the failure point:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Discovery document reachability."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Non-secret client settings, such as redirect URI, scopes, issuer, and provider alias."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Decoded token headers and claims with secrets, signatures, and personal data removed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Keycloak and application log snippets with tokens and secrets redacted."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Do not share client secrets, private keys, full JWTs, or unredacted identity data in tickets or chat."]}]},"headings":[{"value":"Federated identity and SSO","id":"federated-identity-and-sso","depth":1},{"value":"How federation works","id":"how-federation-works","depth":2},{"value":"Login and logout checkpoints","id":"login-and-logout-checkpoints","depth":2},{"value":"Authentication versus authorization","id":"authentication-versus-authorization","depth":2},{"value":"SSO topics","id":"sso-topics","depth":2},{"value":"Supported federation path","id":"supported-federation-path","depth":2},{"value":"Troubleshooting data","id":"troubleshooting-data","depth":2}],"frontmatter":{"seo":{"title":"Federated identity and SSO"}},"lastModified":"2026-08-04T20:25:11.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/custody/identity-and-access/sso","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}