1"use strict";(self.webpackChunkAuthressKnowledgeBase=self.webpackChunkAuthressKnowledgeBase||[]).push([[2972],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var o=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,i=function(e,t){if(null==e)return{};var n,o,i={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var c=o.createContext({}),u=function(e){var t=o.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},d=function(e){var t=u(e.components);return o.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},l=o.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),l=u(n),h=i,g=l["".concat(c,".").concat(h)]||l[h]||p[h]||r;return n?o.createElement(g,a(a({ref:t},d),{},{components:n})):o.createElement(g,a({ref:t},d))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,a=new Array(r);a[0]=l;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:i,a[1]=s;for(var u=2;u<r;u++)a[u]=n[u];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}l.displayName="MDXCreateElement"},9318:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>u});var o=n(87462),i=(n(67294),n(3905));const r={sidebar_label:"Configuring OAuth/SAML connections",title:"OAuth setup guide - Part 2",description:"Setting up OAuth connections to non-standard providers using the advanced connection configuration",image:"./assets/oauth-logo.png",image_alt:"Integrating applications with Oauth 2.0 identity providers",category:"Technical help"},a=void 0,s={unversionedId:"authentication/connecting-providers-idp/oauth-setup-guide-part-2",id:"authentication/connecting-providers-idp/oauth-setup-guide-part-2",title:"OAuth setup guide - Part 2",description:"Setting up OAuth connections to non-standard providers using the advanced connection configuration",source:"@site/docs/03-authentication/10-connecting-providers-idp/100-oauth-setup-guide-part-2.md",sourceDirName:"03-authentication/10-connecting-providers-idp",slug:"/authentication/connecting-providers-idp/oauth-setup-guide-part-2",permalink:"/knowledge-base/docs/authentication/connecting-providers-idp/oauth-setup-guide-part-2",draft:!1,editUrl:"https://gitlab.com/rhosys/authress-public-kb/knowledge-base/-/blob/main/docs/03-authentication/10-connecting-providers-idp/100-oauth-setup-guide-part-2.md",tags:[],version:"current",lastUpdatedAt:1772377859,formattedLastUpdatedAt:"Mar 1, 2026",sidebarPosition:100,frontMatter:{sidebar_label:"Configuring OAuth/SAML connections",title:"OAuth setup guide - Part 2",description:"Setting up OAuth connections to non-standard providers using the advanced connection configuration",image:"./assets/oauth-logo.png",image_alt:"Integrating applications with Oauth 2.0 identity providers",category:"Technical help"},sidebar:"tutorialSidebar",previous:{title:"Facebook + Meta Login",permalink:"/knowledge-base/docs/authentication/connecting-providers-idp/setup-facebook-login/"},next:{title:"Custom connections",permalink:"/knowledge-base/docs/authentication/connecting-providers-idp/oauth-setup-guide-part-3"}},c={image:n(86979).Z},u=[{value:"Validating a provider and testing a connection",id:"validating-a-provider-and-testing-a-connection",level:2},{value:"Common errors",id:"common-errors",level:2},{value:"Invalid scopes listed",id:"invalid-scopes-listed",level:3},{value:"Connection provider is not OpenID compliant",id:"connection-provider-is-not-openid-compliant",level:3},{value:"User ID expression and data mismatch",id:"user-id-expression-and-data-mismatch",level:3},{value:"Login success",id:"login-success",level:2},{value:"Preferred connection configuration",id:"preferred-connection-configuration",level:4},{value:"Non-OAuth identity providers",id:"non-oauth-identity-providers",level:2}],d={toc:u};
1function p(e){let{components:t,...r}=e;return(0,i.kt)("wrapper",(0,o.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"For most OAuth provider connections, the provider follows the current RFC standards, such as ",(0,i.kt)("a",{parentName:"p",href:"https://www.rfc-editor.org/rfc/rfc9068.html"},"RFC 9068"),". For these, Authress automatically discovers the configuration and verifies incoming users without any additional setup. However, some OAuth providers do not use JWTs or don't follow RFC standards for access tokens exchange. Because of the lack of standard compliance, custom configuration is necessary."),(0,i.kt)("h2",{id:"validating-a-provider-and-testing-a-connection"},"Validating a provider and testing a connection"),(0,i.kt)("p",null,"To determine if a provider is following the standard, or for the validation of any configuration, Authress suggests using the ",(0,i.kt)("strong",{parentName:"p"},"Test Connection")," button in the ",(0,i.kt)("a",{parentName:"p",href:"https://authress.io/app/#/setup?focus=connections"},"connection configuration"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"OAuth test connection button",src:n(9526).Z,width:"486",height:"125"})),(0,i.kt)("p",null,"This opens a new tab to start the login flow. Because there aren't any existing standards on how to represent errors, it's possible to get back any number of problems shown via url query parameters, blank pages, or text on a white pages. If the connection configuration is partially correct, a user will get navigated to a dedicated Authress detailed information page to explain the current error."),(0,i.kt)("h2",{id:"common-errors"},"Common errors"),(0,i.kt)("h3",{id:"invalid-scopes-listed"},"Invalid scopes listed"),(0,i.kt)("p",null,"Occasionally, some OAuth providers have custom requirements on the scopes allowed to be requested and used. By the RFC spec, when incorrect scopes are specified they should be ignored. However, a provider may choose to return an error instead. This coupled with the fact they might not allow the standard default scopes of ",(0,i.kt)("inlineCode",{parentName:"p"},"openid profile email"),", causes errors. In these cases, scopes can be specified either in the ",(0,i.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@authress/login"},"Authress Login SDK")," using the ",(0,i.kt)("inlineCode",{parentName:"p"},"connectionProperties")," configuration or by setting them for all login calls in the ",(0,i.kt)("strong",{parentName:"p"},"Default Scopes")," section of the connection configuration:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Non standard OAuth scopes",src:n(37289).Z,width:"480",height:"139"})),(0,i.kt)("p",null,"Specify replacement scopes for the connection, or in the case that no scopes are allowed or required, remove the default values and leave empty."),(0,i.kt)("h3",{id:"connection-provider-is-not-openid-compliant"},"Connection provider is not OpenID compliant"),(0,i.kt)("p",null,"If the tokens that are received by Authress from the configured provider do not contain the required information this error will be displayed."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="connectionProviderIsNotOpenIdCompliantError.json"',title:'"connectionProviderIsNotOpenIdCompliantError.json"'},'{\n "errorCode": "ConnectionProviderIsNotOpenIdCompliant",\n "title": "The connection configuration is incomplete.",\n "connectionId": "o5X9NJcGh6rHKqfZ7YpEHp",\n "oidcUserEndpointUrl": null,\n "expressionSourceData": {\n "application_id": "b8a49f3399815cedd110f0fcedd7f0b9745fde77a9b97ab262c60cfbba18fdcc",\n "uid": "arqzx123"\n }\n}\n\n')),(0,i.kt)("p",null,"The problem is that by default, Authress will look for the ",(0,i.kt)("inlineCode",{parentName:"p"},"sub")," property of the JWT ",(0,i.kt)("inlineCode",{parentName:"p"},"id_token"),". If the ",(0,i.kt)("inlineCode",{parentName:"p"},"sub")," claim does not exist or the token is not a JWT, then the connection needs to be configured to specify how to calculate the ",(0,i.kt)("inlineCode",{parentName:"p"},"sub"),"."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"sub")," claim represents a globally unique userId in the provider's platform. Without this information, there is no way to tell two users apart or correlate the identity of the user logged in with their data. The solution is to pick an existing claim shown in the ",(0,i.kt)("inlineCode",{parentName:"p"},"expressionSourceData")," property from the error. This always works, however in rare circumstances based on the provider, this can be brittle. So, before selecting arbitrary values from this token, confer with the connection provider's documentation on how to globally identify users."),(0,i.kt)("p",null,"In the case of the example there is a property ",(0,i.kt)("inlineCode",{parentName:"p"},"uid"),", so if the provider acknowledges that is the right property, set the ",(0,i.kt)("strong",{parentName:"p"},"User ID Expression")," in the connection configuration:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Non standard OAuth token claims",src:n(77161).Z,width:"498",height:"321"})),(0,i.kt)("p",null,"Some providers insist that their tokens should not be inspected, and therefore instead it makes sense to find and add the url endpoint where the unique userId can be found. Authress will automatically look up data from this endpoint to allow userId resolution. For instance, if the user data can be found at:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"https://api.custom-provider.com/oauth/user-data/endpoint")),(0,i.kt)("p",null,"Then, specify it in the ",(0,i.kt)("strong",{parentName:"p"},"OIDC User Data Url"),":"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Non standard OAuth token data url",src:n(95509).Z,width:"480",height:"325"})),(0,i.kt)("h3",{id:"user-id-expression-and-data-mismatch"},"User ID expression and data mismatch"),(0,i.kt)("p",null,"Check the expression used and the error message for more information, most cases this indicates that the expression selected, in this case ",(0,i.kt)("inlineCode",{parentName:"p"},"{invalid-property}")," isn't present in the ",(0,i.kt)("inlineCode",{parentName:"p"},"expressionSourceData"),", it should be ",(0,i.kt)("inlineCode",{parentName:"p"},"data.userId"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="userIdExpressionAndDataMismatchError.json"',title:'"userIdExpressionAndDataMismatchError.json"'},'{\n "errorCode": "UserIdExpressionAndDataMismatch",\n "title": "The connection configuration is incomplete.",\n "connectionId": "o5X9NJcGh6rHKqfZ7YpEHp",\n "oidcUserEndpointUrl": "https://api.custom-provider.com/oauth/user-data/endpoint",\n "userIdExpression": "{invalid-property}",\n "expressionSourceData": {\n "data": {\n "userId": "user_111",\n "email": "[email protected]"\n }\n }\n}\n')),(0,i.kt)("h2",{id:"login-success"},"Login success"),(0,i.kt)("p",null,"And when it all works the result should be a ",(0,i.kt)("strong",{parentName:"p"},"Login successful")," information page:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Successful OAuth login",src:n(50894).Z,width:"1051",height:"845"})),(0,i.kt)("h4",{id:"preferred-connection-configuration"},"Preferred connection configuration"),(0,i.kt)("p",null,"In a lot of scenarios, especially with non-standard OAuth providers, Authress already contains pre-configured connections. These have all the right properties set and can be used out of the box. To copy the working pre-configured connections, the connection configuration for these pre-configured connections contain a ",(0,i.kt)("strong",{parentName:"p"},"Clone")," button. This will create a new connection with all the correct properties populated and can save a lot of time perusing documentation. In the case that a pre-configuration connection does not exist for your provider, and it is an OAuth provider, reach out ",(0,i.kt)("a",{parentName:"p",href:"mailto:[email protected]"},"[email protected]"),", and we'll add it."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cloning an OAuth configuration",src:n(77475).Z,width:"479",height:"195"})),(0,i.kt)("h2",{id:"non-oauth-identity-providers"},"Non-OAuth identity providers"),(0,i.kt)("p",null,"In the case you are running an internal identity provider that isn't OAuth compliant or doesn't use asymmetric public key signatures, follow the advanced ",(0,i.kt)("a",{parentName:"p",href:"./oauth-setup-guide-part-3"}
1,"Non-OAuth setup guide - part 3"),"."))}p.isMDXComponent=!0},86979:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/oauth-logo-49229b9116a2a590aaf2ae46564f8de8.png"},77475:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/clone-button-eae3d69b60e4942524010243cb916e06.png"},50894:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/login-success-f714c2e601e6106a39021f53ab3e0220.png"},95509:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/oidc-url-expression-a44860f3ce4627d3294875e16f2d797d.png"},37289:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAACLCAIAAAA28t3vAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4nO3de1wTZ74w8N8ed6bdJG0uNSBXpUSWgIKoQSpQxU8lW4VVtEVbLJWWxRZpq8d3vexRuyvuqfquYCveKBUXobJUpa3RFtolWEG5iAgaUEjkZriFkqTN5JSZvifvHxCuQYiXGuvv+/EPM/PMPJeZ+eXJM8M8vzGZTIAQQsj2/MfDLgBCCCHLMEAjhJCNwgCNEEI2CgM0QgjZKAzQCCFkozBAI4SQjcIAjRBCNgoDNEII2SgM0AghZKMwQCOEkI3CAI0QQjYKAzRCCNkoDNAIIWSjMEAjhJCNwgCNEEI2CgM0QgjZKAzQCCFkozBAI4SQjcIAjRBCNuq3VqZvTXt3c3brwGeCNdHVzV2yMGxl0GTOOLan1RcOpubK67ooYs7f0tYGklbmDwBl+17ccwUk7321aRYAAOiq8ouanYLCvXkjklJKeU5a7pWqVj2wuJPcpoctjVjuJ7Q+S4QQegisDdB9+FNn+toRQDMGXXOtojRbUZpXGPXBRqlojICrTNv5sUzDFc9fPN97lvguovNI2isZqTndS6ePDNDK3H+8k6ViCK6793QO1VajKDqkBteDcZL7ki9CCD1gdxegCfHi+K1BfXGOVpfs2Xmw8GrW+6kORxJ87tSP1jarNACOQe8lrBDdVcYWNCqVAAILK2plZ1UMOKz878RYNxIADOrqKsodozNC6FFxlz3owUingI3rlbV/ye8olsmjfML5AHSrPCsru/hGsw5IoatkcdS6MBGn7MCLe0oZAGg9+9ZLZ4E154OMtb6d1aeyZPkKVbsOSEfP8Jg/xfrxAKA85a0thczsdYd2BZEA0C7726pjKvvF27NiBgd2ujxl8/bCLgaA+nzbC58DIYn/YlOAOQIzBhoAgGb6PnOcfAL7N+2sSEvPlSvaOhjgCz1DIqNigxxJAENdwcGsvPK6Ni2w7KdMD4uMfMVPaC5AV+jaP7lczZGVtXUAVxwY8ee4YFcSAKBbkZeWmVfc2EUB18V7TmxMZKATCUA3F2V9mHOlplUPPAcvifTtVQtE7Htvb4TQ4+L+3CQkPQIChQCMqlhBA2jO/H3H38+qYEZE/Nqo8Cn64mMfbJG1woyoveuCXACA5blyXfx/JUjdQSdPPZihMLrMCAlfOH2S7lr2ng9Pqa3IVrw4KlYyEQD4MyL/a138xgjPQf1j9xA/LkDb6fc3rNmdfqpI2U6b12grdv7lw+zyLo5fyJuRoRJ+m/yba+0AtCLznfeP5TcQ4tDINxfPFGhKP/n7ju1FOvNm+vwDBy8SAStjIkKdjLWFH2/JUtIABkX6hp1Zcp2DNOpPf46ayanLf//9Y+UUQF3Oln3yGnBfHrc6dr4rNCpbaEAIofG7Dz1oAADg2vMANAxlNNKK3AyFkT0jfm9CAAcAQlzpt3ecPltQE7bKy1vEgSJgO8wNCvACAADp1sNS8y6a7ba+kaUqVOiWO4283WcZx22WxCP3UDlwpkwPCZo8dCU7cO2WP7OOZRTeUJXLD5XLD7Ec5se8tzHEsf1sTqEO7Oe/tz9BTAJAxAoAANCcyZS3MKy567fs8GcDwHJ/IuYv8os5ecqgFb3jNvz57+1NEJMA4d6gei9HVVxQG8NVZha1MA4rN/451g0AggPZbS8fKD1VFiWG5g4AvlvwstBZAliw/N7aFyH0GLpfAVrfoQMAgs1itdc1awHg6sGlLx0cWE/otRa3o5rkuTLZVVWzWq9lGACgKSPAeAP0GEhH6Zq/SGN0zYpr+YWyM8VthakH3T22CBq7AAh3f/ehw9HNVY0MgLtkat8wBDnFR0zIO1pVtVqQ9C5hs/o2cXJ1YYFK19Wsba5tZADasv8cnT1oX1qdnhMYPJt143Lxh1EKV98ZAeERoYFOOP6NELLC/QnQdF1JuQaAcA30IEkdAQD28+M/iHAdSEFwXUduRtXu2/IPmYY7d3HEuhgHsuzYlrPN96U8Q5A8V7/gWL/p9rp3P1S01TYwgcAAEPe0T5oxD20TJAHAeL75f1cPemSQ4AiFQDru+tAh72yBvOxKVWHO5eILK/+2O9bjnrJFCD1W7sMYNK0u2ZMibwGwD4wIsYNJHu72AB11TbTQ0dXJ0dXJ0VXIFfAs3B2jFXl5rQw/8E87VgUHeovsB/Wb2QQBwDBGY19Khhm5+RAW1mvkmZlnFOYRZLpL1QkA3ElOPPcpDgBMbdkNg3kdTQOAu68HAdBcXk/1LW2srmUAHN3F/OHZ0PXVKgZA6Crmu/ZuVatm9VXWyVHAYwl6gzVfJF0Vt+ujj/YvdgCmrapOM0YtEEJokLvrQTO1Zw/uLO99Drqttr6NAuDPiPpbnA8HADzCYiWlfy8/u+EvbdIZIpKqLS6+1u0dn7UpYNgTeCSPKwDobiyR1xGcxoK03IHus8jfk/9NaVXOxwdhFr+hQlY4as9aIOQSAC1lWXsoFjkjal1Q39+h0ApZ2ufyjs/lGY6urnaEoVGl0gF7RsQyN5jEi5hbePBi4cENTND8KURLWZFcN3PXhzHSyJDTO/MvpnywPSRATLReLCzqAO7cSKkIoB0AADryD26g58xm6y8WFnUAa3akVAQ818jQ04qzFw/s2HB1zmweo1KUFjeylv/37pWa1Hcyu8QhwRKhsVzRBeAg9sa/kUEIWWHCX//6V2vS/3jlq2+v/wg/dbc1tqgbW9s0P00QesxYFPXW1lWzJk3oTfOkW5DEne5SqW6UX7la2/6/k/zC1kQHidgT4KeGr85c7WK7vRjmJwSAZ9xc6Yaq6qqv/l1aZ3RYEhnwU4WC9n4hXPzUBAfv3xPNtYobpRU3Wkm3lcvdW8sb/5/HvOV+AlCXZBW3gVPAqiBHACAnOXObb1xvVKu6/5fj5BEgFvZ2XifY+YV4c/9H19WhVqtatPRTrpLQ6B1xAZMmAPzOOXCW6/+0q2qvVl1UqA0875ejI19wfnKCnc8LPtzulrqqstKL9V0TnKavfPudd+c8AwCGuvOnr2r54umO7Ve+Kmk0POUWsuqdDS84kgATnpkWMotraGm4fvXKxZpm/ZPuISuiomcLSGA66hXFhUX5FxXdLM9Fb8fHT8OH7BBCVviNyWR62GV4BJgfxE7Mipk8dmqEELof8GVJCCFkozBAI4SQjcIhDoQQslHYg0YIIRuFARohhGwUBmiEELJRGKARQshGYYBGCCEbhQEaIYRsFAZohBCyURigEULIRmGARgghG4UBGqFfnLq2xvIMQwgNYe3rRkGZvnVLvlKlqC6puFpSUf7dhYqqnyaK3Xh3ns3JUJe378SFKnUP391ZMGH8udXuS77m8Zzb7wCgU1lDC4S/s5CIVlekZ+ScK64uqaiQF5eUqCa4eDpyh+ZCV6ZG722ThHpwx860tabuP4TP9FWoPOXAdW9/kQ1PVtVdp9Q/I+CMnfA+opvlGUfyFbU/sjzcBDbcNg/VqGes5kzGNcFzHsIJg07vB6cydecNz+fdhh+l7vwDR37yD7Czal+tp5K/gOd8RnmvOaWsa+M8w7Pi+kZjsf6F/QRXEhkX69b/mW6WH9t5JGDrGp/RY4ROfrY1ZG2M5B4uZbqx
15CJP5MUfsbxBtjMHlset8zWv6lbI9u2RrdwY5jWQHVVcDMtmNMnqIH7MSae0NwrrPL08Hpl3N7cUl9Aeokm/ZJbUleyr4vj1w2dgQIONesYq8lTeYeG/wq+1rvLi5kkek3+FNXt47n2Ig3QNWR1NytIq6dHT6DvA0f7ejptBZ7SUQdOprFZpQpjvoMtA4B22MbQ142zTwKLOomJ2cPhiH4O84g6l7KMzGsZMY0NoA2WxZR4kSk/zJmJ0vrNRzli6qoyR+N+naZFti7GDethF+NW5L5PGkl6hPp/k3qD9fEiA7sqCPIWRAgqA4XuHLfczFucW1Da0GXIZe2KiJDRApKs4cbZaCwRN6ckZkfFBQqAu7Eznbk3w6dufInNng3Rr2MAPqfbKvNNlzaoG2ak6QuAdEtL/e63uwmWnBa+M6Oxy/Be4vl+ijJgsAgAAZb7Sfb6U5NMhcEyunSXtjeaVqTt1UVtD+jZuzj2QP2NtNFlxJr9apdGdACHpNHO5nxAADI0lJyqbtIzRoANJZEyI06CcOkvScmtpNotkGL5/xHJvNgBVJcvJUxMCNkEzbN/FYYF2QKtLMmS1NMkCMNK8WdERPgIAuigzjZzlrla1UDqDRk9KIuODhABAqyvOyJVaAAAG7AJWhoo4AN2VsowyHWfQPgEAQFclL8prbCZz89oJljgk2IsN7ZWy7DIdyQagGNJbGh3kOOiHxCjtTDflZRWogEUSDG0XEBsqsnQczTGls/rU2WpVXdOJ3BvA8wwPEZGWagedBfvKHAKZEnmj0cALWBczS2AuxYgKutYe+bg7cq3U/C1L1/1rX+OCjaFCC2UYutvVU0tOwuqNQeYzgKrYl87EJpi79hbKQNXkyy9Svbtki/tacuCQAdsR1ErfhBgJtJ5KLhCvX+XVt+uKncnMxvUBo7QMVSPLydewOATQMDlsVQA52hkLbVW0aNnIn2dUkzy/REUBANDgGBoZLCIBOoddKdzy8TfUIDTVLJepVDqdQaOHGWHxIUM7uXSrPCevliGA1nezg+NX+QgAytMzDYGi9rImijF2jzztAUBbnZbTNneV1IvdX/4LtY3GbJmRT7qGhIoFQFXJcuQagkOAgQJxaKR08DDLyENjqQXoosw0ELtolB06fTcREBvK5J2t1QLTrROGx4X5svuO3dBc4O5ayUaZrFR/fM/Ht0Yuvpy4/es2k8l0+98fX9CaF/ZcPX68oNtkMjV+nHSmybz0+1v1TT29/+38ctfRsh6TyfBd4v6qgZ1dP554ptNkMplMNclJ//7eZDKZTG1nUg7cHJ7rjxeSNxUYLBXT8HVickFvLj01B5L+3da7+Gb/nk2mK0cSB23bdDqlr143sxPPqPuXl+3/r8QL6r7ydn+XmHTpx4Fceor2Hykamv/3BSm7B1rAXIBd2Yoec5mvHO3df8+F5ISjVd/3LdYWJCV/2WEy9dSfPF3Vn8WPpUcPXOkxmeoPmNvBQk2TjhT1f7p1Ztvh/s17FMeTP77ZMyit5Xb+vuDIgeuDkplGO45mHV8nHq2/c+1MHV9v23y04PaI8lqs4M3sbaf729xQdPhIgWGUMgzbbU/NgV0Dp1ZbXsqBwfUdUYa2guwvBz6qTx7+us1k+r4gJbE/o576A9uPlPWuTTquGNj0cmLSpZ7RWub2mcTTjcMqavGMNfVcTj5aY/7Qf3obik5/3d+Gpu7vkk83mixeKeNvqH5XUuKSLreZNyk7vOfTWyaTyfR9Xkry9d5Wqld09K2uP57cexWU7f+rpdPe3CaGmpPHv6sfesqYTFW7k77rP7JteYMvBPXJpKNlg6+U4YfGcgv0XEhOOF7fu8/vC44kHP6utyI9N49vO904ai530Uq26r70oAco5RXtPDiT3/eRBuAYAYYOwwncRObOlNDVzthMAdzt6Md4tjNcLTFIIvuGaD0WuJ8tUMIKkRWZOEj8zJ1Qvrs7XGiHAPPmJJ+nl5U1+YZMNv/e18jLWNJNQ7+ZFSXtfhH9A+IcvwWT8q8owxxdgXCZ4WNuCl5gILFHQYXzLpSrJ5P5BX2LaYK0MwKw7Olaed3McI8xbsYqi5Xi0DBzYUivUJ/sXBV4iO9cQw6PaC661jxllqu5Zzee43jn2okAwGlWoNPI9JYq6LHA92xeFb3KlwTQlhaTwevYoMy1VAZi6G5J8TLvvGwFvc6bBFDK6sTLQoe20JAyaIrL2rRMwRlF32ctCd2gU5WxwvsPGTnRnUfcoa0stwxrIllXUt7pILEb65RkjEBMHL6QuiZXaHzZBaq+z0YSjLTFK2X8DTVwsAiXGZ7mWxRsSdDEMwoNuA26z2cnMv9KAJEHka2hwY0EmDjqaU8p8+R6SWSw653qqimuHHwhOEolxn2VtCRo0DaDD80oLQBAuHiLe
1s9ngROLr3PvrQg5RUSe7aKBNUoud9FKNuo+BWh1m1boKgBo0RG+ixeEj1FtSll2parTCAAtjUb3e8iWtJvIFLcBjIy3bSrGIZQEAF2xvNnAyz1Y37fCoFN19F3P94HXqnhOWVFGSp6BLZIuXeDL13eAUDI0jUGnJ3mDQzbXHjRaANdhdWGz6E6jAfQc/6Bw/2HF4y1fH1lemHcwvwucgldG+Ix2S1CrA8Hg+/I8LqnT02N9k5F+MVt5JWcyUzMYlmRxhNSNrR3XcbxT7XprNDJfg85iBUEqMR68Svn6s5sLa13mLyABLJehc/huJ4UE06ml3d7BZNkFg3/ksJYZmljfAaKw0AVDW15ZCELfsSvaZ5SWCVgXx5WfzdqjYQSSsCHDSsMQBDDM8IWUnnaaFR468nt05JUiHG9DjYbFAp1x2LLuuoriui4aABq76Bl33Fynyk5WQWC8dIwLaPiFwOGzaLUeYOCLYcihGaUFhg7iE2T/VydJADB3yOVeW8lm3JfnoOkaebVLoCcJwOcxqtY7J9bJj2TVCmcuD5MuD5OGTmGZl484a8fDI3i2uqB4xK0JQ1le84wAEQCoS8vtonasWRUf0/dv40apQX7t/t0GZLv6S+MT4jYuJk5llRgGhad+HB6L1ukGLdB3gHDkeWLQGkk7LseOq61rs5APKZSErliXsDbaqSRNphmtNHwedA/OitLTPO7QS8lyO3PcAl5ZE7c1bkF3Tk75uI6jecPx1W4g/SgV5PgHkMWl3XStTC0Oceuty/jKwJ61TFiR19CaV8YK87/zszcTXZgm1fCzhcUHnaXzwXI/erRSkXyxdFXMxvVRc+tzMhpGLwLJJemu4dnxuKS6rXt4UstXyt03FAAA0Do92A151rQ5PzWj0yEkTLo8TLrcf+IYgZfnvnLjnwLLPt5XqbtjuuEXgkFrJFmjP+NquQXGNGou99hKtuPeAzTdXHQsgwqL9SMBQBTi0y4raDevM6hbRzR6c7nRJ8St90LSqNQMAADbQaBTKvsSUFWVzRYuGJKhLcSWycujHPNSZFWDjlK3QrYnf3L04skAoJTXus8f2r9mzwyBkmItgNNkuk7V9xVNN5Ur9H0JCKBH9nFGQdPm73geV0AQAMJAP2NeUf+5S3VTAN7BkyqLlOaEhsqCdu+ZIgAApkNtDrV0a14xS+pNgnewuF5W3F8dbWuzdkg+Ah6XJAfHDoIEpn+tKFBUm19rbj1aebZ6UsignyijtXP/7kmugE2Q4zqOZqPWbtT0lioIQPqECWuzcy4Y/Of09oLHXwbRYh9V6scqb+lYI1e8wEDIy28yF5Zub9DQ4ChxaitUmJd13ijvPSeB60p01Xb2Le6urG6h71Cq/iPAFghZfd8Sls9YVzEoVcOWkdOlvJIMhfmrg9Yo1ZTlKwXuoqGYDnWXuXgaeSETKBn8i4eqVUCgvyMHAIBWqvUwJtJRumm1uPBYWt3w7zqSZswZDbsQWuXlrBC/0YO/5RYY0+i53MPpZFOsH+Jg9OU5qYa+cTqGNgJnhnTrGvMgrJN0Y6gsLTmV5LFIYEAYsNLJcej2nmFTjx1M73IREiQ5cZL3xG4AANHKxRUHk1MFPC7JE/p6+0wa0Uec5O1jyEw9WMay73tYog/pFrZ1VUVG1r5TDEECADCkMDh24yxXEoCulqnFK92G7YmUhLB2FrZKI4JWOh3bmVIxiccieSKJv0N5XxUCxDm5+9Inkk4BsaF3vuTp5uIcWSNhzwNKB5KIFRwATmhUSG7OniOsQU9xiGNX6TPS0/PZLGCMNG9WbERvmxCE5tqJTA3FMAYK3COjJGwAEMWu1R/MOlDO5pIANDE5LMIRoKs4J68WWHw2aCnHlZGDLzDSN5C170BmLY/nuzQs0C0sXiNLO1JhfoojMtZj8FVhuZ0N9fKMIg1pxwOdjh8Y5juu49if/2i1G43FCgIAiEJFh3a2RkeaD+74y8CfLuYpXQPHvikvCFkdLcvZkwICNgE08P2lrwCIIiNr0z/eU8QVsAn2FLG7sPfcJiWRweXpB/bZcTkEz8XPx5fHjFoq7Y1TOdUUm8cGndZuQbQbwKhnLFvizWQoaN8hg2xsSVxUd/qxPUVcDgk0TfiGRYgsXyl30VAsF3bzqcwSChiDjnFZvHr5kB847MBQ7sHUTKWTkCRYrkLX8f3dkaN0bWReatYZ9upwp/4N3EOcCvYdaZ3EFoWtCnANjZLKcvelExwCaApclkYG3unnjcUWGNuk0XO5+9PJluCksQ8NXXRgH3vtRr+HXY5fgQbZzqszt47xxTBOurzkXMH6GMnYKe8WXZuW3rVsTbBg7KTocYfv4kCPOqo4vzVw/iPQG+pDipf5MVX4Lg40DtiDRgghG4U9aIQQslEYoBFCyEZhgEYIIRuFARohhGwUBmiEELJRGKARQshGYYBGCCEbhQEaIYRsFAZohBCyURigEULIRj0yAdpQV9v8S8+NihBCD9MjE6A5hCo7/xF84TZCCN2tRyZAg1uIRF1Qjp1ohNBj49EJ0MAO9GOKFRihEUKPC2tnVKFqZDn5GhaHABomh60KcAWg1SUZubU0m0USDNgFrAwVcYCqkuXINQSHAAMF4tBIqRsJ0JR2RDXXj6mq02kpfTczeVmM1IsNAFRNvvwiRQEFwLDFi8MC7QA6S9J698kwfPOEFKS3CHKbwc+aKbkRQuiRZWWAVstPMwu2xkweWEIr0zKb5q+P8Ro0U057/rE8XtTGsN4piFpPJWeVx8VI2ACt1aqw+Ff8SQCgG/61PbN2xxpxt1ym8l4R2zcBe+upI3nta0JUOdXimLjhc+SwHUiqiwbR/ZmRGyGEbJuVAZo1kawrKe90kNiZg6TiQrtfhNeQkKkprmRJN/VPEOcolRj3VdKSIACe2Nc8gxnpFuyru6CEibVlbVqm4IyiL7WWhG4g+Ty9rKzJN8Q81WEfgg+MAQDnCkIIPQ6sDND8gHVxXPnZrD0aRiAJiw5ypHV6kjdssk59BwgHT+nG4bNoC7MFszhgpEDfAaKw0AWuw1auiueUFWWk5BnYIunSBb5901wyFAB2nxFCjwmrbxKSfLF0VczG9VFz63MyGoDDY9E63dAkXHvQDJ5xzaA1kizuiD3pO0BoDxNdmCaVhRnW2a7+0viEuI2LiVNZJYbeZbTeQE7kjEyLEEK/RtYGaNr8FAVbIGSxAcA7eFJlntK8lKYoGoSBfsa8ov6o3SovZ4X4kQAAuqYOcyw2lOU1e890BV5gIOTlN/XvoL1BQwPQ/fnwuAKC6Pt/Yy1MGd7VRgihXysrJ43VVp/IqabYPDbotHYB0aEiDgDdcCHtrBJ4LBL6n+LQVclye5/ioClwCY0Id2MDNKXtzmN7cCkKaEpvsAuIjfARAPQ+GXK6EQRsAmjg+0tf8eMq5TmyRsKeB5QOxItXBNoBAF2TmdWyOEbKfzAtgRBCNuaXnNW7KS35Ruh66V32gbUl+z7nxseIcQwaIfSYeGT+UKW73ihZitEZIfQY+SV70AghhKzwyPSgEULocYMBGiGEbBQGaIQQslHWviwJmJ9//l77g1b/4089+GI5hBAalyefIPncp57hP0381oqoa91NQubnn281tz3NYfG5Tz35BD5SgRBC4/JTD63V//iDwfisq8P4Y7R1Abpd020ymRzsnrmrEiKE0GPN2hBq3Ri0Vv8jn/uU9aVCCCEEvKc5uh8M409vXYD+qYfGkQ2EELo7Tz5BWnX3Dp/iQAghG4UBGiGEbBQGaIQQslEYoBFCyEZhgEYIIRuFARohhGwUBmiEELJRGKARQshGYYBGCCEbhQEaIYRs1KMeoDXndqx5ef2nNyz88ST1zY7XFm09b8XfvVuJvn3xyAebVke9tijitbhP6gdWNHwaF7Em6foDy3icqPJdcW+sPnzVAABQkxSzMu5440MuEkLIGla/D9rWEA8rY+pqyraPKtxeWb9znqcTi0Pa6CtKbLRYCKFxeNQDtHDh9iMLH0rODZcrdI4vvLFktvNDyX4c2JLNqZKHXQiE0N17YAGa1lz61z+zCmpadAwpnDwr/NW4cC8BAIA6PWHzDen2pbqTWQU1LRTB95iXsOH12XwAANBezTl84tz11k6GcPaY+/Jb0QudSfMmWxZ1fpFVUHObIZynLUnYsMSHDQD0+Q/e3E1FZ+5cKAAAqvHcJ2k5pU2dDOvZOfOepZiRHezqw2sSta8mzqlPP33xRifDsfNd8tbbkdPYfbmEJUZRJ1JO13TA7M3p7z1HguHmN6nHv7pU10oD137a3Kg3XpnnTLac2pSQ2cQAfPbOys/6d034bsrcMm9El9Vw81zq0a8uNWhoQvjsnD+ueXOhJ3tYW6nPH8/4rKjmlg74Tl7Pvxa7Zo4QAKD0H0sOsxPeYH17/PwNHeES9Pq2Nx0rDh/KKW3VEjzPBdGb3pQIAADolgsn0k9fvKbW02zHWWFv/+fyqRwAgJqkmB03FuxKfW3KfTmkCKFf2AMag9ad37t1VwHz/DvbU48mJb42tSP7g82f1JgHiplrxw+dF76yI/34Zylvz9J9m7jrmw4AoK4mbdp7jly0OeWTz9N3x/2+MXXboUtU/yZpl5xe2pV+/POk2GcbTuz+5OqIYWfdN3t3pFSyF23YlXlkZ4Kf/laD5cJRlf9MqfNK2H30i/Rdq92ajn1w6Lw5l1un96aU8V54LTbh3SXTSaAbPt28LeOW85LEpMOpSe8tIi4nbdr7TSe4LN/9xbZ5bHB8OSn7XG72udzszDVeFvOib366edsX2qC3U9IzPkt5d57u5LYPzncMb6sdSdeFL2/f//m/Du9aIbz20Y79N82V013MKpsSl3z0s5TXna+nbVr/0SWP2KTMT9I3+GrzDiVfoAAAGk4kHq4ipW/vStqbuEx4M/MfKaWUVUcLIWSbHkyAbjiXVcY899a7kTOn2POFnsGvbwIapKUAAAWrSURBVF45uSPv5Hlt33p2UPTmP0wRAJB2kpgVvlD37fnb0FFw8jw1O+GdeZ58kmQLZ7/2+vPE5XPmWMMOit78h6kCEkjnuUvnCLXXq1pGZPpZJQS88W7kTCcBX+i5IHrJtFEGqHnz1r8114UNwHZa+MYff2+s6s+FYj+3KfHtyD/MWzhnCgeoS9lf3XJ6adNb8zydefbOXks3vDmPrMo6XW95txZQl05/1TLt1U3hXvZskuRPXfrGIvu6c5c6h7UVueit2HluPJJkuwRHR82kvpP1f5lNjnxjnjsbSLu5i6ZBJ+P1cvhUAUkKZr74gpPxRmU9AIDb6ynpSZv/MMPd2ckn/KXnhfprlU3jLiFCyHY9kCEOQ4PyNkxZ6jHwS97eYyqfuXhNDQv5AADkoHtXHGdHe6i51QnP1rUyTGtKwjv9qxiK9Sxt7P3/4E0INgEMM6yXaGhoug2OS6cNGz6whBwUuPlOLjymuqEVgAUAfLcZ7gP5tN5oYPjTproMbDh1uht829DYDVMFY2fTtweG+jQh7qR5Cc0QPHpQ0Q0NTbdBR+1951L/IgbIaYyFUpMEEIS5emySBJpizKv6U/Hs+UBTOJ8vQr8GNnCTkGbo3ocNCACnJYnJS1yGp1CPb0fMXT2zQNM0kOToD4Pc02MQBJBgN/P/HHtr6qi7J4CAqauTty8cxzfLKOiW0m8/L7h8U63RUjStA7C7610hhGzIAxni4LiJnKGxum6gH9dRV68lnKY7WUjcUVevJaZ4usGz06YQ6qprnRbSjCtTO0c+aFSDN6ct9EOHa6i5ZWQ5ezhaWufo6UZob9YPjKXQ9dcawM5tyvi6zwDg6OPG6rxerho9Benm5QKNl67c/ajxjeObEw5X2Uujd+zen5W+M8rjrveEELItD2YM2m1RlD9x6ZOPPr+i7tZqVKWf7spu4i94aR6/b7229GR6aWOHVqMq/eeubCU/6I/P80EQ9NIiu/r0D9LO3+zd6lzS1n+cuz3uTD3mPS/UfHf002otTVOay6cOZdWNklJ96diZqy1aXcfN80kffdXhNC/Sz2I/mf3cshed1V/sPnzxRqeu+3bNuf2fnKe9IpeN2h0egXxu2ZJnO7/avfeb6tua7s7Gy1+nbdvxxZA/q3F+ISqIKDm8N720sUOra7l5MWfvjqQLunFnQbU0aMBp7gszpwjY0H394qXxtxhCyLY9oCEO3rwN2+F4xmf7N6fqgC2cPGvZhm3LvfqjIPv3k+m8jxL2ttKEo+eCdxNfm8EBANJrTeIW/tFP03ds7jQC32nqLOlLAeN/ypicGrP9bWr/p9ve+BJ4k59b9nqCtDXR4oMcwsnO6i+3JdR0MlznaS9ue+dVz1HGMcjfv5qUyEs9emJbgoYCrvM0ScLO6IVWDSC4LdmVyEo9/mXif35CAcvOzXfRiiXPDsmO/dyGnduO/zPr8LbPdAzBc/SZ82LUTN64M2DPW/HKd/s/XRNzks8TOs98YVGwMAUf4kDoV+E3JpNp/KkrFfV+3uPvP1qkTk/Y8K3H9qx3LT+X9qBVH16z+fq8/Smvuj+U7BFCjzerouij/i4OhBD61cIAjRBCNuqXH+JACKHHFw5xIITQrwEGaIQQslEYoBFCyEZhgEYIIRtlXYB+8gnypx58EQ9CCN2Nn3roJ5+w4v0+1gVoPvcprf5HK4uEEEIIAED3g4H3NGf86a0L0M/wn/7BYGzXdGM/GiGExu+nHrpd063/kZoo4I5/K+uegwYA5uefu7r1uh8MGKMRQmicnnyC5D3NmSjgEr+14g1IVgdohBBCvwx8igMhhGwUBmiEELJRGKARQshGYYBGCCEbhQEaIYRsFAZohBCyURigEULIRmGARgghG4UBGiGEbBQGaIQQslEYoBFCyEZhgEYIIRuFARohhGwUBmiEELJRGKARQshG/X+rsoQ/kdvazQAAAABJRU5ErkJggg=="},9526:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/test-connection-button-bea258ed30504323e9b7961cb2f605c9.png"},77161:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/uid-oidc-expression-afc68d5f8f66fd2c447477e82f773e6e.png"}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.