CINXE.COM
Auth0 Libraries
<!DOCTYPE html><html data-theme="light" data-reactroot=""><head><meta charSet="utf-8"/><link rel="preconnect" href="https://cdn.auth0.com" crossorigin="anonymous"/><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/><title>Auth0 Libraries</title><meta name="google-site-verification" content="4aSwkVvotRegQ6g32k-21r38Fls9sO8VT5LytKdin3o"/><meta name="author" content="Auth0"/><meta name="description" content="Auth0 Libraries and SDKs overview"/><meta name="breadcrumbs" content="[{"title":"Auth0 Libraries","url":"/docs/libraries"}]"/><meta name="keywords" content="auth0, authentication, sso, passwordless, user, profile, applications, identity, providers, nodejs, ruby, scala, angular, go, php, rails"/><link rel="canonical" href="https://auth0.com/docs/libraries"/><meta name="twitter:creator" content="@auth0"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Auth0 Libraries"/><meta name="twitter:description" content="Auth0 Libraries and SDKs overview"/><meta property="og:title" content="Auth0 Libraries"/><meta property="og:site_name" content="Auth0 Docs"/><meta property="og:url" content="https://auth0.com/docs/"/><meta property="og:type" content="website"/><meta property="og:description" content="Auth0 Libraries and SDKs overview"/><meta property="og:image" content="https://cdn2.auth0.com/docs/1.14124.0/img/share-image.png"/><link rel="stylesheet" href="https://cdn.auth0.com/quantum-fonts/lib/1.1.0/inter/css/all.css"/><link rel="stylesheet" href="https://cdn.auth0.com/quantum-fonts/lib/1.1.0/aeonik/css/all.css"/><link id="favicon" rel="shortcut icon mask-icon" href="https://cdn.auth0.com/quantum-assets/dist/latest/favicons/auth0-favicon-onlight.png"/><script> (() => { if (typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme)').media !== 'not all') { const favIcon = document.querySelector('link#favicon'); const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); const onUpdate = () => { if (darkModeMediaQuery.matches) { favIcon.setAttribute('href', 'https://cdn.auth0.com/quantum-assets/dist/latest/favicons/auth0-favicon-ondark.png'); } else { favIcon.setAttribute('href', 'https://cdn.auth0.com/quantum-assets/dist/latest/favicons/auth0-favicon-onlight.png'); } } darkModeMediaQuery.addListener(onUpdate); onUpdate(); } })(); </script><link rel="stylesheet" href="https://cdn2.auth0.com/docs/1.14124.0/css/styleguide.core.css"/><link rel="stylesheet" href="https://cdn2.auth0.com/website/styleguide/components/2.0.11/components.min.css"/><link rel="stylesheet" href="https://cdn2.auth0.com/docs/1.14124.0/js/commons.61085f4fbc4d2723126f.css"/><script>window.env = {"AUTH0_DOMAIN":"auth0.auth0.com","DOMAIN_URL_APP":"https://manage.auth0.com","DOMAIN_URL_DOCS":"https://auth0.com/docs","DOMAIN_URL_SERVER":"{tenant}.auth0.com","DOMAIN_URL_SUPPORT":"https://support.auth0.com","DOMAIN_URL_SIGNUP":"https://auth0.com/signup?&signUpData=%7B%22category%22%3A%22docs%22%7D","MEDIA_URL":"https://cdn2.auth0.com/docs/1.14124.0/media","ASSET_URL":"https://cdn2.auth0.com/docs/1.14124.0","NODE_ENV":"production","PINGDOM_ID":"565cb401abe53d7b2cda7732","SENTRY_DSN":"https://4bff0b0adb29427b68c6b791fff0bf07@o27592.ingest.us.sentry.io/102638","SERVICE_VERSION":"1.14124.0","CONTENT_PACKAGE_VERSION":"1.0.2549","COVEO_ORG_ID":"oktaproduction9ounvcxa","COVEO_SEARCH_URL":"https://platform.cloud.coveo.com/rest/search/v2","COVEO_ANALYTICS_URL":"https://analytics.cloud.coveo.com/rest/ua/v15","CSRF_TOKEN":"efcJa4KP-KwLARwksQhmZBaHobcT9ZtfYhDw"};</script><script>window.DOMPurify || document.write(unescape("%3Cscript src='/docs/vendor/dompurify-3.0.5.min.js'%3E%3C/script%3E"))</script><script>window.jQuery || document.write(unescape("%3Cscript src='/docs/vendor/jquery-2.2.4.min.js'%3E%3C/script%3E"))</script><script async="" src="//cdn2.auth0.com/styleguide/vendor/bootstrap-3.2.0.min.js"></script><script src="https://cdn2.auth0.com/docs/1.14124.0/js/commons.7aca95b5a3bbc1885533.bundle.js"></script><script src="https://cdn2.auth0.com/docs/1.14124.0/js/browser.df9d04530244600ef7cb.bundle.js"></script><style id="jss-server-side"><style data-emotion="css-light-global 0"></style><style data-emotion="css-light-global ptrnj3">html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box;-webkit-text-size-adjust:100%;}*,*::before,*::after{box-sizing:inherit;}strong,b{font-weight:700;}body{margin:0;color:#191919;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:1rem;line-height:1.5;letter-spacing:0em;background-color:#FFFFFF;}@media print{body{background-color:#fff;}}body::backdrop{background-color:#FFFFFF;}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;font-variant-numeric:slashed-zero;vertical-align:baseline;}button{font:inherit;text-align:left;}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block;}ol,ul{list-style:none;}blockquote,q{quotes:none;}blockquote:before,blockquote:after,q:before,q:after{content:none;}table{border-collapse:collapse;border-spacing:0;}strong,b{font-weight:700;}body,input,textarea,button,select{font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;}</style><style data-emotion="css-light-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css-light 1451177 12z6ra4 99yi95 1tsb9g0 3cyd2n zrm49i 1nsqnny 1lntznf s3wuk0 1b17vdj 3p6qou hdw1oc 1ijv1n9 1rdp59y tjz9nw 1fgj6q9 tohr37 1h20m4j 8og4x3 1c8nkz9 1osspdq yl2thz 1a66avx 1etdfq6 absfm6 105k4h6 1mamkk4 ezihch 1c09ki7 po40j3 1wlfc9m 1y9rv62 1d1pobz 1f4mg9y lj7bu0 gjlwnj hs7jev 3djh8h hdbujw 1890uci qt0dur 8ndd7e o45q5g v7q7lw 1iruc8t b41dpk nwe46n 3jw5v5 1knnvvj 15a736y ewzzx5 4ldyff ktoaon c78aty 9cixd6 1gs9nz7 hnroeo vxqaf0 jo5ffg d717w4 1bv4nl8 1lut7td 1xnox0e edry4k fxn3qc huskxe beespl daexx9 knjfm9 6e8qpc 12dqmav 5r605 vk9kdq 7q5dop z4j6ri">.css-light-1451177{vertical-align:middle;width:auto;fill:#191919;}.css-light-12z6ra4{background-color:#FFFFFF;color:#191919;-webkit-transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;box-shadow:0px 16px 16px rgba(0, 0, 0, 0.1);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;box-sizing:border-box;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;position:fixed;z-index:1100;top:0;left:auto;right:0;background-color:#F6F6F6;color:rgba(0, 0, 0, 0.87);box-shadow:none;height:64px;z-index:20;background-image:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:0;top:0;background-color:#FFFFFF;color:#1E212A;padding:0px 24px;background-color:#FFFFFF;position:fixed;}@media print{.css-light-12z6ra4{position:absolute;}}@media (max-width:1167.95px){.css-light-12z6ra4{padding:0;}}.css-light-99yi95{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%;max-width:100%;padding:0px 16px;max-width:1440px;width:inherit;padding:0;overflow:hidden;border-bottom:1px solid #E8E8E8;}@media (max-width:1167.95px){.css-light-99yi95{max-width:100%;padding:0px 24px;}}.css-light-1tsb9g0{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-light-1tsb9g0>:not(:last-child){margin-right:16px;}.css-light-3cyd2n{margin-right:24px;}.css-light-zrm49i{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.css-light-zrm49i>:not(:last-child){margin-right:16px;}.css-light-1nsqnny.Mui-focused .MuiAutocomplete-clearIndicator{visibility:visible;}@media (pointer: fine){.css-light-1nsqnny:hover .MuiAutocomplete-clearIndicator{visibility:visible;}}.css-light-1nsqnny .MuiAutocomplete-tag{margin:3px;max-width:calc(100% - 6px);}.css-light-1nsqnny .MuiAutocomplete-inputRoot{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}.MuiAutocomplete-hasPopupIcon.css-light-1nsqnny .MuiAutocomplete-inputRoot,.MuiAutocomplete-hasClearIcon.css-light-1nsqnny .MuiAutocomplete-inputRoot{padding-right:30px;}.MuiAutocomplete-hasPopupIcon.MuiAutocomplete-hasClearIcon.css-light-1nsqnny .MuiAutocomplete-inputRoot{padding-right:56px;}.css-light-1nsqnny .MuiAutocomplete-inputRoot .MuiAutocomplete-input{width:0;min-width:30px;}.css-light-1nsqnny .MuiInput-root{padding-bottom:1px;}.css-light-1nsqnny .MuiInput-root .MuiInput-input{padding:4px 4px 4px 0px;}.css-light-1nsqnny .MuiInput-root.MuiInputBase-sizeSmall .MuiInput-input{padding:2px 4px 3px 0;}.css-light-1nsqnny .MuiOutlinedInput-root{padding:9px;}.MuiAutocomplete-hasPopupIcon.css-light-1nsqnny .MuiOutlinedInput-root,.MuiAutocomplete-hasClearIcon.css-light-1nsqnny .MuiOutlinedInput-root{padding-right:39px;}.MuiAutocomplete-hasPopupIcon.MuiAutocomplete-hasClearIcon.css-light-1nsqnny .MuiOutlinedInput-root{padding-right:65px;}.css-light-1nsqnny .MuiOutlinedInput-root .MuiAutocomplete-input{padding:7.5px 4px 7.5px 6px;}.css-light-1nsqnny .MuiOutlinedInput-root .MuiAutocomplete-endAdornment{right:9px;}.css-light-1nsqnny .MuiOutlinedInput-root.MuiInputBase-sizeSmall{padding:6px;}.css-light-1nsqnny .MuiOutlinedInput-root.MuiInputBase-sizeSmall .MuiAutocomplete-input{padding:2.5px 4px 2.5px 6px;}.css-light-1nsqnny .MuiFilledInput-root{padding-top:19px;padding-left:8px;}.MuiAutocomplete-hasPopupIcon.css-light-1nsqnny .MuiFilledInput-root,.MuiAutocomplete-hasClearIcon.css-light-1nsqnny .MuiFilledInput-root{padding-right:39px;}.MuiAutocomplete-hasPopupIcon.MuiAutocomplete-hasClearIcon.css-light-1nsqnny .MuiFilledInput-root{padding-right:65px;}.css-light-1nsqnny .MuiFilledInput-root .MuiFilledInput-input{padding:7px 4px;}.css-light-1nsqnny .MuiFilledInput-root .MuiAutocomplete-endAdornment{right:9px;}.css-light-1nsqnny .MuiFilledInput-root.MuiInputBase-sizeSmall{padding-bottom:1px;}.css-light-1nsqnny .MuiFilledInput-root.MuiInputBase-sizeSmall .MuiFilledInput-input{padding:2.5px 4px;}.css-light-1nsqnny .MuiInputBase-hiddenLabel{padding-top:8px;}.css-light-1nsqnny .MuiAutocomplete-input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-overflow:ellipsis;opacity:1;}.css-light-1nsqnny .MuiAutocomplete-tag{margin:1px;}.css-light-1nsqnny .MuiAutocomplete-inputRoot{min-height:40px;}.css-light-1nsqnny .MuiAutocomplete-inputRoot[class*="MuiOutlinedInput-root"]{padding:2px 8px 2px 4px;}.css-light-1nsqnny .MuiAutocomplete-inputRoot[class*="MuiOutlinedInput-root"] .MuiAutocomplete-input{padding:4px 8px;}.css-light-1nsqnny .MuiAutocomplete-inputRoot[class*="MuiOutlinedInput-root"] .MuiAutocomplete-input:first-child{padding-left:14px;}.css-light-1nsqnny .MuiAutocomplete-inputRoot[class*="MuiOutlinedInput-root"] .MuiAutocomplete-endAdornment{right:6px;}.css-light-1lntznf{display:grid;grid-template-columns:minmax(0, 1fr);gap:24px;max-width:1216px;width:auto;margin:0 auto;width:260px;max-width:auto;margin:0;}@media (max-width:1167.95px){.css-light-1lntznf{max-width:100%;margin:0px 24px;}}@media (max-width:1207.95px){.css-light-1lntznf{display:none;}}.css-light-s3wuk0{font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0em;color:#191919;box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;font-weight:400;margin:0;position:relative;border-radius:4px;padding-left:14px;background-color:#FFFFFF;width:auto;height:34px;}.css-light-s3wuk0.Mui-disabled{color:#686868;cursor:default;}.css-light-s3wuk0.Mui-disabled{background-color:#F1F1F1;color:#8E8E8E;}.css-light-s3wuk0:hover .MuiOutlinedInput-notchedOutline{border-color:#191919;}@media (hover: none){.css-light-s3wuk0:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-light-s3wuk0.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#3F59E4;border-width:2px;}.css-light-s3wuk0.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#C32F26;}.css-light-s3wuk0.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-light-s3wuk0 .MuiOutlinedInput-notchedOutline{border-color:#8E8E8E;}.css-light-s3wuk0.Mui-disabled .MuiOutlinedInput-notchedOutline,.css-light-s3wuk0.Mui-disabled:hover .MuiOutlinedInput-notchedOutline{border-color:#D7D7D7;}.css-light-s3wuk0.Mui-disabled.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#C32F26;}.css-light-s3wuk0:hover .MuiOutlinedInput-notchedOutline{border-color:#686868;}.css-light-s3wuk0.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;border-color:#3F59E4;box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-s3wuk0.Mui-focused:hover .MuiOutlinedInput-notchedOutline{border-color:#3F59E4;box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-s3wuk0.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#C32F26;border-width:2px;}.css-light-s3wuk0.Mui-error.css-light-s3wuk0.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#C32F26;box-shadow:rgba(195, 47, 38, 0.25) 0px 0px 0px 0.25em;}.css-light-1b17vdj{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding-top:1px;height:unset;padding:9px 16px;padding-top:5px;padding-bottom:5px;padding:8.5px 14px;padding-left:0;padding:9px 16px;padding-top:6px;padding-bottom:6px;padding-left:12px;padding-right:12px;padding-left:0;}.css-light-1b17vdj::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-1b17vdj::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-1b17vdj:-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-1b17vdj::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-1b17vdj:focus{outline:0;}.css-light-1b17vdj:invalid{box-shadow:none;}.css-light-1b17vdj::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1b17vdj::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1b17vdj::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1b17vdj:-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1b17vdj::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1b17vdj:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1b17vdj:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1b17vdj:focus:-ms-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1b17vdj:focus::-ms-input-placeholder{opacity:0.42;}.css-light-1b17vdj.Mui-disabled{opacity:1;-webkit-text-fill-color:#686868;}.css-light-1b17vdj:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-light-1b17vdj:-webkit-autofill{border-radius:inherit;}.css-light-1b17vdj[type='number']{padding-right:4px;}.css-light-3p6qou{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);top:0;-webkit-transition:box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-width 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-width 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-3p6qou legend{display:none;}.css-light-hdw1oc{float:unset;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}.css-light-1ijv1n9{display:grid;gap:40px;margin-right:24px;grid-auto-columns:min-content;grid-auto-flow:column;grid-template-columns:none;}@media (min-width:0px){.css-light-1ijv1n9{grid-template-columns:minmax(0,1fr);}}@media (min-width:600px){.css-light-1ijv1n9{grid-template-columns:minmax(0,1fr);}}@media (min-width:960px){.css-light-1ijv1n9{grid-template-columns:repeat(2, minmax(0,1fr));}}@media (min-width:960px){.css-light-1ijv1n9{grid-template-columns:none;}}@media (max-width:1079.95px){.css-light-1ijv1n9{gap:16px;}}@media (max-width:959.95px){.css-light-1ijv1n9{display:none;}}.css-light-1rdp59y{margin:0;display:inline;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-text-decoration:none;text-decoration:none;border-radius:2px;outline:none;color:#191919;font-weight:500;white-space:nowrap;}.css-light-1rdp59y:focus-visible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-1rdp59y:hover{-webkit-text-decoration:none;text-decoration:none;color:#191919;}.css-light-1rdp59y:active{color:#191919;}.css-light-1rdp59y>.QuantumLink-icon{line-height:1;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-light-1rdp59y>svg{width:1em;height:1em;}.css-light-1rdp59y>svg:first-child{-webkit-margin-end:8px;margin-inline-end:8px;}.css-light-tjz9nw{display:grid;gap:8px;grid-auto-columns:min-content;grid-auto-flow:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-top:0;padding:0;}@media (min-width:0px){.css-light-tjz9nw{grid-template-columns:none;}}@media (min-width:600px){.css-light-tjz9nw{grid-template-columns:none;}}@media (min-width:960px){.css-light-tjz9nw{grid-template-columns:none;}}@media (max-width:959.95px){.css-light-tjz9nw{display:none;margin:0;}}@media (min-width:0px){.css-light-tjz9nw{grid-template-columns:none;}}@media (min-width:600px){.css-light-tjz9nw{grid-template-columns:none;}}@media (min-width:960px){.css-light-tjz9nw{grid-template-columns:none;}}.css-light-1fgj6q9{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.57143;text-transform:capitalize;letter-spacing:0em;min-width:64px;padding:3px 9px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(104, 104, 104, 0.5);color:#686868;box-shadow:none;padding:6px 12px;color:#191919;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;white-space:nowrap;min-width:unset;font-size:0.875rem;padding:5px 11px;background-color:#FFFFFF;border-color:#D7D7D7;padding:3px 9px;color:#191919;text-transform:none;}.css-light-1fgj6q9::-moz-focus-inner{border-style:none;}.css-light-1fgj6q9.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-light-1fgj6q9{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-light-1fgj6q9:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(104, 104, 104, 0.04);border:1px solid #686868;}@media (hover: none){.css-light-1fgj6q9:hover{background-color:transparent;}}.css-light-1fgj6q9.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid #F1F1F1;}.css-light-1fgj6q9:hover{box-shadow:none;}.css-light-1fgj6q9.Mui-focusVisible{box-shadow:none;}.css-light-1fgj6q9:active{box-shadow:none;}.css-light-1fgj6q9.Mui-disabled{box-shadow:none;}.css-light-1fgj6q9.Mui-disabled,.css-light-1fgj6q9:disabled{color:#8E8E8E;background-color:#E8E8E8;border-color:#D7D7D7;}.css-light-1fgj6q9:focus,.css-light-1fgj6q9.Mui-focusVisible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-1fgj6q9:hover,.css-light-1fgj6q9.Mui-hover{background-color:#F1F1F1;border-color:#D7D7D7;}.css-light-1fgj6q9:active,.css-light-1fgj6q9.Mui-active{background-color:#E8E8E8;border-color:#D7D7D7;}.css-light-tohr37{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:500;font-size:0.875rem;line-height:1.57143;text-transform:capitalize;letter-spacing:0em;min-width:64px;padding:6px 16px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;color:inherit;border-color:currentColor;box-shadow:none;padding:6px 12px;color:#191919;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;white-space:nowrap;min-width:unset;font-size:0.875rem;background-color:transparent;color:#191919;padding:5px 12px;padding:3px 10px;text-transform:none;}.css-light-tohr37::-moz-focus-inner{border-style:none;}.css-light-tohr37.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-light-tohr37{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-light-tohr37:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 25, 25, 0.04);}@media (hover: none){.css-light-tohr37:hover{background-color:transparent;}}.css-light-tohr37.Mui-disabled{color:rgba(0, 0, 0, 0.26);}.css-light-tohr37:hover{box-shadow:none;}.css-light-tohr37.Mui-focusVisible{box-shadow:none;}.css-light-tohr37:active{box-shadow:none;}.css-light-tohr37.Mui-disabled{box-shadow:none;}.css-light-tohr37.Mui-disabled,.css-light-tohr37:disabled{color:#8E8E8E;background-color:#E8E8E8;border-color:#D7D7D7;}.css-light-tohr37:focus,.css-light-tohr37.Mui-focusVisible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-1h20m4j{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:500;font-size:0.8125rem;line-height:1.57143;text-transform:capitalize;letter-spacing:0em;min-width:64px;padding:4px 10px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;color:#fff;background-color:#3F59E4;box-shadow:0px 6px 8px rgba(0, 0, 0, 0.1);box-shadow:none;padding:6px 12px;color:#191919;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;white-space:nowrap;min-width:unset;font-size:0.875rem;padding:4px 10px;background-color:#3F59E4;color:#FFFFFF;text-transform:none;}.css-light-1h20m4j::-moz-focus-inner{border-style:none;}.css-light-1h20m4j.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-light-1h20m4j{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-light-1h20m4j:hover{-webkit-text-decoration:none;text-decoration:none;background-color:#263588;box-shadow:0px 16px 16px rgba(0, 0, 0, 0.1);}@media (hover: none){.css-light-1h20m4j:hover{background-color:#3F59E4;}}.css-light-1h20m4j:active{box-shadow:0px 16px 16px rgba(0, 0, 0, 0.1);}.css-light-1h20m4j.Mui-focusVisible{box-shadow:0px 16px 16px rgba(0, 0, 0, 0.1);}.css-light-1h20m4j.Mui-disabled{color:rgba(0, 0, 0, 0.26);box-shadow:none;background-color:#F1F1F1;}.css-light-1h20m4j:hover{box-shadow:none;}.css-light-1h20m4j.Mui-focusVisible{box-shadow:none;}.css-light-1h20m4j:active{box-shadow:none;}.css-light-1h20m4j.Mui-disabled{box-shadow:none;}.css-light-1h20m4j.Mui-disabled,.css-light-1h20m4j:disabled{color:#8E8E8E;background-color:#E8E8E8;border-color:#D7D7D7;}.css-light-1h20m4j:focus,.css-light-1h20m4j.Mui-focusVisible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-1h20m4j:hover,.css-light-1h20m4j.Mui-hover{background-color:#3449BA;}.css-light-1h20m4j:active,.css-light-1h20m4j.Mui-active{background-color:#263588;}.css-light-8og4x3{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:4px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0px 4px 0px 12px;}@media (max-width:959.95px){.css-light-8og4x3{-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;}}.css-light-1c8nkz9{margin:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;border-width:0;border-style:solid;border-color:#E8E8E8;border-bottom-width:0;margin-top:8px;margin-bottom:8px;height:auto;border-right-width:thin;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;border-color:#E8E8E8;}.css-light-1osspdq{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-size:1rem;height:2.125rem;width:2.125rem;background-color:transparent;color:#191919;padding:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-1osspdq::-moz-focus-inner{border-style:none;}.css-light-1osspdq.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-light-1osspdq{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-light-1osspdq:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-light-1osspdq:hover{background-color:transparent;}}.css-light-1osspdq.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}.css-light-1osspdq.Mui-disabled,.css-light-1osspdq:disabled{color:#8E8E8E;background-color:#E8E8E8;border-color:#D7D7D7;}.css-light-1osspdq:hover,.css-light-1osspdq.Mui-hover{background-color:#F1F1F1;}.css-light-1osspdq:active,.css-light-1osspdq.Mui-active{background-color:#E8E8E8;}.css-light-1osspdq:focus,.css-light-1osspdq.Mui-focusVisible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-1osspdq.Mui-disabled{background-color:#F1F1F1;color:#686868;}.css-light-1osspdq>svg:first-child{height:1em;width:1em;}.css-light-yl2thz{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-size:1rem;height:2.125rem;width:2.125rem;background-color:transparent;color:#191919;padding:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;display:inherit;}.css-light-yl2thz::-moz-focus-inner{border-style:none;}.css-light-yl2thz.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-light-yl2thz{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-light-yl2thz:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-light-yl2thz:hover{background-color:transparent;}}.css-light-yl2thz.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}.css-light-yl2thz.Mui-disabled,.css-light-yl2thz:disabled{color:#8E8E8E;background-color:#E8E8E8;border-color:#D7D7D7;}.css-light-yl2thz:hover,.css-light-yl2thz.Mui-hover{background-color:#F1F1F1;}.css-light-yl2thz:active,.css-light-yl2thz.Mui-active{background-color:#E8E8E8;}.css-light-yl2thz:focus,.css-light-yl2thz.Mui-focusVisible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-yl2thz.Mui-disabled{background-color:#F1F1F1;color:#686868;}.css-light-yl2thz>svg:first-child{height:1em;width:1em;}@media (min-width:960px){.css-light-yl2thz{display:none;}}.css-light-yl2thz svg:first-child{width:1.5em;height:1.5em;}.css-light-1a66avx{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;z-index:0;}.css-light-1a66avx .MuiDrawer-paperAnchorTop{z-index:19;top:64px;padding:24px;bottom:0;}@media (min-width:960px){.css-light-1a66avx{display:none;}}.css-light-1etdfq6{background-color:#FFFFFF;color:#191919;-webkit-transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;box-shadow:0px 6px 8px rgba(0, 0, 0, 0.1);overflow-y:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:auto;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;z-index:1200;-webkit-overflow-scrolling:touch;position:fixed;top:0;outline:0;left:0;right:0;max-height:100%;border-bottom:1px solid #E8E8E8;}.css-light-absfm6{height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}.css-light-105k4h6{font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0em;color:#191919;box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;font-weight:400;position:relative;border-radius:4px;padding-left:14px;background-color:#FFFFFF;width:auto;height:34px;}.css-light-105k4h6.Mui-disabled{color:#686868;cursor:default;}.css-light-105k4h6.Mui-disabled{background-color:#F1F1F1;color:#8E8E8E;}.css-light-105k4h6:hover .MuiOutlinedInput-notchedOutline{border-color:#191919;}@media (hover: none){.css-light-105k4h6:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-light-105k4h6.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#3F59E4;border-width:2px;}.css-light-105k4h6.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#C32F26;}.css-light-105k4h6.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-light-105k4h6 .MuiOutlinedInput-notchedOutline{border-color:#8E8E8E;}.css-light-105k4h6.Mui-disabled .MuiOutlinedInput-notchedOutline,.css-light-105k4h6.Mui-disabled:hover .MuiOutlinedInput-notchedOutline{border-color:#D7D7D7;}.css-light-105k4h6.Mui-disabled.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#C32F26;}.css-light-105k4h6:hover .MuiOutlinedInput-notchedOutline{border-color:#686868;}.css-light-105k4h6.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;border-color:#3F59E4;box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-105k4h6.Mui-focused:hover .MuiOutlinedInput-notchedOutline{border-color:#3F59E4;box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-105k4h6.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#C32F26;border-width:2px;}.css-light-105k4h6.Mui-error.css-light-105k4h6.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#C32F26;box-shadow:rgba(195, 47, 38, 0.25) 0px 0px 0px 0.25em;}.css-light-1mamkk4{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;height:unset;padding:9px 16px;padding:16.5px 14px;padding-left:0;padding:9px 16px;padding-left:0;}.css-light-1mamkk4::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-1mamkk4::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-1mamkk4:-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-1mamkk4::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-1mamkk4:focus{outline:0;}.css-light-1mamkk4:invalid{box-shadow:none;}.css-light-1mamkk4::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1mamkk4::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1mamkk4::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1mamkk4:-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1mamkk4::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1mamkk4:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1mamkk4:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1mamkk4:focus:-ms-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-light-1mamkk4:focus::-ms-input-placeholder{opacity:0.42;}.css-light-1mamkk4.Mui-disabled{opacity:1;-webkit-text-fill-color:#686868;}.css-light-1mamkk4:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-light-1mamkk4:-webkit-autofill{border-radius:inherit;}.css-light-ezihch{display:grid;grid-template-columns:minmax(0, 1fr);gap:0px;overflow-y:auto;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-align-content:flex-start;-ms-flex-line-pack:flex-start;align-content:flex-start;margin:16px -24px 0px;}.css-light-1c09ki7{margin:0;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:500;font-size:1rem;line-height:1.5;letter-spacing:0em;display:inline;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-text-decoration:none;text-decoration:none;border-radius:2px;outline:none;color:#191919;border-bottom:1px solid #E8E8E8;height:72px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;white-space:nowrap;padding:0px 24px;}.css-light-1c09ki7:focus-visible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-1c09ki7:hover{-webkit-text-decoration:none;text-decoration:none;color:#191919;}.css-light-1c09ki7:active{color:#191919;}.css-light-1c09ki7>.QuantumLink-icon{line-height:1;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-light-1c09ki7>svg{width:1em;height:1em;}.css-light-1c09ki7>svg:first-child{-webkit-margin-end:8px;margin-inline-end:8px;}.css-light-po40j3{display:grid;gap:16px;grid-auto-columns:initial;grid-auto-flow:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-top:1px solid #E8E8E8;padding:16px 24px 0px;}@media (min-width:0px){.css-light-po40j3{grid-template-columns:1fr 1fr;}}@media (min-width:600px){.css-light-po40j3{grid-template-columns:1fr 1fr;}}@media (min-width:960px){.css-light-po40j3{grid-template-columns:1fr 1fr;}}@media (max-width:959.95px){.css-light-po40j3{display:grid;margin:0px -24px;}}@media (min-width:0px){.css-light-po40j3{grid-template-columns:1fr 1fr;}}@media (min-width:600px){.css-light-po40j3{grid-template-columns:1fr 1fr;}}@media (min-width:960px){.css-light-po40j3{grid-template-columns:1fr 1fr;}}.css-light-1wlfc9m{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:500;font-size:0.9375rem;line-height:1.57143;text-transform:capitalize;letter-spacing:0em;min-width:64px;padding:7px 21px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid rgba(104, 104, 104, 0.5);color:#686868;width:100%;box-shadow:none;padding:6px 12px;color:#191919;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;white-space:nowrap;width:100%;font-size:0.875rem;padding:5px 11px;background-color:#FFFFFF;border-color:#D7D7D7;padding:8px 15px;color:#191919;text-transform:none;-webkit-order:2;-ms-flex-order:2;order:2;grid-column:1/3;}.css-light-1wlfc9m::-moz-focus-inner{border-style:none;}.css-light-1wlfc9m.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-light-1wlfc9m{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-light-1wlfc9m:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(104, 104, 104, 0.04);border:1px solid #686868;}@media (hover: none){.css-light-1wlfc9m:hover{background-color:transparent;}}.css-light-1wlfc9m.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid #F1F1F1;}.css-light-1wlfc9m:hover{box-shadow:none;}.css-light-1wlfc9m.Mui-focusVisible{box-shadow:none;}.css-light-1wlfc9m:active{box-shadow:none;}.css-light-1wlfc9m.Mui-disabled{box-shadow:none;}.css-light-1wlfc9m.Mui-disabled,.css-light-1wlfc9m:disabled{color:#8E8E8E;background-color:#E8E8E8;border-color:#D7D7D7;}.css-light-1wlfc9m:focus,.css-light-1wlfc9m.Mui-focusVisible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-1wlfc9m:hover,.css-light-1wlfc9m.Mui-hover{background-color:#F1F1F1;border-color:#D7D7D7;}.css-light-1wlfc9m:active,.css-light-1wlfc9m.Mui-active{background-color:#E8E8E8;border-color:#D7D7D7;}.css-light-1y9rv62{display:inherit;margin-right:-4px;margin-left:8px;}.css-light-1y9rv62>*:nth-of-type(1){font-size:22px;}.css-light-1y9rv62>*:first-child{font-size:1rem;height:1em;width:1em;}.css-light-1d1pobz{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:500;font-size:0.9375rem;line-height:1.57143;text-transform:capitalize;letter-spacing:0em;min-width:64px;padding:7px 21px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border:1px solid currentColor;color:inherit;border-color:currentColor;width:100%;box-shadow:none;padding:6px 12px;color:#191919;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;white-space:nowrap;width:100%;font-size:0.875rem;padding:5px 11px;background-color:#FFFFFF;border-color:#D7D7D7;padding:8px 15px;text-transform:none;-webkit-order:1;-ms-flex-order:1;order:1;}.css-light-1d1pobz::-moz-focus-inner{border-style:none;}.css-light-1d1pobz.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-light-1d1pobz{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-light-1d1pobz:hover{-webkit-text-decoration:none;text-decoration:none;background-color:rgba(25, 25, 25, 0.04);}@media (hover: none){.css-light-1d1pobz:hover{background-color:transparent;}}.css-light-1d1pobz.Mui-disabled{color:rgba(0, 0, 0, 0.26);border:1px solid #F1F1F1;}.css-light-1d1pobz:hover{box-shadow:none;}.css-light-1d1pobz.Mui-focusVisible{box-shadow:none;}.css-light-1d1pobz:active{box-shadow:none;}.css-light-1d1pobz.Mui-disabled{box-shadow:none;}.css-light-1d1pobz.Mui-disabled,.css-light-1d1pobz:disabled{color:#8E8E8E;background-color:#E8E8E8;border-color:#D7D7D7;}.css-light-1d1pobz:focus,.css-light-1d1pobz.Mui-focusVisible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-1f4mg9y{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:500;font-size:0.9375rem;line-height:1.57143;text-transform:capitalize;letter-spacing:0em;min-width:64px;padding:8px 22px;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;color:#fff;background-color:#3F59E4;box-shadow:0px 6px 8px rgba(0, 0, 0, 0.1);width:100%;box-shadow:none;padding:6px 12px;color:#191919;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;white-space:nowrap;width:100%;font-size:0.875rem;padding:9px 16px;background-color:#3F59E4;color:#FFFFFF;text-transform:none;}.css-light-1f4mg9y::-moz-focus-inner{border-style:none;}.css-light-1f4mg9y.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-light-1f4mg9y{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-light-1f4mg9y:hover{-webkit-text-decoration:none;text-decoration:none;background-color:#263588;box-shadow:0px 16px 16px rgba(0, 0, 0, 0.1);}@media (hover: none){.css-light-1f4mg9y:hover{background-color:#3F59E4;}}.css-light-1f4mg9y:active{box-shadow:0px 16px 16px rgba(0, 0, 0, 0.1);}.css-light-1f4mg9y.Mui-focusVisible{box-shadow:0px 16px 16px rgba(0, 0, 0, 0.1);}.css-light-1f4mg9y.Mui-disabled{color:rgba(0, 0, 0, 0.26);box-shadow:none;background-color:#F1F1F1;}.css-light-1f4mg9y:hover{box-shadow:none;}.css-light-1f4mg9y.Mui-focusVisible{box-shadow:none;}.css-light-1f4mg9y:active{box-shadow:none;}.css-light-1f4mg9y.Mui-disabled{box-shadow:none;}.css-light-1f4mg9y.Mui-disabled,.css-light-1f4mg9y:disabled{color:#8E8E8E;background-color:#E8E8E8;border-color:#D7D7D7;}.css-light-1f4mg9y:focus,.css-light-1f4mg9y.Mui-focusVisible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-1f4mg9y:hover,.css-light-1f4mg9y.Mui-hover{background-color:#3449BA;}.css-light-1f4mg9y:active,.css-light-1f4mg9y.Mui-active{background-color:#263588;}.css-light-lj7bu0{margin:0;display:inline;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-text-decoration:none;text-decoration:none;border-radius:2px;outline:none;color:#3F59E4;font-weight:500;white-space:nowrap;}.css-light-lj7bu0:focus-visible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-lj7bu0:hover{-webkit-text-decoration:none;text-decoration:none;color:#3449BA;}.css-light-lj7bu0:active{color:#263588;}.css-light-lj7bu0>.QuantumLink-icon{line-height:1;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-light-lj7bu0>svg{width:1em;height:1em;}.css-light-lj7bu0>svg:first-child{-webkit-margin-end:8px;margin-inline-end:8px;}.css-light-gjlwnj{margin:0;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:500;font-size:1rem;line-height:1.5;letter-spacing:0em;display:inline;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-text-decoration:none;text-decoration:none;border-radius:2px;outline:none;color:#3F59E4;border-bottom:1px solid #E8E8E8;height:72px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;white-space:nowrap;padding:0px 24px;}.css-light-gjlwnj:focus-visible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-gjlwnj:hover{-webkit-text-decoration:none;text-decoration:none;color:#3449BA;}.css-light-gjlwnj:active{color:#263588;}.css-light-gjlwnj>.QuantumLink-icon{line-height:1;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-light-gjlwnj>svg{width:1em;height:1em;}.css-light-gjlwnj>svg:first-child{-webkit-margin-end:8px;margin-inline-end:8px;}.css-light-hs7jev{font-weight:500;padding:8px;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-size:0.875rem;line-height:1.25rem;letter-spacing:0em;color:#191919;border-radius:4px;-webkit-text-decoration:none;text-decoration:none;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;background:transparent;border:none;-webkit-transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;--identicons-color-light:#D7D7D7;--identicons-color-base:#B9B9B9;--identicons-color-dark:#686868;}.css-light-hs7jev:hover{color:#3F59E4;-webkit-text-decoration:none;text-decoration:none;--identicons-color-light:#CFD6F8;--identicons-color-base:#AAB6F3;--identicons-color-dark:#3F59E4;}.css-light-hs7jev:focus-visible{outline:none;box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-3djh8h{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:1.25rem;font-size:1.25rem;}.css-light-3djh8h>svg{width:1em;height:1em;-webkit-transition:fill 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,-webkit-transform 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-hdbujw{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-left:10px;min-width:2rem;}.css-light-1890uci{margin:0;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;color:#686868;}.css-light-qt0dur{display:grid;grid-template-columns:minmax(0, 1fr);gap:24px;max-width:1440px;width:auto;margin:0 auto;margin-top:60px;}@media (max-width:1167.95px){.css-light-qt0dur{max-width:100%;margin:0px 24px;}}@media (max-width:1487.95px){.css-light-qt0dur{margin-left:24px;}}.css-light-8ndd7e{display:grid;gap:24px;grid-template-columns:none;grid-auto-columns:min-content;grid-auto-flow:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;gap:32px;}@media (min-width:0px){.css-light-8ndd7e{grid-template-columns:minmax(0,1fr);}}@media (min-width:600px){.css-light-8ndd7e{grid-template-columns:minmax(0,1fr);}}@media (min-width:960px){.css-light-8ndd7e{grid-template-columns:repeat(2, minmax(0,1fr));}}@media (min-width:960px){.css-light-8ndd7e{grid-template-columns:minmax(250px, 304px) auto;}}.css-light-o45q5g{height:100%;}@media (max-width:959.95px){.css-light-o45q5g{display:none;}}.css-light-v7q7lw{padding-top:56px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;}.css-light-1iruc8t{list-style:none;margin:0;padding:0;}.css-light-b41dpk .QuantumSidebarLink-title,.css-light-b41dpk .QuantumSidebarLink-availabilityLabel,.css-light-b41dpk .QuantumSidebarLink-decoration,.css-light-b41dpk .QuantumSidebarLink-endIcon{opacity:1;will-change:opacity;-webkit-transition:opacity 225ms cubic-bezier(0.4, 0, 1, 1) 113ms;transition:opacity 225ms cubic-bezier(0.4, 0, 1, 1) 113ms;}.css-light-b41dpk>a{padding-left:0px;}.css-light-b41dpk .QuantumSidebarLink-startIcon{display:none;}.css-light-nwe46n{display:grid;grid-template-columns:minmax(0, 1fr);gap:24px;padding:56px 48px 0px;gap:32px;width:100%;}@media (max-width:959.95px){.css-light-nwe46n{padding:56px 0px 0px;}}.css-light-3jw5v5{background:url(/docs/img/library/header_bg.svg) no-repeat right center,linear-gradient(99.42deg, #c376ff 0%, #635dff 100%);box-shadow:0px 24px 34px rgba(16, 113, 242, 0.2);border-radius:20px;width:100%;height:294px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:24px;}.css-light-1knnvvj{-webkit-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:24px;color:#FFFFFF;}@media (min-width:0px){.css-light-1knnvvj{margin-left:16px;}}@media (min-width:600px){.css-light-1knnvvj{margin-left:32px;}}@media (min-width:1360px){.css-light-1knnvvj{margin-left:56px;}}.css-light-15a736y{margin:0;font-family:Aeonik,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:500;font-size:2.5rem;line-height:2.75rem;letter-spacing:-0.8px;color:inherit;}@media (max-width:599.95px){.css-light-15a736y{font-size:2rem;line-height:2.5rem;letter-spacing:-0.5px;}}@media (max-width:-0.05px){.css-light-15a736y{font-size:1.75rem;line-height:2.25rem;letter-spacing:-0.3px;}}.css-light-ewzzx5{margin:0;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:1rem;line-height:1.5;letter-spacing:0em;color:inherit;}@media (min-width:0px){.css-light-ewzzx5{display:none;}}@media (min-width:600px){.css-light-ewzzx5{display:inherit;}}.css-light-4ldyff{margin:0;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:1rem;line-height:1.5;letter-spacing:0em;color:inherit;}@media (min-width:0px){.css-light-4ldyff{display:inherit;}}@media (min-width:600px){.css-light-4ldyff{display:none;}}.css-light-ktoaon{margin-right:24px;margin-left:32px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-light-c78aty{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;position:relative;min-width:0;padding:0;margin:0;border:0;vertical-align:top;width:100%;max-width:100%;}.css-light-9cixd6{font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0em;color:#191919;box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;font-weight:400;position:relative;border-radius:4px;padding-left:14px;background-color:#FFFFFF;height:48px;br:3px;font-size:18px;}.css-light-9cixd6.Mui-disabled{color:#686868;cursor:default;}.css-light-9cixd6.Mui-disabled{background-color:#F1F1F1;color:#8E8E8E;}.css-light-9cixd6:hover .MuiOutlinedInput-notchedOutline{border-color:#191919;}@media (hover: none){.css-light-9cixd6:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-light-9cixd6.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#3F59E4;border-width:2px;}.css-light-9cixd6.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#C32F26;}.css-light-9cixd6.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-light-9cixd6 .MuiOutlinedInput-notchedOutline{border-color:#8E8E8E;}.css-light-9cixd6.Mui-disabled .MuiOutlinedInput-notchedOutline,.css-light-9cixd6.Mui-disabled:hover .MuiOutlinedInput-notchedOutline{border-color:#D7D7D7;}.css-light-9cixd6.Mui-disabled.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#C32F26;}.css-light-9cixd6:hover .MuiOutlinedInput-notchedOutline{border-color:#686868;}.css-light-9cixd6.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;border-color:#3F59E4;box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-9cixd6.Mui-focused:hover .MuiOutlinedInput-notchedOutline{border-color:#3F59E4;box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-9cixd6.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#C32F26;border-width:2px;}.css-light-9cixd6.Mui-error.css-light-9cixd6.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#C32F26;box-shadow:rgba(195, 47, 38, 0.25) 0px 0px 0px 0.25em;}.css-light-1gs9nz7{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:0.01em;max-height:2em;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;white-space:nowrap;color:rgba(0, 0, 0, 0.54);margin-right:8px;color:#191919;}.css-light-hnroeo{margin-right:8px;margin-left:8px;}.css-light-vxqaf0{display:grid;grid-template-columns:minmax(0, 1fr);gap:24px;}.css-light-jo5ffg{display:grid;grid-template-columns:minmax(0, 1fr);gap:0px;padding-top:24px;}.css-light-d717w4{margin:0;font-family:Aeonik,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:500;font-size:1.75rem;line-height:2.25rem;letter-spacing:-0.3px;}@media (max-width:599.95px){.css-light-d717w4{font-size:1.5rem;line-height:2rem;letter-spacing:-0.2px;}}@media (max-width:-0.05px){.css-light-d717w4{font-size:1.25rem;line-height:1.75rem;letter-spacing:-0.1px;}}.css-light-1bv4nl8{margin:0;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;}.css-light-1lut7td{display:table;width:100%;border-collapse:collapse;border-spacing:0;min-width:400px;margin-top:24px;}.css-light-1lut7td caption{font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;padding:16px;color:#686868;text-align:left;caption-side:bottom;}.css-light-1lut7td caption{font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:0.75rem;line-height:1.125rem;letter-spacing:0em;}@media (min-width:0px){.css-light-1lut7td{min-width:100%;}}.css-light-1xnox0e{display:table-row-group;}.css-light-edry4k{color:inherit;display:table-row;vertical-align:middle;outline:0;-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-light-edry4k.MuiTableRow-hover:hover{background-color:#D7D7D7;}.css-light-edry4k.Mui-selected{background-color:rgba(63, 89, 228, 0.08);}.css-light-edry4k.Mui-selected:hover{background-color:rgba(63, 89, 228, 0.12);}.css-light-edry4k.MuiTableRow-hover:hover{background-color:rgba(246, 246, 246, 0.5);}.css-light-fxn3qc{font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;display:table-cell;vertical-align:inherit;border-bottom:1px solid rgba(252, 252, 252, 1);text-align:left;padding:16px;color:#191919;border-bottom:1px solid #D7D7D7;padding:16px;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;}.css-light-huskxe{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:16px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-light-beespl{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;overflow:hidden;height:2.5rem;width:2.5rem;color:#3E3E3E;background-color:transparent;font-size:1rem;font-weight:500;text-transform:uppercase;background-color:transparent;}.css-light-beespl>svg{height:1.5rem;width:1.5rem;}.css-light-daexx9{width:100%;height:100%;text-align:center;object-fit:contain;color:transparent;text-indent:10000px;}.css-light-knjfm9{display:grid;grid-template-columns:minmax(0, 1fr);-webkit-flex:1;-ms-flex:1;flex:1;gap:0px;}.css-light-6e8qpc{margin:0;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:500;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:inherit;}.css-light-12dqmav{font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;display:table-cell;vertical-align:inherit;border-bottom:1px solid rgba(252, 252, 252, 1);text-align:left;padding:16px;color:#191919;border-bottom:1px solid #D7D7D7;padding:16px;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;}@media (min-width:0px){.css-light-12dqmav{display:none;}}@media (min-width:600px){.css-light-12dqmav{display:table-cell;}}.css-light-5r605{font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;display:table-cell;vertical-align:inherit;border-bottom:1px solid rgba(252, 252, 252, 1);text-align:right;padding:16px;color:#191919;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;border-bottom:1px solid #D7D7D7;padding:16px;font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial,sans-serif;font-weight:400;font-size:0.875rem;line-height:1.57143;letter-spacing:0em;width:1%;}.css-light-vk9kdq{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}@media (min-width:0px){.css-light-vk9kdq{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}@media (min-width:600px){.css-light-vk9kdq{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;}}.css-light-7q5dop{margin:0;display:inline;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-text-decoration:none;text-decoration:none;border-radius:2px;outline:none;color:#191919;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;white-space:nowrap;margin:0px 16px;}.css-light-7q5dop:focus-visible{box-shadow:rgba(63, 89, 228, 0.25) 0px 0px 0px 0.25em;}.css-light-7q5dop:hover{-webkit-text-decoration:none;text-decoration:none;color:#191919;}.css-light-7q5dop:active{color:#191919;}.css-light-7q5dop>.QuantumLink-icon{line-height:1;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-light-7q5dop>svg{width:1em;height:1em;}.css-light-7q5dop>svg:first-child{-webkit-margin-end:8px;margin-inline-end:8px;}@media (max-width:599.95px){.css-light-7q5dop{margin:0px 4px;}}.css-light-z4j6ri{vertical-align:text-top;-webkit-margin-end:4px;margin-inline-end:4px;}</style></style><style id="styled-footer-css"><style data-styled="true" data-styled-version="5.3.1">.grRtqw.grRtqw.grRtqw{font-weight:500;}/*!sc*/ .hNTphv.hNTphv.hNTphv{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .dCXkaK.dCXkaK.dCXkaK{color:#80868F;margin:0;}/*!sc*/ .iDvir.iDvir.iDvir{border-top:0.0625rem solid #bdc4cf;padding:1.5rem 1rem;color:#80868F;margin:0;}/*!sc*/ data-styled.g2[id="utils-sc-11hlfw-0"]{content:"grRtqw,hNTphv,coRBuS,dCXkaK,iDvir,"}/*!sc*/ .lAvfL{margin:0 0 1rem 0;padding:0;color:#8B929B;font-family:SpaceGrotesk;font-style:NORMAL;font-weight:600;font-size:0.75rem;-webkit-letter-spacing:0.075rem;-moz-letter-spacing:0.075rem;-ms-letter-spacing:0.075rem;letter-spacing:0.075rem;line-height:1.125rem;text-transform:uppercase;}/*!sc*/ @media screen and (min-width:900px){.lAvfL{color:#8B929B;font-family:SpaceGrotesk;font-style:NORMAL;font-weight:600;font-size:0.875rem;-webkit-letter-spacing:0.09375rem;-moz-letter-spacing:0.09375rem;-ms-letter-spacing:0.09375rem;letter-spacing:0.09375rem;line-height:1.25rem;}}/*!sc*/ @media screen and (min-width:1200px){.lAvfL{color:#8B929B;font-family:SpaceGrotesk;font-style:NORMAL;font-weight:600;font-size:0.875rem;-webkit-letter-spacing:0.09375rem;-moz-letter-spacing:0.09375rem;-ms-letter-spacing:0.09375rem;letter-spacing:0.09375rem;line-height:1.25rem;}}/*!sc*/ data-styled.g6[id="styled__Overline-sc-165cfko-0"]{content:"lAvfL,"}/*!sc*/ .ujlCh{margin:0;padding:0;color:#41454C;font-family:Inter;font-style:NORMAL;font-weight:400;font-size:0.875rem;-webkit-letter-spacing:0rem;-moz-letter-spacing:0rem;-ms-letter-spacing:0rem;letter-spacing:0rem;line-height:1.375rem;color:#41454C;}/*!sc*/ @media screen and (min-width:900px){.ujlCh{color:#41454C;font-family:Inter;font-style:NORMAL;font-weight:400;font-size:0.875rem;-webkit-letter-spacing:0rem;-moz-letter-spacing:0rem;-ms-letter-spacing:0rem;letter-spacing:0rem;line-height:1.375rem;color:#41454C;}}/*!sc*/ @media screen and (min-width:1200px){.ujlCh{color:#41454C;font-family:Inter;font-style:NORMAL;font-weight:400;font-size:0.875rem;-webkit-letter-spacing:0rem;-moz-letter-spacing:0rem;-ms-letter-spacing:0rem;letter-spacing:0rem;line-height:1.375rem;color:#41454C;}}/*!sc*/ .gddBva{margin:0 0 1rem 0;padding:0;color:#41454C;font-family:Inter;font-style:NORMAL;font-weight:400;font-size:0.875rem;-webkit-letter-spacing:0rem;-moz-letter-spacing:0rem;-ms-letter-spacing:0rem;letter-spacing:0rem;line-height:1.375rem;color:#41454C;}/*!sc*/ @media screen and (min-width:900px){.gddBva{color:#41454C;font-family:Inter;font-style:NORMAL;font-weight:400;font-size:0.875rem;-webkit-letter-spacing:0rem;-moz-letter-spacing:0rem;-ms-letter-spacing:0rem;letter-spacing:0rem;line-height:1.375rem;color:#41454C;}}/*!sc*/ @media screen and (min-width:1200px){.gddBva{color:#41454C;font-family:Inter;font-style:NORMAL;font-weight:400;font-size:0.875rem;-webkit-letter-spacing:0rem;-moz-letter-spacing:0rem;-ms-letter-spacing:0rem;letter-spacing:0rem;line-height:1.375rem;color:#41454C;}}/*!sc*/ data-styled.g7[id="styled__Paragraph-sc-165cfko-1"]{content:"ujlCh,gddBva,"}/*!sc*/ .NZnYD{margin:0;padding:0;color:#635DFF;font-family:Inter;font-style:NORMAL;font-weight:500;font-size:0.875rem;-webkit-letter-spacing:0rem;-moz-letter-spacing:0rem;-ms-letter-spacing:0rem;letter-spacing:0rem;line-height:1.375rem;color:#635DFF;-webkit-text-decoration:none;text-decoration:none;cursor:pointer;}/*!sc*/ @media screen and (min-width:900px){.NZnYD{color:#635DFF;font-family:Inter;font-style:NORMAL;font-weight:500;font-size:0.875rem;-webkit-letter-spacing:0rem;-moz-letter-spacing:0rem;-ms-letter-spacing:0rem;letter-spacing:0rem;line-height:1.375rem;}}/*!sc*/ @media screen and (min-width:1200px){.NZnYD{color:#635DFF;font-family:Inter;font-style:NORMAL;font-weight:500;font-size:0.875rem;-webkit-letter-spacing:0rem;-moz-letter-spacing:0rem;-ms-letter-spacing:0rem;letter-spacing:0rem;line-height:1.375rem;}}/*!sc*/ .NZnYD:hover{color:#564ED1;cursor:pointer;-webkit-text-decoration:underline solid #564ED1;text-decoration:underline solid #564ED1;}/*!sc*/ .NZnYD:active{color:#493FA3;}/*!sc*/ .NZnYD:focus-visible{outline:0.25rem solid #635DFFCC;border-radius:0.25rem;color:#635DFF;}/*!sc*/ data-styled.g10[id="styled__Link-sc-bubr9x-0"]{content:"NZnYD,"}/*!sc*/ .eUxShZ{background:#fff;padding-top:0.75rem;}/*!sc*/ data-styled.g68[id="styled__Wrapper-sc-1gk46x3-0"]{content:"eUxShZ,"}/*!sc*/ .fKrrGW{width:100%;max-width:90rem;margin:auto;font-family:Inter,sans-serif;}/*!sc*/ data-styled.g69[id="styled__Content-sc-1gk46x3-1"]{content:"fKrrGW,"}/*!sc*/ .dIMmrp{display:grid;grid-template-columns:1fr 1fr;grid-row-gap:3rem;margin:3rem 1rem auto;}/*!sc*/ @media screen and (min-width:900px){.dIMmrp{margin:4rem 1.5rem auto;}}/*!sc*/ @media screen and (min-width:1200px){.dIMmrp{grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1fr 1fr;margin:5rem 7rem auto;max-width:76rem;}}/*!sc*/ data-styled.g70[id="styled__Nav-sc-1gk46x3-2"]{content:"dIMmrp,"}/*!sc*/ .KTHXE{list-style:none;margin-bottom:0;padding-left:0;}/*!sc*/ data-styled.g71[id="styled__LinksList-sc-1gk46x3-3"]{content:"KTHXE,"}/*!sc*/ .cSvhJk{font-weight:500;font-size:0.875rem;line-height:2rem;-webkit-letter-spacing:-0.000625rem;-moz-letter-spacing:-0.000625rem;-ms-letter-spacing:-0.000625rem;letter-spacing:-0.000625rem;padding-right:2rem;}/*!sc*/ .cSvhJk a{color:#1e212a;}/*!sc*/ .cSvhJk a span{background:linear-gradient(153.07deg,#3ec6eb -2.47%,#1bc99f 102.78%);padding:0.0625rem 0.375rem;border-radius:0.25rem;margin-left:0.5rem;color:#fff;font-weight:600;}/*!sc*/ .cSvhJk a:hover{color:#635dff;}/*!sc*/ @media screen and (min-width:900px){.cSvhJk p::before{content:'';margin-right:0.5rem;border-left:0.0625rem solid #8c929c;height:0.75rem;display:inline-block;}}/*!sc*/ data-styled.g73[id="styled__LinksListItem-sc-1gk46x3-5"]{content:"cSvhJk,"}/*!sc*/ .gnjMuV{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}/*!sc*/ .gnjMuV > ul{-webkit-flex:1;-ms-flex:1;flex:1;}/*!sc*/ data-styled.g74[id="styled__LastSection-sc-1gk46x3-6"]{content:"gnjMuV,"}/*!sc*/ .fMkjag{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;grid-gap:1rem;margin-left:1rem;display:none;}/*!sc*/ @media screen and (min-width:900px){.fMkjag{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-left:0;}}/*!sc*/ .jVliYH{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;grid-gap:1rem;margin-left:1rem;}/*!sc*/ @media screen and (min-width:900px){.jVliYH{display:none;}}/*!sc*/ data-styled.g75[id="styled__Icons-sc-1gk46x3-7"]{content:"fMkjag,jVliYH,"}/*!sc*/ .QrRnA{height:1.5rem;}/*!sc*/ .QrRnA:hover{cursor:pointer;}/*!sc*/ .QrRnA:hover path{fill:#635dff;}/*!sc*/ data-styled.g76[id="styled__IconsLink-sc-1gk46x3-8"]{content:"QrRnA,"}/*!sc*/ .ilqaED{padding:1.5rem 0 0;position:relative;margin-top:3rem;}/*!sc*/ @media screen and (min-width:900px){.ilqaED{display:none;}}/*!sc*/ data-styled.g77[id="styled__FooterBottomMobile-sc-1gk46x3-9"]{content:"ilqaED,"}/*!sc*/ .hcxfiM{display:none;}/*!sc*/ @media screen and (min-width:900px){.hcxfiM{display:block;border-top:0.0625rem solid #bdc4cf;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:1.5rem;position:relative;margin-top:3rem;}}/*!sc*/ @media screen and (min-width:1200px){.hcxfiM{margin-top:6.25rem;}}/*!sc*/ data-styled.g78[id="styled__FooterBottom-sc-1gk46x3-10"]{content:"hcxfiM,"}/*!sc*/ .jPJGrI{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:1.5rem 1rem;}/*!sc*/ data-styled.g79[id="styled__LegalAndLangMobile-sc-1gk46x3-11"]{content:"jPJGrI,"}/*!sc*/ .lpowaK{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-weight:500;color:#8c929c;grid-gap:0.375rem;font-size:0.75rem;line-height:1.125rem;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-flow:wrap;-ms-flex-flow:wrap;flex-flow:wrap;}/*!sc*/ .lpowaK img{max-width:2.5rem;}/*!sc*/ .lpowaK a{color:#8c929c;}/*!sc*/ .lpowaK a:hover{color:#635dff;}/*!sc*/ @media screen and (min-width:900px){.lpowaK{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;}}/*!sc*/ @media screen and (min-width:1200px){.lpowaK{font-size:0.875rem;line-height:1.375rem;}}/*!sc*/ data-styled.g80[id="styled__Legal-sc-1gk46x3-12"]{content:"lpowaK,"}/*!sc*/ .jEqyOT{cursor:pointer;height:100%;color:#1e212a;margin-left:2rem;position:relative;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .jEqyOT svg{stroke:#1e212a;}/*!sc*/ .jEqyOT:hover{color:#635dff;}/*!sc*/ .jEqyOT:hover svg{stroke:#635dff;}/*!sc*/ data-styled.g81[id="styled__LanguageSelector-sc-1gk46x3-13"]{content:"jEqyOT,"}/*!sc*/ .bwtJfB{visibility:hidden;opacity:0;position:absolute;-webkit-transition:opacity 0.2s ease;transition:opacity 0.2s ease;left:-2.125rem;top:-12.625rem;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ @media screen and (min-width:1200px){.bwtJfB{left:-1.5rem;}}/*!sc*/ data-styled.g82[id="styled__MenuListWrapper-sc-1gk46x3-14"]{content:"bwtJfB,"}/*!sc*/ .fZCfPj{min-width:8.375rem;margin-top:0;background:#fff;color:#635dff;box-shadow:0 0 0.5rem rgba(0,0,0,0.25);border-radius:0.5rem;padding:1rem 1.5rem;list-style:none;}/*!sc*/ data-styled.g83[id="styled__MenuList-sc-1gk46x3-15"]{content:"fZCfPj,"}/*!sc*/ .dmNdTh{line-height:1.75rem;}/*!sc*/ .dmNdTh:hover{color:#635dff;-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ data-styled.g84[id="styled__Language-sc-1gk46x3-16"]{content:"dmNdTh,"}/*!sc*/ .ievNWD{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;font-size:0.75rem;}/*!sc*/ @media screen and (min-width:1200px){.ievNWD{font-size:0.875rem;}}/*!sc*/ .ievNWD:hover .styled__MenuListWrapper-sc-1gk46x3-14{visibility:visible;opacity:1;}/*!sc*/ .ievNWD:focus-visible .styled__MenuListWrapper-sc-1gk46x3-14{visibility:visible;opacity:1;}/*!sc*/ .ievNWD:focus-within .styled__MenuListWrapper-sc-1gk46x3-14{visibility:visible;opacity:1;}/*!sc*/ data-styled.g85[id="styled__CurrentLang-sc-1gk46x3-17"]{content:"ievNWD,"}/*!sc*/ .kmfCow{margin-left:0.5rem;font-weight:500;}/*!sc*/ data-styled.g86[id="styled__CurrentLangText-sc-1gk46x3-18"]{content:"kmfCow,"}/*!sc*/ .jQEcjQ > div{background:inherit;}/*!sc*/ .jQEcjQ footer{max-width:1440px;border-top:1px solid #e3e5e7;margin:140px auto 0;}/*!sc*/ .jQEcjQ footer section > p{font-family:Aeonik,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial, sans-serif !important;}/*!sc*/ .jQEcjQ footer nav a,.jQEcjQ footer > section > p{font-family:Inter Var,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica,Arial, sans-serif !important;}/*!sc*/ data-styled.g87[id="sc-bdfBQB"]{content:"jQEcjQ,"}/*!sc*/ </style></style><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/themes/prism-okaidia.css"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/plugins/line-numbers/prism-line-numbers.css"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/plugins/line-highlight/prism-line-highlight.css"/></head><body><script id="cookie-consent-script" charSet="UTF-8" type="text/javascript" data-domain-script="96e22fd8-d619-4cdd-a3c6-d51529d21faf-test" src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js"></script><script>function OptanonWrapper() { const status = document.getElementById("onetrust-accept-btn-handler") ? 'WAITING_FOR_CONSENT' : 'CONSENT_EXPRESSED'; window.postMessage(status, '*'); }</script><a href="#maincontent" style="left:calc(50% - 75px);padding:4px 8px;position:absolute;transform:translateY(-100%)" class="skiplink">Skip to main content</a><div class="docs-single"><div id="app"><div style="padding-top:0" class="docs-application"><header class="MuiPaper-root MuiPaper-elevation MuiPaper-elevation4 MuiAppBar-root MuiAppBar-colorDefault MuiAppBar-positionFixed mui-fixed css-light-12z6ra4" data-search-index="false"><div class="css-light-99yi95"><div class="css-light-1tsb9g0"><div class="MuiBox-root css-light-3cyd2n"><a href="/docs"><svg height="30" viewBox="0 0 324 64" xmlns="http://www.w3.org/2000/svg" class="css-light-1451177"><path d="M67.0272 28.168L75.2983 6.45352H78.4861L86.7251 28.168H83.8471L81.5564 22.3062H72.1106L69.8199 28.168H67.0272ZM80.7448 19.8566L76.8094 9.4005L72.9062 19.8566H80.7448Z"></path><path d="M98.6866 12.3475H101.228V28.168H99.0283L98.6866 26.0608C97.7575 27.2374 96.241 28.3552 93.6406 28.3552C90.1698 28.3552 87.4146 26.4031 87.4146 21.1563V12.3475H89.9562V21.0012C89.9562 24.2904 91.4407 26.0287 94.0731 26.0287C96.9512 26.0287 98.6866 23.8251 98.6866 20.2577V12.3475Z"></path><path d="M102.44 14.6719V12.3453H105.292V7.91148H107.833V12.3453H111.923V14.6719H107.833V24.0102C107.833 25.3419 108.298 25.8393 109.659 25.8393H112.169V28.1659H109.414C106.381 28.1659 105.297 26.8341 105.297 24.0423V14.6719H102.44Z"></path><path d="M127.707 19.3539V28.1627H125.166V19.509C125.166 16.2197 123.585 14.4815 120.862 14.4815C117.92 14.4815 116.094 16.685 116.094 20.2524V28.1627H113.552V6.45352H116.094V14.9521C117.023 13.4653 118.635 12.1603 121.294 12.1603C124.824 12.1603 127.702 14.1124 127.702 19.3592L127.707 19.3539Z"></path><path d="M129.475 16.8121C129.475 10.64 132.817 6.26501 137.714 6.26501C142.61 6.26501 145.921 10.64 145.921 16.8121V17.8069C145.921 24.2891 142.578 28.3539 137.714 28.3539C132.849 28.3539 129.475 24.2891 129.475 17.8069V16.8121ZM143.288 16.903C143.288 11.7525 141.056 8.6504 137.714 8.6504C134.371 8.6504 132.107 11.7525 132.107 16.903V17.7106C132.107 22.8611 134.339 25.9632 137.714 25.9632C141.088 25.9632 143.288 22.8611 143.288 17.7106V16.903Z"></path><path d="M83.9645 49.8342C83.9645 54.6745 80.7447 57.9317 76.3768 57.9317C73.7124 57.9317 71.9182 56.8459 70.9571 55.327L70.6154 57.7445H68.4154V36.0299H70.9571V44.4697C72.009 43.0096 73.7124 41.742 76.3768 41.742C80.7447 41.742 83.9645 44.689 83.9645 49.8395V49.8342ZM81.3641 49.8342C81.3641 46.3898 79.2602 44.0044 76.1312 44.0044C73.0022 44.0044 70.9304 46.3952 70.9304 49.7753C70.9304 53.1555 73.0342 55.6693 76.1312 55.6693C79.2282 55.6693 81.3641 53.2786 81.3641 49.8395V49.8342Z"></path><path d="M83.8683 41.9228H86.5648L91.4292 54.5504L96.1388 41.9228H98.8353L91.5574 60.4122C90.5642 62.9581 89.9768 63.9475 87.7502 63.9475H84.7173V61.621H86.976C88.4337 61.621 88.6793 61.2466 89.2667 59.7597L90.0409 57.8343L83.879 41.9228H83.8683Z"></path><path d="M117.812 57.9238C111.709 57.9238 107.469 53.2707 107.469 46.8794C107.469 40.488 111.714 35.8349 117.812 35.8349C123.91 35.8349 128.155 40.488 128.155 46.8794C128.155 53.2707 123.91 57.9238 117.812 57.9238ZM117.812 55.4422C122.335 55.4422 125.4 51.8748 125.4 46.8794C125.4 41.8839 122.335 38.3166 117.812 38.3166C113.289 38.3166 110.224 41.8839 110.224 46.8794C110.224 51.8748 113.289 55.4422 117.812 55.4422Z"></path><path d="M130.11 36.0299H132.651V50.3316L140.581 41.9239H143.71L137.548 48.4703L144.142 57.7445H141.077L135.845 50.2995L132.657 53.5888V57.7445H130.115V36.0299H130.11Z"></path><path d="M144.35 44.2494V41.9228H147.201V37.489H149.743V41.9228H153.833V44.2494H149.743V53.5877C149.743 54.9194 150.207 55.4168 151.569 55.4168H154.079V57.7434H151.323C148.291 57.7434 147.207 56.4116 147.207 53.6198V44.2494H144.35Z"></path><path d="M170.382 55.4167V57.7432H168.988C166.884 57.7432 166.169 56.8447 166.137 55.2937C165.144 56.7217 163.569 57.9304 160.84 57.9304C157.369 57.9304 155.02 56.1922 155.02 53.3094C155.02 50.1432 157.22 48.3782 161.369 48.3782H166.014V47.2925C166.014 45.244 164.556 44.0032 162.079 44.0032C159.847 44.0032 158.362 45.0568 158.053 46.672H155.511C155.885 43.57 158.389 41.7408 162.202 41.7408C166.228 41.7408 168.55 43.7572 168.55 47.4476V54.363C168.55 55.2027 168.86 55.4167 169.57 55.4167H170.382ZM161.123 50.5175C158.864 50.5175 157.593 51.3572 157.593 53.1543C157.593 54.7053 158.923 55.759 161.032 55.759C164.193 55.759 166.019 53.9298 166.019 51.2931V50.5175H161.123Z"></path><path d="M3.37137 27.7827C13.8455 26.0542 22.0567 17.383 23.7767 6.89172L24.3538 1.84927C24.4967 1.04797 23.9538 -0.0681241 22.9424 0.0120057C15.0283 0.63015 7.55986 3.24582 3.40565 4.94571C1.34283 5.7928 0 7.79605 0 10.0282V26.4777C0 27.4507 0.874269 28.1948 1.83425 28.0403L3.37137 27.7884V27.7827Z"></path><path d="M28.8289 6.89209C30.5545 17.3834 38.7658 26.0546 49.2342 27.7831L50.7713 28.0349C51.7313 28.1952 52.6056 27.4511 52.6056 26.4724V10.0229C52.6056 7.79068 51.2627 5.78744 49.1999 4.94035C45.04 3.23473 37.5773 0.624791 29.6631 0.00664632C28.646 -0.0734835 28.126 1.05406 28.246 1.84391L28.8231 6.88636L28.8289 6.89209Z"></path><path d="M49.2262 32.3908C34.9122 35.2182 28.2666 44.7479 28.2666 62.7886C28.2666 63.6929 29.1637 64.3225 29.918 63.8188C36.5007 59.3716 50.9862 47.7643 52.4776 33.2436C52.5347 31.4178 50.2548 32.2763 49.2262 32.3908Z"></path><path d="M3.37664 32.3908C17.6907 35.2182 24.3363 44.7479 24.3363 62.7886C24.3363 63.6929 23.4391 64.3225 22.6849 63.8188C16.1021 59.3716 1.61668 47.7643 0.125275 33.2436C0.0681328 31.4178 2.34809 32.2763 3.37664 32.3908Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M195.049 64V4.90798e-08L196.17 0V64H195.049Z"></path><path d="M233.834 48.2579H224.228V15.2937H233.834C244.289 15.2937 250.411 21.7452 250.411 31.7758C250.411 41.7593 244.289 48.2579 233.834 48.2579ZM226.771 17.6483V45.9033H233.834C242.829 45.9033 247.821 40.3936 247.821 31.7758C247.821 23.1109 242.829 17.6483 233.834 17.6483H226.771Z"></path><path d="M265.093 48.5405C258.359 48.5405 253.65 43.5487 253.65 36.2966C253.65 29.0916 258.359 24.0998 265.093 24.0998C271.827 24.0998 276.583 29.0916 276.583 36.2966C276.583 43.5487 271.827 48.5405 265.093 48.5405ZM265.093 46.3743C270.414 46.3743 274.088 42.2302 274.088 36.2966C274.088 30.4101 270.414 26.219 265.093 26.219C259.772 26.219 256.099 30.4101 256.099 36.2966C256.099 42.2302 259.772 46.3743 265.093 46.3743Z"></path><path d="M290.821 48.5405C284.087 48.5405 279.519 43.69 279.519 36.3437C279.519 29.0916 284.134 24.0998 290.868 24.0998C296.284 24.0998 300.004 27.1137 300.993 32.0583H298.497C297.649 28.4794 294.824 26.219 290.821 26.219C285.547 26.219 281.968 30.4101 281.968 36.3437C281.968 42.2773 285.594 46.3743 290.821 46.3743C294.777 46.3743 297.649 44.1138 298.45 40.582H300.993C300.051 45.4324 296.236 48.5405 290.821 48.5405Z"></path><path d="M303.636 40.9116H306.085C306.273 44.3493 309.24 46.4684 313.808 46.4684C317.717 46.4684 320.683 44.6789 320.683 41.8534C320.683 38.3216 317.434 37.8035 313.431 37.2384C308.534 36.5792 304.107 35.6844 304.107 30.8811C304.107 26.7841 307.921 24.0527 313.243 24.0998C318.423 24.0998 322.237 26.4544 322.661 31.1165H320.212C319.789 28.0085 317.057 26.1719 313.243 26.1719C309.193 26.1719 306.509 27.9614 306.509 30.6927C306.509 34.0362 309.805 34.46 313.525 34.978C318.658 35.6844 323.085 36.6733 323.085 41.7122C323.085 45.9504 318.941 48.5405 313.808 48.5405C307.827 48.5405 303.825 45.8562 303.636 40.9116Z"></path></svg></a></div></div><div class="css-light-zrm49i"><form id="search" role="search" autoComplete="off" style="width:100%"><div class="MuiAutocomplete-root MuiAutocomplete-hasPopupIcon css-light-1nsqnny"><div placement="header" class="css-light-1lntznf"><div placement="header" class="MuiOutlinedInput-root MuiInputBase-root MuiInputBase-colorPrimary MuiInputBase-sizeSmall MuiInputBase-adornedStart css-light-s3wuk0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin:0px 8px" class="css-light-0"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg><input type="text" autoComplete="off" id="search-box" placeholder="Search the docs" value="" class="MuiOutlinedInput-input MuiInputBase-input MuiInputBase-inputSizeSmall MuiInputBase-inputAdornedStart MuiAutocomplete-input MuiAutocomplete-inputFocused css-light-1b17vdj" aria-autocomplete="list" aria-expanded="false" autoCapitalize="none" spellcheck="false" role="combobox"/><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-light-3p6qou"><legend class="css-light-hdw1oc"><span class="notranslate"></span></legend></fieldset></div></div></div></form><div class="css-light-1ijv1n9"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-1rdp59y" href="/docs/articles">Articles</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-1rdp59y" href="/docs/quickstarts">Quickstarts</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-1rdp59y" href="/docs/api">Auth0 APIs</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-lj7bu0" href="/docs/libraries">SDKs</a></div></div><div class="css-light-1tsb9g0"><div class="css-light-tjz9nw"><a class="MuiButton-root MuiButton-outlined MuiButton-outlinedDefault MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-disableElevation MuiButtonBase-root css-light-1fgj6q9" tabindex="0" href="https://auth0.com/get-started?place=header&type=button&text=talk%20to%20sales" target="_blank">Contact sales<!-- --> </a><a class="MuiButton-root MuiButton-link MuiButton-linkInherit MuiButton-sizeSmall MuiButton-linkSizeSmall MuiButton-colorInherit MuiButton-disableElevation MuiButtonBase-root css-light-tohr37" tabindex="0" role="button" id="login-btn">Log in<!-- --> </a><button class="MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeSmall MuiButton-containedSizeSmall MuiButton-disableElevation MuiButtonBase-root css-light-1h20m4j" tabindex="0" type="button">Sign up<!-- --> </button></div></div><div class="css-light-1tsb9g0"><div class="css-light-8og4x3"><hr class="MuiDivider-root MuiDivider-middle MuiDivider-vertical MuiDivider-flexItem css-light-1c8nkz9"/><button class="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeMedium css-light-1osspdq" tabindex="0" type="button" variant="link" id="color-scheme-menu-trigger" aria-controls="color-scheme-menu-menu" aria-haspopup="menu" aria-expanded="false"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg></button></div></div><button class="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeMedium css-light-yl2thz" tabindex="0" type="button" variant="link"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg></button></div></header><div class="MuiDrawer-root MuiDrawer-docked css-light-1a66avx" data-search-index="false"><div class="MuiPaper-root MuiPaper-elevation MuiPaper-elevation2 MuiDrawer-paper MuiDrawer-paperAnchorTop MuiDrawer-paperAnchorDockedTop css-light-1etdfq6" style="visibility:hidden"><div class="MuiBox-root css-light-absfm6"><form id="search" role="search" autoComplete="off" style="width:100%"><div class="MuiAutocomplete-root MuiAutocomplete-hasPopupIcon css-light-1nsqnny"><div placement="drawer" class="css-light-1lntznf"><div placement="drawer" class="MuiOutlinedInput-root MuiInputBase-root MuiInputBase-colorPrimary MuiInputBase-adornedStart css-light-105k4h6"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin:0px 8px" class="css-light-0"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg><input type="text" autoComplete="off" id="search-box" placeholder="Search the docs" value="" class="MuiOutlinedInput-input MuiInputBase-input MuiInputBase-inputAdornedStart MuiAutocomplete-input MuiAutocomplete-inputFocused css-light-1mamkk4" aria-autocomplete="list" aria-expanded="false" autoCapitalize="none" spellcheck="false" role="combobox"/><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-light-3p6qou"><legend class="css-light-hdw1oc"><span class="notranslate"></span></legend></fieldset></div></div></div></form><div class="css-light-ezihch"><a class="MuiTypography-root MuiTypography-subtitle1 QuantumLink-root css-light-1c09ki7" href="/docs/articles">Articles</a><a class="MuiTypography-root MuiTypography-subtitle1 QuantumLink-root css-light-1c09ki7" href="/docs/quickstarts">Quickstarts</a><a class="MuiTypography-root MuiTypography-subtitle1 QuantumLink-root css-light-1c09ki7" href="/docs/api">Auth0 APIs</a><a class="MuiTypography-root MuiTypography-subtitle1 QuantumLink-root css-light-gjlwnj" href="/docs/libraries">SDKs</a></div><div class="css-light-po40j3"><a class="MuiButton-root MuiButton-outlined MuiButton-outlinedDefault MuiButton-sizeLarge MuiButton-outlinedSizeLarge MuiButton-disableElevation MuiButton-fullWidth MuiButtonBase-root css-light-1wlfc9m" tabindex="0" href="https://auth0.com/get-started?place=header&type=button&text=talk%20to%20sales" target="_blank">Contact sales<!-- --> <span class="MuiButton-endIcon MuiButton-iconSizeLarge css-light-1y9rv62"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg></span></a><a class="MuiButton-root MuiButton-outlined MuiButton-outlinedInherit MuiButton-sizeLarge MuiButton-outlinedSizeLarge MuiButton-colorInherit MuiButton-disableElevation MuiButton-fullWidth MuiButtonBase-root css-light-1d1pobz" tabindex="0" role="button" id="login-btn">Log in<!-- --> </a><button class="MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeLarge MuiButton-containedSizeLarge MuiButton-disableElevation MuiButton-fullWidth MuiButtonBase-root css-light-1f4mg9y" tabindex="0" type="button">Sign up<!-- --> </button></div></div></div></div><div><div class="css-light-qt0dur"><div class="css-light-8ndd7e"><div class="css-light-o45q5g"><div><div></div><nav class="MuiBox-root css-light-v7q7lw" style="margin-top:0px"><ul class="css-light-1iruc8t"><li class="QuantumSidebarLink-root css-light-b41dpk"><a title="Single-page app libraries" class="QuantumSidebarLink-link css-light-hs7jev" href="#spa" color="textSecondary"><span class="QuantumSidebarLink-icon QuantumSidebarLink-startIcon css-light-3djh8h"></span><span class="QuantumSidebarLink-title css-light-hdbujw">Single-page app libraries</span></a></li><li class="QuantumSidebarLink-root css-light-b41dpk"><a title="Regular web app libraries" class="QuantumSidebarLink-link css-light-hs7jev" href="#webapp" color="textSecondary"><span class="QuantumSidebarLink-icon QuantumSidebarLink-startIcon css-light-3djh8h"></span><span class="QuantumSidebarLink-title css-light-hdbujw">Regular web app libraries</span></a></li><li class="QuantumSidebarLink-root css-light-b41dpk"><a title="Back-end / API libraries" class="QuantumSidebarLink-link css-light-hs7jev" href="#backend" color="textSecondary"><span class="QuantumSidebarLink-icon QuantumSidebarLink-startIcon css-light-3djh8h"></span><span class="QuantumSidebarLink-title css-light-hdbujw">Back-end / API libraries</span></a></li><li class="QuantumSidebarLink-root css-light-b41dpk"><a title="Native / mobile libraries" class="QuantumSidebarLink-link css-light-hs7jev" href="#native" color="textSecondary"><span class="QuantumSidebarLink-icon QuantumSidebarLink-startIcon css-light-3djh8h"></span><span class="QuantumSidebarLink-title css-light-hdbujw">Native / mobile libraries</span></a></li><li class="QuantumSidebarLink-root css-light-b41dpk"><a title="Management API SDK libraries" class="QuantumSidebarLink-link css-light-hs7jev" href="#mgmt" color="textSecondary"><span class="QuantumSidebarLink-icon QuantumSidebarLink-startIcon css-light-3djh8h"></span><span class="QuantumSidebarLink-title css-light-hdbujw">Management API SDK libraries</span></a></li><li class="QuantumSidebarLink-root css-light-b41dpk"><a title="Auth0 Lock SDK libraries" class="QuantumSidebarLink-link css-light-hs7jev" href="#lock" color="textSecondary"><span class="QuantumSidebarLink-icon QuantumSidebarLink-startIcon css-light-3djh8h"></span><span class="QuantumSidebarLink-title css-light-hdbujw">Auth0 Lock SDK libraries</span></a></li></ul></nav></div></div><div id="maincontent" role="main" class="css-light-nwe46n"><div class="MuiBox-root css-light-3jw5v5"><div class="MuiBox-root css-light-1knnvvj"><h1 class="MuiTypography-root MuiTypography-h1 css-light-15a736y">SDK Libraries</h1><p class="MuiTypography-root MuiTypography-body1 css-light-ewzzx5">Auth0 SDK libraries make it easy for developers to integrate and interact with Auth0. Explore any library on GitHub, download a sample application, or use a quickstart for customized help.</p><p class="MuiTypography-root MuiTypography-body1 css-light-4ldyff">Auth0 SDK libraries make it easy for developers to integrate and interact with Auth0.</p></div><div class="MuiBox-root css-light-ktoaon"><img style="max-width:100%;min-width:50%" src="/docs/img/library/header_img.svg" alt="library header"/></div></div><form role="search" autoComplete="off"><div class="MuiFormControl-root MuiFormControl-fullWidth QuantumFormField-root css-light-c78aty"><div aria-label="" class="MuiOutlinedInput-root MuiInputBase-root MuiInputBase-colorPrimary MuiInputBase-formControl MuiInputBase-adornedStart css-light-9cixd6"><div class="MuiInputAdornment-root MuiInputAdornment-positionStart MuiInputAdornment-outlined MuiInputAdornment-sizeMedium css-light-1gs9nz7"><span class="notranslate"></span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-hnroeo"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg></div><input type="text" aria-invalid="false" aria-describedby="" id="search-input-control" placeholder="Search for your technology..." value="" class="MuiOutlinedInput-input MuiInputBase-input MuiInputBase-inputAdornedStart css-light-1mamkk4"/><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-light-3p6qou"><legend class="css-light-hdw1oc"><span class="notranslate"></span></legend></fieldset></div></div></form><div class="css-light-vxqaf0"><section id="spa" class="css-light-jo5ffg"><h3 class="MuiTypography-root MuiTypography-h3 css-light-d717w4" data-library-type="spa">Single-Page Application (SPA) SDK Libraries</h3><p class="MuiTypography-root MuiTypography-body2 css-light-1bv4nl8">Need to protect a JavaScript application that runs entirely in a browser? Choose your technology below. </p><table class="MuiTable-root css-light-1lut7td"><tbody class="MuiTableBody-root css-light-1xnox0e"><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/angular.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Angular</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-angular"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-angular-samples/tree/main/Standalone"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/spa/angular"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/flutter.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Flutter (Web)</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://www.github.com/auth0/auth0-flutter/"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-flutter-samples/tree/main/sample"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/spa/flutter"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/javascript.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">JavaScript</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-spa-js"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-javascript-samples/tree/master/01-Login"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/spa/vanillajs"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/react.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">React</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://www.github.com/auth0/auth0-react/"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-react-samples/tree/master/Sample-01"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/spa/react"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/vuejs.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Vue</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://www.github.com/auth0/auth0-vue"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-vue-samples/tree/master/01-Login"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/spa/vuejs"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr></tbody></table></section><section id="webapp" class="css-light-jo5ffg"><h3 class="MuiTypography-root MuiTypography-h3 css-light-d717w4" data-library-type="webapp">Regular Web Application SDK Libraries</h3><p class="MuiTypography-root MuiTypography-body2 css-light-1bv4nl8">Have a traditional web application that runs on a server? Auth0 maintains these SDK libraries for the most popular languages and environments. </p><table class="MuiTable-root css-light-1lut7td"><tbody class="MuiTableBody-root css-light-1xnox0e"><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/dotnet-platform.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">ASP.NET Core Blazor Server</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-aspnetcore-authentication"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-aspnetcore-blazor-server-samples/tree/main/Quickstart/Sample"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/webapp/aspnet-core-blazor-server"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/dotnet-platform.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">ASP.NET Core MVC</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-aspnetcore-authentication"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-aspnetcore-mvc-samples/tree/master/Quickstart/Sample"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/webapp/aspnet-core"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/javascript.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Express</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/express-openid-connect"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-express-webapp-sample/tree/master/01-Login"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/webapp/express"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/java.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Java</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-java-mvc-common"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-servlet-sample/tree/master/01-Login"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/webapp/java"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/java.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Java EE</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-java-mvc-common"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-java-ee-sample/tree/master/01-Login"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/webapp/java-ee"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/spring.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Java Spring Boot</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/okta/okta-spring-boot/"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-spring-boot-login-samples/tree/master/mvc-login"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/webapp/java-spring-boot"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/laravel.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Laravel</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/laravel-auth0"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/laravel/tree/7.x/sample"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/webapp/laravel"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/nextjs.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Next.js</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/nextjs-auth0/"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-nextjs-samples/tree/main/Sample-01"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/webapp/nextjs"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/php.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">PHP</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-php"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-php-web-app/tree/main/app"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/webapp/php"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/python.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Python</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-python"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-python-web-app/tree/master/01-Login"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/webapp/python"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/rails.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Ruby On Rails</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/omniauth-auth0"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-rubyonrails-sample/tree/master/sample"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/webapp/rails"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr></tbody></table></section><section id="backend" class="css-light-jo5ffg"><h3 class="MuiTypography-root MuiTypography-h3 css-light-d717w4" data-library-type="backend">Backend Service and API SDK Libraries</h3><p class="MuiTypography-root MuiTypography-body2 css-light-1bv4nl8">Does your API or service need authentication? Auth0 has SDKs for common API and service development tools.</p><table class="MuiTable-root css-light-1lut7td"><tbody class="MuiTableBody-root css-light-1xnox0e"><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/golang.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Go API</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/go-jwt-middleware"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-golang-api-samples/tree/master/01-Authorization-RS256"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/backend/golang"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/laravel.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Laravel API</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/laravel-auth0"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/laravel/tree/7.x/sample"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/backend/laravel"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/nodejs.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Node (Express) API</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/node-oauth2-jwt-bearer/tree/main/packages/express-oauth2-jwt-bearer"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-express-api-samples/tree/master/01-Authorization-RS256"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/backend/nodejs"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/php.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">PHP API</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-php"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-php-api-samples/tree/main/app"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/backend/php"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/python.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Python API</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-python"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-python-api-samples/tree/master/00-Starter-Seed"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/backend/python"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/rails.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Ruby On Rails API</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/omniauth-auth0"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-rubyonrails-api-samples/tree/master/01-Authentication-RS256"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/backend/rails"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/spring.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Spring Boot API</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/okta/okta-spring-boot/"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-spring-security5-api-sample/tree/master/01-Authorization-MVC"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/backend/java-spring-security5"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr></tbody></table></section><section id="native" class="css-light-jo5ffg"><h3 class="MuiTypography-root MuiTypography-h3 css-light-d717w4" data-library-type="native">Native and Mobile Application SDK Libraries</h3><p class="MuiTypography-root MuiTypography-body2 css-light-1bv4nl8">Developing mobile or desktop applications that run natively on a user’s device? Choose from one of these SDKs to get started.</p><table class="MuiTable-root css-light-1lut7td"><tbody class="MuiTableBody-root css-light-1xnox0e"><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/dotnet.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">.NET Android and iOS</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-oidc-client-net"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-xamarin-oidc-samples/tree/master/Quickstart/01-Login"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/native/net-android-ios"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/android.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Android</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/Auth0.Android"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-android-sample/tree/master/00-Login-Kt"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/native/android"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/expo.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Expo</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/react-native-auth0"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-react-native-sample/tree/master/00-Login-Expo"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/native/react-native-expo"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/flutter.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Flutter</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://www.github.com/auth0/auth0-flutter/"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-flutter-samples/tree/main/sample"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/native/flutter"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/apple.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">iOS / macOS</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/Auth0.swift"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-ios-swift-sample/tree/master/Sample-01"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/native/ios-swift"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/dotnet-platform.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">MAUI</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-oidc-client-net"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-maui-samples/tree/master/Sample"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/native/maui"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/react.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">React Native</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/react-native-auth0"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-react-native-sample/tree/master/00-Login-Hooks"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/native/react-native"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/windows.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">UWP</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-oidc-client-net"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-uwp-oidc-samples/tree/master/Quickstart/00-Starter-Seed"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/native/windows-uwp-csharp"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/dotnet-platform.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">WPF / Winforms</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-oidc-client-net"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-WinFormsWPF-oidc-samples/tree/master/Quickstart/00-Starter-Seed"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/native/wpf-winforms"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/xamarin.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Xamarin</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-oidc-client-net"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0-samples/auth0-xamarin-oidc-samples/tree/master/Quickstart/01-Login"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg></span>Sample App</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/quickstart/native/xamarin"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg></span>Quickstart</a></div></td></tr></tbody></table></section><section id="mgmt" class="css-light-jo5ffg"><h3 class="MuiTypography-root MuiTypography-h3 css-light-d717w4" data-library-type="mgmt">Management API SDK Libraries</h3><p class="MuiTypography-root MuiTypography-body2 css-light-1bv4nl8">Need to programmatically perform Auth0 administrative tasks? Choose from one of these management libraries.</p><table class="MuiTable-root css-light-1lut7td"><tbody class="MuiTableBody-root css-light-1xnox0e"><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/dotnet.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">.NET</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0.net"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/golang.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Go</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/go-auth0"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/java.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Java</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-java"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/nodejs.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Node.js</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/node-auth0"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/php.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">PHP</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-PHP"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/python.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Python</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/auth0-python"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/ruby.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Ruby</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/ruby-auth0"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a></div></td></tr></tbody></table></section><section id="lock" class="css-light-jo5ffg"><h3 class="MuiTypography-root MuiTypography-h3 css-light-d717w4" data-library-type="lock">Lock SDK Libraries</h3><p class="MuiTypography-root MuiTypography-body2 css-light-1bv4nl8">Do you use Lock, Auth0's legacy self-hosted login experience? You can still rely on these libraries for self-hosted login.</p><table class="MuiTable-root css-light-1lut7td"><tbody class="MuiTableBody-root css-light-1xnox0e"><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/auth0.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Lock for Android</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"><span class="MuiTypography-root MuiTypography-body2 css-light-1890uci">Bug fixes only</span></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/Lock.Android"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/libraries/lock-android"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline></svg></span>Documentation</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/auth0.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Lock for iOS</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"><span class="MuiTypography-root MuiTypography-body2 css-light-1890uci">Bug fixes only</span></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/Lock.swift"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/libraries/lock-swift"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline></svg></span>Documentation</a></div></td></tr><tr class="MuiTableRow-root css-light-edry4k"><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-fxn3qc"><div class="QuantumAvatarBlock-root css-light-huskxe"><div class="QuantumAvatarBlock-avatar css-light-0"><div class="QuantumAvatar-root css-light-beespl"><img alt="" src="https://cdn2.auth0.com/docs/1.14124.0/img/platforms/auth0.svg" class="QuantumAvatar-img css-light-daexx9"/></div></div><div class="QuantumTitleBlock-root QuantumAvatarBlock-titleBlock css-light-knjfm9"><p class="MuiTypography-root MuiTypography-subtitle2 MuiTypography-noWrap QuantumTitleBlock-title css-light-6e8qpc">Lock for Web</p></div></div></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-light-12dqmav"><span class="MuiTypography-root MuiTypography-body2 css-light-1890uci">Bug fixes only</span></td><td class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-light-5r605"><div class="MuiBox-root css-light-vk9kdq"><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="https://github.com/auth0/lock"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg></span>Github</a><a class="MuiTypography-root MuiTypography-inherit QuantumLink-root css-light-7q5dop" href="/docs/libraries/lock"><span class="QuantumLink-icon QuantumLink-startIcon QuantumLink-startIcon css-light-z4j6ri"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="css-light-0"><path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline></svg></span>Documentation</a></div></td></tr></tbody></table></section></div></div></div></div></div></div></div><div id="footer" data-search-index="false"><div class="sc-bdfBQB jQEcjQ"><div class="styled__Wrapper-sc-1gk46x3-0 eUxShZ"><footer class="styled__Content-sc-1gk46x3-1 fKrrGW"><nav class="styled__Nav-sc-1gk46x3-2 dIMmrp"><section><p class="styled__Overline-sc-165cfko-0 utils-sc-11hlfw-0 lAvfL grRtqw">Developers</p><ul class="styled__LinksList-sc-1gk46x3-3 KTHXE"><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://developer.auth0.com/resources" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Developer Hub<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://developer.auth0.com/resources/code-samples" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Code Samples and Guides<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/blog/developers/" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Blog posts<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/docs/videos" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Videos<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://identityunlocked.auth0.com/public/49/Identity,-Unlocked.--bed7fada" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Identity Unlocked - Podcasts<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://developer.auth0.com/newsletter" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Zero Index Newsletter<!-- --> </a></li></ul></section><section><p class="styled__Overline-sc-165cfko-0 utils-sc-11hlfw-0 lAvfL grRtqw">Documentation</p><ul class="styled__LinksList-sc-1gk46x3-3 KTHXE"><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/docs/articles" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Articles<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/docs/quickstarts" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Quickstarts<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/docs/api" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">APIs<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/docs/libraries" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">SDK Libraries<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/blog/" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Blog<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/resources/ebooks" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Reports<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/resources/webinars" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Webinars<!-- --> </a></li></ul></section><section><p class="styled__Overline-sc-165cfko-0 utils-sc-11hlfw-0 lAvfL grRtqw">Get Involved</p><ul class="styled__LinksList-sc-1gk46x3-3 KTHXE"><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://community.auth0.com/" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Forum<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://developer.auth0.com/events" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Events<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/ambassador-program" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Ambassador Program<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/research-program" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Auth0 Research Program<!-- --> </a></li></ul></section><section><p class="styled__Overline-sc-165cfko-0 utils-sc-11hlfw-0 lAvfL grRtqw">Company</p><ul class="styled__LinksList-sc-1gk46x3-3 KTHXE"><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/customers" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Our Customers<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/security" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Compliance - Ensuring privacy and security<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/partners" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Partners<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://www.okta.com/company/careers/" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Careers<!-- --> <span class="styled__Paragraph-sc-165cfko-1 utils-sc-11hlfw-0 ujlCh coRBuS">We're hiring!</span></a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://www.okta.com/okta-and-auth0/" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Okta + Auth0<!-- --> </a></li></ul></section><section><p class="styled__Overline-sc-165cfko-0 utils-sc-11hlfw-0 lAvfL grRtqw">Support Center</p><ul class="styled__LinksList-sc-1gk46x3-3 KTHXE"><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://community.auth0.com/" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Community<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://support.auth0.com/" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Support<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://community.auth0.com/c/help/6" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Help<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://community.auth0.com/c/faq/42" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">FAQs<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://marketplace.auth0.com" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Auth0 Marketplace<!-- --> </a></li></ul></section><section><p class="styled__Overline-sc-165cfko-0 utils-sc-11hlfw-0 lAvfL grRtqw">Learning</p><ul class="styled__LinksList-sc-1gk46x3-3 KTHXE"><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/learn" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Learn<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/intro-to-iam" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Intro to IAM (CIAM)<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/blog/" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Blog<!-- --> </a></li></ul></section><section><p class="styled__Overline-sc-165cfko-0 utils-sc-11hlfw-0 lAvfL grRtqw">Platform</p><ul class="styled__LinksList-sc-1gk46x3-3 KTHXE"><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/platform/access-management" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Access Management<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/platform/extensibility" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Extensibility<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/platform/login-security" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Security<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/platform/user-management" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">User Management<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/platform/authentication" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Authentication<!-- --> </a></li></ul></section><section><p class="styled__Overline-sc-165cfko-0 utils-sc-11hlfw-0 lAvfL grRtqw">Features</p><ul class="styled__LinksList-sc-1gk46x3-3 KTHXE"><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/features/universal-login" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Universal Login<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/features/single-sign-on" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Single Sign On<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/features/multifactor-authentication" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Multifactor Authentication<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/features/actions" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Actions<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/features/machine-to-machine" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Machine to Machine<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/features/passwordless" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Passwordless<!-- --> </a></li><li class="styled__LinksListItem-sc-1gk46x3-5 cSvhJk"><a href="https://auth0.com/features/breached-passwords" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD hNTphv">Breached Passwords<!-- --> </a></li></ul></section><section class="styled__LastSection-sc-1gk46x3-6 gnjMuV"><div class="styled__Icons-sc-1gk46x3-7 fMkjag"><a href="https://twitter.com/auth0" target="_blank" rel="noopener noreferrer" aria-label="Twitter link" class="styled__IconsLink-sc-1gk46x3-8 QrRnA"><svg viewBox="0 0 24 24" aria-hidden="true" width="24" height="24" fill="none"><g><path fill="#1e212a" d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"></path></g></svg></a><a href="https://linkedin.com/company/auth0" target="_blank" rel="noopener noreferrer" aria-label="Linkedin link" class="styled__IconsLink-sc-1gk46x3-8 QrRnA"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.5561 3H4.53738C3.71707 3 2.99988 3.59063 2.99988 4.40156V19.4531C2.99988 20.2687 3.71707 20.9953 4.53738 20.9953H19.5514C20.3764 20.9953 20.9952 20.2641 20.9952 19.4531V4.40156C20.9999 3.59063 20.3764 3 19.5561 3ZM8.578 18H5.99988V9.98438H8.578V18ZM7.378 8.76562H7.35925C6.53425 8.76562 5.99988 8.15156 5.99988 7.38281C5.99988 6.6 6.54831 6 7.39206 6C8.23581 6 8.75144 6.59531 8.77019 7.38281C8.77019 8.15156 8.23581 8.76562 7.378 8.76562ZM17.9999 18H15.4218V13.6172C15.4218 12.5672 15.0468 11.85 14.1139 11.85C13.4014 11.85 12.9796 12.3328 12.7921 12.8016C12.7218 12.9703 12.703 13.2 12.703 13.4344V18H10.1249V9.98438H12.703V11.1C13.078 10.5656 13.6639 9.79688 15.028 9.79688C16.7202 9.79688 17.9999 10.9125 17.9999 13.3172V18Z" fill="#1e212a"></path></svg></a><a href="https://github.com/auth0" target="_blank" rel="noopener noreferrer" aria-label="Github link" class="styled__IconsLink-sc-1gk46x3-8 QrRnA"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 1.5C6.20156 1.5 1.5 6.32344 1.5 12.2672C1.5 17.025 4.50937 21.0562 8.68125 22.4813C8.74687 22.4953 8.80312 22.5 8.85938 22.5C9.24844 22.5 9.39844 22.2141 9.39844 21.9656C9.39844 21.7078 9.38906 21.0328 9.38437 20.1328C8.99062 20.2219 8.63906 20.2594 8.325 20.2594C6.30469 20.2594 5.84531 18.6891 5.84531 18.6891C5.36719 17.4469 4.67813 17.1141 4.67813 17.1141C3.76406 16.4719 4.67344 16.4531 4.74375 16.4531H4.74844C5.80313 16.5469 6.35625 17.5687 6.35625 17.5687C6.88125 18.4875 7.58437 18.7453 8.2125 18.7453C8.70469 18.7453 9.15 18.5859 9.4125 18.4641C9.50625 17.7703 9.77812 17.2969 10.0781 17.025C7.74844 16.7531 5.29688 15.8297 5.29688 11.7047C5.29688 10.5281 5.70469 9.56719 6.375 8.81719C6.26719 8.54531 5.90625 7.44844 6.47812 5.96719C6.47812 5.96719 6.55312 5.94375 6.7125 5.94375C7.09219 5.94375 7.95 6.08906 9.36563 7.07344C10.2047 6.83437 11.1 6.71719 11.9953 6.7125C12.8859 6.71719 13.7859 6.83437 14.625 7.07344C16.0406 6.08906 16.8984 5.94375 17.2781 5.94375C17.4375 5.94375 17.5125 5.96719 17.5125 5.96719C18.0844 7.44844 17.7234 8.54531 17.6156 8.81719C18.2859 9.57188 18.6937 10.5328 18.6937 11.7047C18.6937 15.8391 16.2375 16.7484 13.8984 17.0156C14.2734 17.3484 14.6109 18.0047 14.6109 19.0078C14.6109 20.4469 14.5969 21.6094 14.5969 21.9609C14.5969 22.2141 14.7422 22.5 15.1312 22.5C15.1875 22.5 15.2531 22.4953 15.3187 22.4813C19.4953 21.0562 22.5 17.0203 22.5 12.2672C22.5 6.32344 17.7984 1.5 12 1.5Z" fill="#1e212a"></path></svg></a></div></section></nav><section class="styled__FooterBottom-sc-1gk46x3-10 hcxfiM"><p class="styled__Paragraph-sc-165cfko-1 utils-sc-11hlfw-0 gddBva dCXkaK">© <!-- -->2024<!-- --> Okta, Inc. All Rights Reserved.</p><div class="styled__Legal-sc-1gk46x3-12 lpowaK"><a href="https://status.auth0.com" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD coRBuS">Status</a> <!-- -->•<!-- --> <a href="https://www.okta.com/agreements/" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD coRBuS">Legal</a> <!-- -->•<!-- --> <a href="https://auth0.com/privacy" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD coRBuS">Privacy</a> <!-- -->•<!-- --> <a href="https://auth0.com/web-terms" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD coRBuS">Terms</a> <!-- -->•<!-- --> <a href="https://auth0.com/your-privacy-choices" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD coRBuS">Your Privacy Choices</a><img alt="" src="https://cdn.auth0.com/website/footer/ccpa.svg"/></div></section><section class="styled__FooterBottomMobile-sc-1gk46x3-9 ilqaED"><div class="styled__Icons-sc-1gk46x3-7 jVliYH"><a href="https://twitter.com/auth0" target="_blank" rel="noopener noreferrer" aria-label="Twitter link" class="styled__IconsLink-sc-1gk46x3-8 QrRnA"><svg viewBox="0 0 24 24" aria-hidden="true" width="24" height="24" fill="none"><g><path fill="#1e212a" d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"></path></g></svg></a><a href="https://linkedin.com/company/auth0" target="_blank" rel="noopener noreferrer" aria-label="Linkedin link" class="styled__IconsLink-sc-1gk46x3-8 QrRnA"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.5561 3H4.53738C3.71707 3 2.99988 3.59063 2.99988 4.40156V19.4531C2.99988 20.2687 3.71707 20.9953 4.53738 20.9953H19.5514C20.3764 20.9953 20.9952 20.2641 20.9952 19.4531V4.40156C20.9999 3.59063 20.3764 3 19.5561 3ZM8.578 18H5.99988V9.98438H8.578V18ZM7.378 8.76562H7.35925C6.53425 8.76562 5.99988 8.15156 5.99988 7.38281C5.99988 6.6 6.54831 6 7.39206 6C8.23581 6 8.75144 6.59531 8.77019 7.38281C8.77019 8.15156 8.23581 8.76562 7.378 8.76562ZM17.9999 18H15.4218V13.6172C15.4218 12.5672 15.0468 11.85 14.1139 11.85C13.4014 11.85 12.9796 12.3328 12.7921 12.8016C12.7218 12.9703 12.703 13.2 12.703 13.4344V18H10.1249V9.98438H12.703V11.1C13.078 10.5656 13.6639 9.79688 15.028 9.79688C16.7202 9.79688 17.9999 10.9125 17.9999 13.3172V18Z" fill="#1e212a"></path></svg></a><a href="https://github.com/auth0" target="_blank" rel="noopener noreferrer" aria-label="Github link" class="styled__IconsLink-sc-1gk46x3-8 QrRnA"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 1.5C6.20156 1.5 1.5 6.32344 1.5 12.2672C1.5 17.025 4.50937 21.0562 8.68125 22.4813C8.74687 22.4953 8.80312 22.5 8.85938 22.5C9.24844 22.5 9.39844 22.2141 9.39844 21.9656C9.39844 21.7078 9.38906 21.0328 9.38437 20.1328C8.99062 20.2219 8.63906 20.2594 8.325 20.2594C6.30469 20.2594 5.84531 18.6891 5.84531 18.6891C5.36719 17.4469 4.67813 17.1141 4.67813 17.1141C3.76406 16.4719 4.67344 16.4531 4.74375 16.4531H4.74844C5.80313 16.5469 6.35625 17.5687 6.35625 17.5687C6.88125 18.4875 7.58437 18.7453 8.2125 18.7453C8.70469 18.7453 9.15 18.5859 9.4125 18.4641C9.50625 17.7703 9.77812 17.2969 10.0781 17.025C7.74844 16.7531 5.29688 15.8297 5.29688 11.7047C5.29688 10.5281 5.70469 9.56719 6.375 8.81719C6.26719 8.54531 5.90625 7.44844 6.47812 5.96719C6.47812 5.96719 6.55312 5.94375 6.7125 5.94375C7.09219 5.94375 7.95 6.08906 9.36563 7.07344C10.2047 6.83437 11.1 6.71719 11.9953 6.7125C12.8859 6.71719 13.7859 6.83437 14.625 7.07344C16.0406 6.08906 16.8984 5.94375 17.2781 5.94375C17.4375 5.94375 17.5125 5.96719 17.5125 5.96719C18.0844 7.44844 17.7234 8.54531 17.6156 8.81719C18.2859 9.57188 18.6937 10.5328 18.6937 11.7047C18.6937 15.8391 16.2375 16.7484 13.8984 17.0156C14.2734 17.3484 14.6109 18.0047 14.6109 19.0078C14.6109 20.4469 14.5969 21.6094 14.5969 21.9609C14.5969 22.2141 14.7422 22.5 15.1312 22.5C15.1875 22.5 15.2531 22.4953 15.3187 22.4813C19.4953 21.0562 22.5 17.0203 22.5 12.2672C22.5 6.32344 17.7984 1.5 12 1.5Z" fill="#1e212a"></path></svg></a></div><div class="styled__LegalAndLangMobile-sc-1gk46x3-11 jPJGrI"><div class="styled__Legal-sc-1gk46x3-12 lpowaK"><a href="https://status.auth0.com" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD coRBuS">Status</a> <!-- -->•<!-- --> <a href="https://www.okta.com/agreements/" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD coRBuS">Legal</a> <!-- -->•<!-- --> <a href="https://auth0.com/privacy" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD coRBuS">Privacy</a> <!-- -->•<!-- --> <a href="https://auth0.com/web-terms" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD coRBuS">Terms</a> <!-- -->•<!-- --> <a href="https://auth0.com/your-privacy-choices" class="styled__Link-sc-bubr9x-0 utils-sc-11hlfw-0 NZnYD coRBuS">Your Privacy Choices</a><img alt="" src="https://cdn.auth0.com/website/footer/ccpa.svg"/></div></section></footer></div></div></div></div><script>window.App={"context":{"dispatcher":{"stores":{"RouteStore":{"currentNavigate":{"transactionId":4346812996960288,"method":"get","url":"\u002Fdocs\u002Flibraries","route":null,"error":null,"isComplete":true},"routes":null},"ApplicationStore":{"flags":{"framed":false,"singleQuickstart":false,"mobile":false},"state":{"isStickyHeaderVisible":false},"pageTitle":"","pageDescription":"","domainUrlApp":"https:\u002F\u002Fmanage.auth0.com","dashboardUrl":"https:\u002F\u002Fmanage.auth0.com\u002F#","domainUrlDocs":"https:\u002F\u002Fauth0.com\u002Fdocs","domainUrlSignup":"https:\u002F\u002Fauth0.com\u002Fsignup?&signUpData=%7B%22category%22%3A%22docs%22%7D","csrfToken":"efcJa4KP-KwLARwksQhmZBaHobcT9ZtfYhDw"},"QuickstartStore":{"flags":{"framed":false,"singleQuickstart":false,"mobile":false},"quickstarts":{"native":{"title":"Native\u002FMobile App","name":"native","description":"Mobile or Desktop app that runs natively on a device","example":"e.g., iOS, Android","question":"Select a native SDK","budicon":243,"slug":"native-platforms","platforms":{"android":{"name":"android","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fandroid","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fandroid.png","logo_name":undefined,"logo":"android","title":"Android","author":{"name":"Luciano Balmaceda","email":"luciano.balmaceda@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":true,"sdk":{"name":"Auth0.Android","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002FAuth0.Android","logo":"android"},"articles":[{"name":"00-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fandroid\u002F00-login","title":"Login","description":"This quickstart demonstrates how to add user login to an Android application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 Android SDK","anchor":"install-the-auth0-android-sdk","level":2},{"content":"Add Auth0 to Gradle","anchor":"add-auth0-to-gradle","level":3},{"content":"Add Login to your App","anchor":"add-login-to-your-app","level":2},{"content":"Add Logout to your App","anchor":"add-logout-to-your-app","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Android Studio 4.1.0","Android SDK 30","Emulator - Android 11.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fandroid\u002F00-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This quickstart demonstrates how to add user login to an Android application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-android-sample","path":"00-Login-Kt"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-android-sample\u002Ftree\u002Fmaster\u002F00-Login-Kt","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003ECallback URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Edemo:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.androidsample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003ELogout URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Edemo:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.androidsample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it from the \u003Cstrong\u003Ecommand line\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EMake sure the target device is available and install the App running the next command:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew installDebug\n# In Windows\ngradlew installDebug\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EOn the Android device, locate the App icon on the App Drawer and click it to launch it.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it from the \u003Cstrong\u003EAndroid Studio IDE\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the project on \u003Ca href=\"https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Findex.html\"\u003EAndroid Studio\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Ccode\u003ERun\u003C\u002Fcode\u003E button (The green play) or select the menu option \u003Ccode\u003ERun | Run 'app'\u003C\u002Fcode\u003E and then choose a target device.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","isActiveUrl":true},{"name":"01-user-metadata","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fandroid\u002F01-user-metadata","title":"User Metadata","description":"This quickstart demonstrates how to make API calls to the Auth0 Management API to read and update user metadata.","canonical":undefined,"budicon":448,"titles":[{"content":"Read User Metadata","anchor":"read-user-metadata","level":2},{"content":"Update User Metadata","anchor":"update-user-metadata","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Android Studio 4.1.0","Android SDK 30","Emulator - Android 11.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fandroid\u002F01-user-metadata.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This quickstart demonstrates how to make API calls to the Auth0 Management API to read and update user metadata.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-android-sample","path":"00-Login-Kt"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-android-sample\u002Ftree\u002Fmaster\u002F00-Login-Kt","sampleDownloadRequiredData":["client","api"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003ECallback URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Edemo:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.androidsample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003ELogout URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Edemo:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.androidsample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it from the \u003Cstrong\u003Ecommand line\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EMake sure the target device is available and install the App running the next command:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew installDebug\n# In Windows\ngradlew installDebug\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EOn the Android device, locate the App icon on the App Drawer and click it to launch it.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it from the \u003Cstrong\u003EAndroid Studio IDE\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the project on \u003Ca href=\"https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Findex.html\"\u003EAndroid Studio\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Ccode\u003ERun\u003C\u002Fcode\u003E button (The green play) or select the menu option \u003Ccode\u003ERun | Run 'app'\u003C\u002Fcode\u003E and then choose a target device.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","isActiveUrl":false}],"versions":undefined,"defaultArticle":{"name":"00-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fandroid\u002F00-login","title":"Login","description":"This quickstart demonstrates how to add user login to an Android application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 Android SDK","anchor":"install-the-auth0-android-sdk","level":2},{"content":"Add Auth0 to Gradle","anchor":"add-auth0-to-gradle","level":3},{"content":"Add Login to your App","anchor":"add-login-to-your-app","level":2},{"content":"Add Logout to your App","anchor":"add-logout-to-your-app","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Android Studio 4.1.0","Android SDK 30","Emulator - Android 11.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fandroid\u002F00-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This quickstart demonstrates how to add user login to an Android application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-android-sample","path":"00-Login-Kt"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-android-sample\u002Ftree\u002Fmaster\u002F00-Login-Kt","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003ECallback URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Edemo:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.androidsample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003ELogout URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Edemo:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.androidsample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it from the \u003Cstrong\u003Ecommand line\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EMake sure the target device is available and install the App running the next command:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew installDebug\n# In Windows\ngradlew installDebug\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EOn the Android device, locate the App icon on the App Drawer and click it to launch it.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it from the \u003Cstrong\u003EAndroid Studio IDE\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the project on \u003Ca href=\"https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Findex.html\"\u003EAndroid Studio\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Ccode\u003ERun\u003C\u002Fcode\u003E button (The green play) or select the menu option \u003Ccode\u003ERun | Run 'app'\u003C\u002Fcode\u003E and then choose a target device.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fandroid\u002Finteractive","title":"Add Login to your Android App","description":"This quickstart demonstrates how to add user login to an Android application using Auth0.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 Android SDK","anchor":"install-the-auth0-android-sdk","level":2},{"content":"Add manifest placeholders","anchor":"add-manifest-placeholders","level":2},{"content":"Configure your application","anchor":"configure-your-application","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Android Studio 4.1.0","Android SDK 30","Emulator - Android 11.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fandroid\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"build.gradle","language":"groovy","content":"apply plugin: 'com.android.application'\n\nandroid {\n defaultConfig {\n applicationId \"com.auth0.samples\"\n minSdkVersion 21\n targetSdkVersion 30\n \u002F\u002F ...\n\n \u002F\u002F ---\u003E Add the next line\n manifestPlaceholders = [auth0Domain: \"@string\u002Fcom_auth0_domain\", auth0Scheme: \"demo\"]\n \u002F\u002F \u003C---\n }\n}\n\ndependencies {\n \u002F\u002F Add the Auth0 Android SDK\n implementation 'com.auth0.android:auth0:2.+'\n}"},{"filename":"strings.xml","language":"xml","content":"\u003Cresources\u003E\n \u003Cstring name=\"com_auth0_domain\"\u003E\"YOUR_DOMAIN\"\u003C\u002Fstring\u003E\n \u003Cstring name=\"com_auth0_client_id\"\u003E\"YOUR_CLIENT_ID\"\u003C\u002Fstring\u003E\n\u003C\u002Fresources\u003E"},{"filename":"MainActivity.kt","language":"kotlin","content":"import com.auth0.android.Auth0\nimport com.auth0.android.provider.WebAuthProvider\n\nclass MainActivity : AppCompatActivity() {\n\n private lateinit var account: Auth0\n\n override fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n\n \u002F\u002F Set up the account object with the Auth0 application details\n account = Auth0(\n getString(R.string.com_auth0_client_id),\n getString(R.string.com_auth0_domain),\n )\n }\n\n private fun loginWithBrowser() {\n \u002F\u002F Setup the WebAuthProvider, using the custom scheme and scope.\n\n WebAuthProvider.login(account)\n .withScheme(\"demo\")\n .withScope(\"openid profile email\")\n \u002F\u002F Launch the authentication passing the callback where the results will be received\n .start(this, object : Callback\u003CCredentials, AuthenticationException\u003E {\n \u002F\u002F Called when there is an authentication failure\n override fun onFailure(exception: AuthenticationException) {\n \u002F\u002F Something went wrong!\n }\n\n \u002F\u002F Called when authentication completed successfully\n override fun onSuccess(credentials: Credentials) {\n \u002F\u002F Get the access token from the credentials object.\n \u002F\u002F This can be used to call APIs\n val accessToken = credentials.accessToken\n }\n })\n }\n\n private fun logout() {\n WebAuthProvider.logout(account)\n .withScheme(\"demo\")\n .start(this, object : Callback\u003CVoid?, AuthenticationException\u003E {\n override fun onSuccess(payload: Void?) {\n \u002F\u002F The user has been logged out!\n }\n\n override fun onFailure(error: AuthenticationException) {\n \u002F\u002F Something went wrong!\n }\n })\n }\n\n private fun showUserProfile(accessToken: String) {\n var client = AuthenticationAPIClient(account)\n\n \u002F\u002F With the access token, call `userInfo` and get the profile from Auth0.\n client.userInfo(accessToken)\n .start(object : Callback\u003CUserProfile, AuthenticationException\u003E {\n override fun onFailure(exception: AuthenticationException) {\n \u002F\u002F Something went wrong!\n }\n\n override fun onSuccess(profile: UserProfile) {\n \u002F\u002F We have the user's profile!\n val email = profile.email\n val name = profile.name\n }\n })\n }\n}"}],"interactive":true,"downloadBoxDescription":"This quickstart demonstrates how to add user login to an Android application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-android-sample","path":"00-Login-Kt"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-android-sample\u002Ftree\u002Fmaster\u002F00-Login-Kt","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003ECallback URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Edemo:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.androidsample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003ELogout URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Edemo:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.androidsample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it from the \u003Cstrong\u003Ecommand line\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EMake sure the target device is available and install the App running the next command:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew installDebug\n# In Windows\ngradlew installDebug\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EOn the Android device, locate the App icon on the App Drawer and click it to launch it.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it from the \u003Cstrong\u003EAndroid Studio IDE\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the project on \u003Ca href=\"https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Findex.html\"\u003EAndroid Studio\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Ccode\u003ERun\u003C\u002Fcode\u003E button (The green play) or select the menu option \u003Ccode\u003ERun | Run 'app'\u003C\u002Fcode\u003E and then choose a target device.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","hidden":true}]},"android-facebook-login":{"name":"android-facebook-login","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fandroid-facebook-login","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fandroid.png","logo_name":"android","logo":"android","title":"Android - Facebook Login","author":{"name":"Luciano Balmaceda","email":"luciano.balmaceda@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"00-login-facebook","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fandroid-facebook-login\u002F00-login-facebook","title":"Login","description":"This tutorial demonstrates how to add user login to an Android application using native Facebook Login.","canonical":undefined,"budicon":448,"titles":[{"content":"Before You Start","anchor":"before-you-start","level":2},{"content":"Set up the “Continue with Facebook” button","anchor":"set-up-the-continue-with-facebook-button","level":2},{"content":"Request Facebook permissions","anchor":"request-facebook-permissions","level":3},{"content":"Integrate Facebook","anchor":"integrate-facebook","level":2},{"content":"Fetch Facebook session Access Token","anchor":"fetch-facebook-session-access-token","level":3},{"content":"Fetch Facebook user profile","anchor":"fetch-facebook-user-profile","level":3},{"content":"Integrate Auth0","anchor":"integrate-auth0","level":2},{"content":"Get your application keys","anchor":"get-your-application-keys","level":3},{"content":"Install the Auth0 SDK","anchor":"install-the-auth0-sdk","level":3},{"content":"Exchange the received data for Auth0 tokens","anchor":"exchange-the-received-data-for-auth0-tokens","level":3}],"nextSteps":[{"text":"Learn how to securely store tokens","icon":345,"href":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fsave-and-refresh-tokens"},{"text":"Learn to call an API","icon":345,"href":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fandroid\u002F01-user-metadata"},{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Learn more about the Android SDK","icon":345,"href":"\u002Fdocs\u002Flibraries\u002Fauth0-android"}],"showSteps":true,"requirements":["Android Studio 3.6.1","Android SDK 25","Emulator - Nexus 5X - Android 6.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fandroid-facebook-login\u002F00-login-facebook.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an Android application using native Facebook Login.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-android-native-social-sample","path":"00-login-facebook"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-android-native-social-sample\u002Ftree\u002Fmaster\u002F00-login-facebook","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run it from the \u003Cstrong\u003Ecommand line\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EMake sure the target device is available and install the App running the next command:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew installDebug\n# In Windows\ngradlew installDebug\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EOn the Android device, locate the App icon on the App Drawer and click it to launch it.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it from the \u003Cstrong\u003EAndroid Studio IDE\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the project on \u003Ca href=\"https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Findex.html\"\u003EAndroid Studio\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Ccode\u003ERun\u003C\u002Fcode\u003E button (The green play) or select the menu option \u003Ccode\u003ERun | Run 'app'\u003C\u002Fcode\u003E, and then choose a target device.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"00-login-facebook","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fandroid-facebook-login\u002F00-login-facebook","title":"Login","description":"This tutorial demonstrates how to add user login to an Android application using native Facebook Login.","canonical":undefined,"budicon":448,"titles":[{"content":"Before You Start","anchor":"before-you-start","level":2},{"content":"Set up the “Continue with Facebook” button","anchor":"set-up-the-continue-with-facebook-button","level":2},{"content":"Request Facebook permissions","anchor":"request-facebook-permissions","level":3},{"content":"Integrate Facebook","anchor":"integrate-facebook","level":2},{"content":"Fetch Facebook session Access Token","anchor":"fetch-facebook-session-access-token","level":3},{"content":"Fetch Facebook user profile","anchor":"fetch-facebook-user-profile","level":3},{"content":"Integrate Auth0","anchor":"integrate-auth0","level":2},{"content":"Get your application keys","anchor":"get-your-application-keys","level":3},{"content":"Install the Auth0 SDK","anchor":"install-the-auth0-sdk","level":3},{"content":"Exchange the received data for Auth0 tokens","anchor":"exchange-the-received-data-for-auth0-tokens","level":3}],"nextSteps":[{"text":"Learn how to securely store tokens","icon":345,"href":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fsave-and-refresh-tokens"},{"text":"Learn to call an API","icon":345,"href":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fandroid\u002F01-user-metadata"},{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Learn more about the Android SDK","icon":345,"href":"\u002Fdocs\u002Flibraries\u002Fauth0-android"}],"showSteps":true,"requirements":["Android Studio 3.6.1","Android SDK 25","Emulator - Nexus 5X - Android 6.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fandroid-facebook-login\u002F00-login-facebook.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an Android application using native Facebook Login.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-android-native-social-sample","path":"00-login-facebook"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-android-native-social-sample\u002Ftree\u002Fmaster\u002F00-login-facebook","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run it from the \u003Cstrong\u003Ecommand line\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EMake sure the target device is available and install the App running the next command:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew installDebug\n# In Windows\ngradlew installDebug\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EOn the Android device, locate the App icon on the App Drawer and click it to launch it.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it from the \u003Cstrong\u003EAndroid Studio IDE\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the project on \u003Ca href=\"https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Findex.html\"\u003EAndroid Studio\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Ccode\u003ERun\u003C\u002Fcode\u003E button (The green play) or select the menu option \u003Ccode\u003ERun | Run 'app'\u003C\u002Fcode\u003E, and then choose a target device.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n"},"hiddenArticles":undefined},"device":{"name":"device","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fdevice","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fdevice.svg","logo_name":undefined,"logo":"auth0","title":"Device Authorization Flow","author":{"name":"Rachel Khoriander","email":"rachel.khoriander@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fdevice\u002F01-login","title":"Login","description":"This tutorial demonstrates how to call your API from an input-constrained device using the Device Authorization flow.","canonical":undefined,"budicon":448,"titles":[{"content":"Prerequisites","anchor":"prerequisites","level":2},{"content":"Steps","anchor":"steps","level":2},{"content":"Request Device Code","anchor":"request-device-code","level":2},{"content":"Example POST to device code URL","anchor":"example-post-to-device-code-url","level":3},{"content":"Device Code Parameters","anchor":"device-code-parameters","level":4},{"content":"Device Code Response","anchor":"device-code-response","level":3},{"content":"Request Device Activation","anchor":"request-device-activation","level":2},{"content":"Request Tokens","anchor":"request-tokens","level":2},{"content":"Example request token POST to token URL","anchor":"example-request-token-post-to-token-url","level":3},{"content":"Token Request Parameters","anchor":"token-request-parameters","level":4},{"content":"Token Responses","anchor":"token-responses","level":3},{"content":"Authorization pending","anchor":"authorization-pending","level":4},{"content":"Slow down","anchor":"slow-down","level":4},{"content":"Expired Token","anchor":"expired-token","level":4},{"content":"Access Denied","anchor":"access-denied","level":4},{"content":"User Authorization","anchor":"user-authorization","level":2},{"content":"Receive Tokens","anchor":"receive-tokens","level":2},{"content":"Call your API","anchor":"call-your-api","level":2},{"content":"Refresh Tokens","anchor":"refresh-tokens","level":2},{"content":"Example refresh token POST to token URL","anchor":"example-refresh-token-post-to-token-url","level":3},{"content":"Refresh Token Request Parameters","anchor":"refresh-token-request-parameters","level":4},{"content":"Refresh Token Response","anchor":"refresh-token-response","level":3},{"content":"Sample Use Cases","anchor":"sample-use-cases","level":2},{"content":"Detect Device Authorization Flow Use","anchor":"detect-device-authorization-flow-use","level":3},{"content":"Sample Implementations","anchor":"sample-implementations","level":3},{"content":"Error codes","anchor":"error-codes","level":2},{"content":"Limitations","anchor":"limitations","level":2},{"content":"Keep reading","anchor":"keep-reading","level":2}],"nextSteps":[],"showSteps":false,"requirements":undefined,"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fdevice\u002F01-login.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fdevice\u002F01-login","title":"Login","description":"This tutorial demonstrates how to call your API from an input-constrained device using the Device Authorization flow.","canonical":undefined,"budicon":448,"titles":[{"content":"Prerequisites","anchor":"prerequisites","level":2},{"content":"Steps","anchor":"steps","level":2},{"content":"Request Device Code","anchor":"request-device-code","level":2},{"content":"Example POST to device code URL","anchor":"example-post-to-device-code-url","level":3},{"content":"Device Code Parameters","anchor":"device-code-parameters","level":4},{"content":"Device Code Response","anchor":"device-code-response","level":3},{"content":"Request Device Activation","anchor":"request-device-activation","level":2},{"content":"Request Tokens","anchor":"request-tokens","level":2},{"content":"Example request token POST to token URL","anchor":"example-request-token-post-to-token-url","level":3},{"content":"Token Request Parameters","anchor":"token-request-parameters","level":4},{"content":"Token Responses","anchor":"token-responses","level":3},{"content":"Authorization pending","anchor":"authorization-pending","level":4},{"content":"Slow down","anchor":"slow-down","level":4},{"content":"Expired Token","anchor":"expired-token","level":4},{"content":"Access Denied","anchor":"access-denied","level":4},{"content":"User Authorization","anchor":"user-authorization","level":2},{"content":"Receive Tokens","anchor":"receive-tokens","level":2},{"content":"Call your API","anchor":"call-your-api","level":2},{"content":"Refresh Tokens","anchor":"refresh-tokens","level":2},{"content":"Example refresh token POST to token URL","anchor":"example-refresh-token-post-to-token-url","level":3},{"content":"Refresh Token Request Parameters","anchor":"refresh-token-request-parameters","level":4},{"content":"Refresh Token Response","anchor":"refresh-token-response","level":3},{"content":"Sample Use Cases","anchor":"sample-use-cases","level":2},{"content":"Detect Device Authorization Flow Use","anchor":"detect-device-authorization-flow-use","level":3},{"content":"Sample Implementations","anchor":"sample-implementations","level":3},{"content":"Error codes","anchor":"error-codes","level":2},{"content":"Limitations","anchor":"limitations","level":2},{"content":"Keep reading","anchor":"keep-reading","level":2}],"nextSteps":[],"showSteps":false,"requirements":undefined,"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fdevice\u002F01-login.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined},"hiddenArticles":undefined},"flutter":{"name":"flutter","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fflutter","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fflutter.jpeg","logo_name":"flutter","logo":"flutter","title":"Flutter","author":{"name":"Steve Hobbs","email":"steve.hobbs@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-flutter","url":"https:\u002F\u002Fwww.github.com\u002Fauth0\u002Fauth0-flutter\u002F","logo":"flutter"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fflutter\u002F01-login","title":"Add login to your Flutter app","description":"This tutorial demonstrates how to add user login with Auth0 to an Android, iOS, or macOS Flutter app using the Auth0 Flutter SDK","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure the callback and logout URLs","anchor":"configure-the-callback-and-logout-urls","level":3},{"content":"Android","anchor":"android","level":4},{"content":"iOS","anchor":"ios","level":4},{"content":"macOS","anchor":"macos","level":4},{"content":"Install the Auth0 Flutter SDK","anchor":"install-the-auth0-flutter-sdk","level":2},{"content":"Configure Android","anchor":"configure-android","level":2},{"content":"Configure iOS\u002FmacOS","anchor":"configure-ios-macos","level":2},{"content":"Configure the Team ID and bundle identifier","anchor":"configure-the-team-id-and-bundle-identifier","level":4},{"content":"Add the associated domain capability","anchor":"add-the-associated-domain-capability","level":4},{"content":"Add login to your app","anchor":"add-login-to-your-app","level":2},{"content":"Add logout to your app","anchor":"add-logout-to-your-app","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Flutter 3+","Android API 21+ and Android Studio 4+ (for Android)","iOS 13+ and Xcode 14+ (for iOS)","macOS 11+ and Xcode 14+ (for macOS)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fflutter\u002F01-login.md","showDownloadSample":true,"sampleFiles":[{"filename":"app\u002Fbuild.gradle","language":"groovy","content":"apply plugin: 'com.android.application'\n\nandroid {\n defaultConfig {\n applicationId \"com.auth0.samples\"\n minSdkVersion 21\n targetSdkVersion flutter.targetSdkVersion\n \u002F\u002F ...\n\n \u002F\u002F ---\u003E Add the next line\n manifestPlaceholders += [auth0Domain: \"__AUTH0_NAMESPACE__\", auth0Scheme: \"https\"]\n \u002F\u002F \u003C---\n }\n}"},{"filename":"main_view.dart","language":"dart","content":"import 'package:auth0_flutter\u002Fauth0_flutter.dart';\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'profile_view.dart';\n\nclass MainView extends StatefulWidget {\n const MainView({Key? key}) : super(key: key);\n\n @override\n State\u003CMainView\u003E createState() =\u003E _MainViewState();\n}\n\nclass _MainViewState extends State\u003CMainView\u003E {\n Credentials? _credentials;\n\n late Auth0 auth0;\n\n @override\n void initState() {\n super.initState();\n auth0 = Auth0('__AUTH0_NAMESPACE__', '__AUTH0_CLIENT_ID__');\n }\n\n @override\n Widget build(BuildContext context) {\n return Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: \u003CWidget\u003E[\n if (_credentials == null)\n ElevatedButton(\n onPressed: () async {\n \u002F\u002F Use a Universal Link callback URL on iOS 17.4+ \u002F macOS 14.4+\n \u002F\u002F useHTTPS is ignored on Android\n final credentials =\n await auth0.webAuthentication().login(useHTTPS: true);\n\n setState(() {\n _credentials = credentials;\n });\n },\n child: const Text(\"Log in\"))\n else\n Column(\n children: [\n ProfileView(user: _credentials!.user),\n ElevatedButton(\n onPressed: () async {\n \u002F\u002F Use a Universal Link logout URL on iOS 17.4+ \u002F macOS 14.4+\n \u002F\u002F useHTTPS is ignored on Android\n await auth0.webAuthentication().logout(useHTTPS: true);\n\n setState(() {\n _credentials = null;\n });\n },\n child: const Text(\"Log out\"))\n ],\n )\n ],\n );\n }\n}"},{"filename":"profile_view.dart","language":"dart","content":"import 'package:auth0_flutter\u002Fauth0_flutter.dart';\nimport 'package:flutter\u002Fmaterial.dart';\n\nclass ProfileView extends StatelessWidget {\n const ProfileView({Key? key, required this.user}) : super(key: key);\n\n final UserProfile user;\n\n @override\n Widget build(BuildContext context) {\n return Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: [\n if (user.name != null) Text(user.name!),\n if (user.email != null) Text(user.email!)\n ],\n );\n }\n}"}],"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Android, iOS, or macOS Flutter app using the Auth0 Flutter SDK","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-flutter-samples","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-flutter-samples\u002Ftree\u002Fmain\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EOn every step, if you have a \u003Ca href=\"https:\u002F\u002Fauth0.com\u002Fdocs\u002Fcustomize\u002Fcustom-domains\"\u003Ecustom domain\u003C\u002Fa\u003E, replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with your custom domain instead of the value from the settings page.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Ch2 id=\"1-configure-the-auth-0-application\"\u003E1. Configure the Auth0 application\u003C\u002Fh2\u003E\n\u003Cp\u003EOpen the settings page of your Auth0 application and add the following URLs to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E and \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E, depending on the platform you want to use.\u003C\u002Fp\u003E\n\u003Cul\u003E\n\u003Cli\u003EAndroid: \u003Ccode\u003Ecom.auth0.sample:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fandroid\u002Fcom.auth0.sample\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003Cli\u003EiOS: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003Cli\u003EmacOS: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n\u003Ch2 id=\"2-configure-the-associated-domain-i-os-mac-os-only\"\u003E2. Configure the associated domain (iOS\u002FmacOS only)\u003C\u002Fh2\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E\u003Cstrong\u003EThis following requires Xcode 15.3+ and a paid Apple Developer account\u003C\u002Fstrong\u003E. If you do not have a paid Apple Developer account, skip this step, and set the \u003Ccode\u003EuseHTTPS\u003C\u002Fcode\u003E parameter to \u003Ccode\u003Efalse\u003C\u002Fcode\u003E in the \u003Ccode\u003Elogin()\u003C\u002Fcode\u003E and \u003Ccode\u003Elogout()\u003C\u002Fcode\u003E calls at \u003Ccode\u003Elib\u002Fexample_app.dart\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Cp\u003EOpen \u003Ccode\u003Eios\u002FRunner.xcodeproj\u003C\u002Fcode\u003E (or \u003Ccode\u003Emacos\u002FRunner.xcodeproj\u003C\u002Fcode\u003E, for macOS) in Xcode and go to the settings of the \u003Cstrong\u003ERunner\u003C\u002Fstrong\u003E app target. In the \u003Cstrong\u003ESigning & Capabilities\u003C\u002Fstrong\u003E tab, change the bundle identifier from the default \u003Ccode\u003Ecom.auth0.samples.FlutterSample\u003C\u002Fcode\u003E to another value of your choosing. Then, make sure the \u003Cstrong\u003EAutomatically manage signing\u003C\u002Fstrong\u003E box is checked, and that your Apple Team is selected.\u003C\u002Fp\u003E\n\u003Cp\u003ENext, find the \u003Ccode\u003Ewebcredentials:YOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E entry under \u003Cstrong\u003EAssociated Domains\u003C\u002Fstrong\u003E, and replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with the domain of your Auth0 application.\u003C\u002Fp\u003E\n\u003Cp\u003EFinally, open the settings page of your Auth0 application, scroll to the end, and open \u003Cstrong\u003EAdvanced Settings > Device Settings\u003C\u002Fstrong\u003E. In the \u003Cstrong\u003EiOS\u003C\u002Fstrong\u003E section, set \u003Cstrong\u003ETeam ID\u003C\u002Fstrong\u003E to your \u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fhelp\u002Faccount\u002Fmanage-your-team\u002Flocate-your-team-id\u002F\"\u003EApple Team ID\u003C\u002Fa\u003E, and \u003Cstrong\u003EApp ID\u003C\u002Fstrong\u003E to the app's bundle identifier.\u003C\u002Fp\u003E\n\u003Ch2 id=\"3-run-the-app\"\u003E3. Run the app\u003C\u002Fh2\u003E\n\u003Cp\u003EUse the \u003Ca href=\"https:\u002F\u002Fdocs.flutter.dev\u002Freference\u002Fflutter-cli\"\u003EFlutter CLI\u003C\u002Fa\u003E to run the app: \u003Ccode\u003Eflutter run\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fflutter\u002F01-login","title":"Add login to your Flutter app","description":"This tutorial demonstrates how to add user login with Auth0 to an Android, iOS, or macOS Flutter app using the Auth0 Flutter SDK","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure the callback and logout URLs","anchor":"configure-the-callback-and-logout-urls","level":3},{"content":"Android","anchor":"android","level":4},{"content":"iOS","anchor":"ios","level":4},{"content":"macOS","anchor":"macos","level":4},{"content":"Install the Auth0 Flutter SDK","anchor":"install-the-auth0-flutter-sdk","level":2},{"content":"Configure Android","anchor":"configure-android","level":2},{"content":"Configure iOS\u002FmacOS","anchor":"configure-ios-macos","level":2},{"content":"Configure the Team ID and bundle identifier","anchor":"configure-the-team-id-and-bundle-identifier","level":4},{"content":"Add the associated domain capability","anchor":"add-the-associated-domain-capability","level":4},{"content":"Add login to your app","anchor":"add-login-to-your-app","level":2},{"content":"Add logout to your app","anchor":"add-logout-to-your-app","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Flutter 3+","Android API 21+ and Android Studio 4+ (for Android)","iOS 13+ and Xcode 14+ (for iOS)","macOS 11+ and Xcode 14+ (for macOS)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fflutter\u002F01-login.md","showDownloadSample":true,"sampleFiles":[{"filename":"app\u002Fbuild.gradle","language":"groovy","content":"apply plugin: 'com.android.application'\n\nandroid {\n defaultConfig {\n applicationId \"com.auth0.samples\"\n minSdkVersion 21\n targetSdkVersion flutter.targetSdkVersion\n \u002F\u002F ...\n\n \u002F\u002F ---\u003E Add the next line\n manifestPlaceholders += [auth0Domain: \"__AUTH0_NAMESPACE__\", auth0Scheme: \"https\"]\n \u002F\u002F \u003C---\n }\n}"},{"filename":"main_view.dart","language":"dart","content":"import 'package:auth0_flutter\u002Fauth0_flutter.dart';\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'profile_view.dart';\n\nclass MainView extends StatefulWidget {\n const MainView({Key? key}) : super(key: key);\n\n @override\n State\u003CMainView\u003E createState() =\u003E _MainViewState();\n}\n\nclass _MainViewState extends State\u003CMainView\u003E {\n Credentials? _credentials;\n\n late Auth0 auth0;\n\n @override\n void initState() {\n super.initState();\n auth0 = Auth0('__AUTH0_NAMESPACE__', '__AUTH0_CLIENT_ID__');\n }\n\n @override\n Widget build(BuildContext context) {\n return Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: \u003CWidget\u003E[\n if (_credentials == null)\n ElevatedButton(\n onPressed: () async {\n \u002F\u002F Use a Universal Link callback URL on iOS 17.4+ \u002F macOS 14.4+\n \u002F\u002F useHTTPS is ignored on Android\n final credentials =\n await auth0.webAuthentication().login(useHTTPS: true);\n\n setState(() {\n _credentials = credentials;\n });\n },\n child: const Text(\"Log in\"))\n else\n Column(\n children: [\n ProfileView(user: _credentials!.user),\n ElevatedButton(\n onPressed: () async {\n \u002F\u002F Use a Universal Link logout URL on iOS 17.4+ \u002F macOS 14.4+\n \u002F\u002F useHTTPS is ignored on Android\n await auth0.webAuthentication().logout(useHTTPS: true);\n\n setState(() {\n _credentials = null;\n });\n },\n child: const Text(\"Log out\"))\n ],\n )\n ],\n );\n }\n}"},{"filename":"profile_view.dart","language":"dart","content":"import 'package:auth0_flutter\u002Fauth0_flutter.dart';\nimport 'package:flutter\u002Fmaterial.dart';\n\nclass ProfileView extends StatelessWidget {\n const ProfileView({Key? key, required this.user}) : super(key: key);\n\n final UserProfile user;\n\n @override\n Widget build(BuildContext context) {\n return Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: [\n if (user.name != null) Text(user.name!),\n if (user.email != null) Text(user.email!)\n ],\n );\n }\n}"}],"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Android, iOS, or macOS Flutter app using the Auth0 Flutter SDK","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-flutter-samples","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-flutter-samples\u002Ftree\u002Fmain\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EOn every step, if you have a \u003Ca href=\"https:\u002F\u002Fauth0.com\u002Fdocs\u002Fcustomize\u002Fcustom-domains\"\u003Ecustom domain\u003C\u002Fa\u003E, replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with your custom domain instead of the value from the settings page.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Ch2 id=\"1-configure-the-auth-0-application\"\u003E1. Configure the Auth0 application\u003C\u002Fh2\u003E\n\u003Cp\u003EOpen the settings page of your Auth0 application and add the following URLs to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E and \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E, depending on the platform you want to use.\u003C\u002Fp\u003E\n\u003Cul\u003E\n\u003Cli\u003EAndroid: \u003Ccode\u003Ecom.auth0.sample:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fandroid\u002Fcom.auth0.sample\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003Cli\u003EiOS: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003Cli\u003EmacOS: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n\u003Ch2 id=\"2-configure-the-associated-domain-i-os-mac-os-only\"\u003E2. Configure the associated domain (iOS\u002FmacOS only)\u003C\u002Fh2\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E\u003Cstrong\u003EThis following requires Xcode 15.3+ and a paid Apple Developer account\u003C\u002Fstrong\u003E. If you do not have a paid Apple Developer account, skip this step, and set the \u003Ccode\u003EuseHTTPS\u003C\u002Fcode\u003E parameter to \u003Ccode\u003Efalse\u003C\u002Fcode\u003E in the \u003Ccode\u003Elogin()\u003C\u002Fcode\u003E and \u003Ccode\u003Elogout()\u003C\u002Fcode\u003E calls at \u003Ccode\u003Elib\u002Fexample_app.dart\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Cp\u003EOpen \u003Ccode\u003Eios\u002FRunner.xcodeproj\u003C\u002Fcode\u003E (or \u003Ccode\u003Emacos\u002FRunner.xcodeproj\u003C\u002Fcode\u003E, for macOS) in Xcode and go to the settings of the \u003Cstrong\u003ERunner\u003C\u002Fstrong\u003E app target. In the \u003Cstrong\u003ESigning & Capabilities\u003C\u002Fstrong\u003E tab, change the bundle identifier from the default \u003Ccode\u003Ecom.auth0.samples.FlutterSample\u003C\u002Fcode\u003E to another value of your choosing. Then, make sure the \u003Cstrong\u003EAutomatically manage signing\u003C\u002Fstrong\u003E box is checked, and that your Apple Team is selected.\u003C\u002Fp\u003E\n\u003Cp\u003ENext, find the \u003Ccode\u003Ewebcredentials:YOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E entry under \u003Cstrong\u003EAssociated Domains\u003C\u002Fstrong\u003E, and replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with the domain of your Auth0 application.\u003C\u002Fp\u003E\n\u003Cp\u003EFinally, open the settings page of your Auth0 application, scroll to the end, and open \u003Cstrong\u003EAdvanced Settings > Device Settings\u003C\u002Fstrong\u003E. In the \u003Cstrong\u003EiOS\u003C\u002Fstrong\u003E section, set \u003Cstrong\u003ETeam ID\u003C\u002Fstrong\u003E to your \u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fhelp\u002Faccount\u002Fmanage-your-team\u002Flocate-your-team-id\u002F\"\u003EApple Team ID\u003C\u002Fa\u003E, and \u003Cstrong\u003EApp ID\u003C\u002Fstrong\u003E to the app's bundle identifier.\u003C\u002Fp\u003E\n\u003Ch2 id=\"3-run-the-app\"\u003E3. Run the app\u003C\u002Fh2\u003E\n\u003Cp\u003EUse the \u003Ca href=\"https:\u002F\u002Fdocs.flutter.dev\u002Freference\u002Fflutter-cli\"\u003EFlutter CLI\u003C\u002Fa\u003E to run the app: \u003Ccode\u003Eflutter run\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fflutter\u002Finteractive","title":"Add login to your Flutter app","description":"This tutorial demonstrates how to add user login with Auth0 to an Android, iOS, or macOS Flutter app using the Auth0 Flutter SDK","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an Auth0 application","anchor":"configure-an-auth0-application","level":3},{"content":"Configure the callback and logout URLs","anchor":"configure-the-callback-and-logout-urls","level":3},{"content":"Android","anchor":"android","level":4},{"content":"iOS","anchor":"ios","level":4},{"content":"macOS","anchor":"macos","level":4},{"content":"Install the Auth0 Flutter SDK","anchor":"install-the-auth0-flutter-sdk","level":2},{"content":"Configure Android","anchor":"configure-android","level":2},{"content":"Configure iOS\u002FmacOS","anchor":"configure-ios-macos","level":2},{"content":"Configure the Team ID and bundle identifier","anchor":"configure-the-team-id-and-bundle-identifier","level":3},{"content":"Add the associated domain capability","anchor":"add-the-associated-domain-capability","level":3},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about Actions","icon":345,"href":"\u002Fdocs\u002Fcustomize\u002Factions"}],"showSteps":true,"requirements":["Flutter 3+","Android API 21+ and Android Studio 4+ (for Android)","iOS 13+ and Xcode 14+ (for iOS)","macOS 11+ and Xcode 14+ (for macOS)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fflutter\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"app\u002Fbuild.gradle","language":"groovy","content":"apply plugin: 'com.android.application'\n\nandroid {\n defaultConfig {\n applicationId \"com.auth0.samples\"\n minSdkVersion 21\n targetSdkVersion flutter.targetSdkVersion\n \u002F\u002F ...\n\n \u002F\u002F ---\u003E Add the next line\n manifestPlaceholders += [auth0Domain: \"__AUTH0_NAMESPACE__\", auth0Scheme: \"https\"]\n \u002F\u002F \u003C---\n }\n}"},{"filename":"main_view.dart","language":"dart","content":"import 'package:auth0_flutter\u002Fauth0_flutter.dart';\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'profile_view.dart';\n\nclass MainView extends StatefulWidget {\n const MainView({Key? key}) : super(key: key);\n\n @override\n State\u003CMainView\u003E createState() =\u003E _MainViewState();\n}\n\nclass _MainViewState extends State\u003CMainView\u003E {\n Credentials? _credentials;\n\n late Auth0 auth0;\n\n @override\n void initState() {\n super.initState();\n auth0 = Auth0('__AUTH0_NAMESPACE__', '__AUTH0_CLIENT_ID__');\n }\n\n @override\n Widget build(BuildContext context) {\n return Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: \u003CWidget\u003E[\n if (_credentials == null)\n ElevatedButton(\n onPressed: () async {\n \u002F\u002F Use a Universal Link callback URL on iOS 17.4+ \u002F macOS 14.4+\n \u002F\u002F useHTTPS is ignored on Android\n final credentials =\n await auth0.webAuthentication().login(useHTTPS: true);\n\n setState(() {\n _credentials = credentials;\n });\n },\n child: const Text(\"Log in\"))\n else\n Column(\n children: [\n ProfileView(user: _credentials!.user),\n ElevatedButton(\n onPressed: () async {\n \u002F\u002F Use a Universal Link logout URL on iOS 17.4+ \u002F macOS 14.4+\n \u002F\u002F useHTTPS is ignored on Android\n await auth0.webAuthentication().logout(useHTTPS: true);\n\n setState(() {\n _credentials = null;\n });\n },\n child: const Text(\"Log out\"))\n ],\n )\n ],\n );\n }\n}"},{"filename":"profile_view.dart","language":"dart","content":"import 'package:auth0_flutter\u002Fauth0_flutter.dart';\nimport 'package:flutter\u002Fmaterial.dart';\n\nclass ProfileView extends StatelessWidget {\n const ProfileView({Key? key, required this.user}) : super(key: key);\n\n final UserProfile user;\n\n @override\n Widget build(BuildContext context) {\n return Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: [\n if (user.name != null) Text(user.name!),\n if (user.email != null) Text(user.email!)\n ],\n );\n }\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Android, iOS, or macOS Flutter app using the Auth0 Flutter SDK","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-flutter-samples","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-flutter-samples\u002Ftree\u002Fmain\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EOn every step, if you have a \u003Ca href=\"https:\u002F\u002Fauth0.com\u002Fdocs\u002Fcustomize\u002Fcustom-domains\"\u003Ecustom domain\u003C\u002Fa\u003E, replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with your custom domain instead of the value from the settings page.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Ch2 id=\"1-configure-the-auth-0-application\"\u003E1. Configure the Auth0 application\u003C\u002Fh2\u003E\n\u003Cp\u003EOpen the settings page of your Auth0 application and add the following URLs to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E and \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E, depending on the platform you want to use.\u003C\u002Fp\u003E\n\u003Cul\u003E\n\u003Cli\u003EAndroid: \u003Ccode\u003Ecom.auth0.sample:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fandroid\u002Fcom.auth0.sample\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003Cli\u003EiOS: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003Cli\u003EmacOS: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n\u003Ch2 id=\"2-configure-the-associated-domain-i-os-mac-os-only\"\u003E2. Configure the associated domain (iOS\u002FmacOS only)\u003C\u002Fh2\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E\u003Cstrong\u003EThis following requires Xcode 15.3+ and a paid Apple Developer account\u003C\u002Fstrong\u003E. If you do not have a paid Apple Developer account, skip this step, and set the \u003Ccode\u003EuseHTTPS\u003C\u002Fcode\u003E parameter to \u003Ccode\u003Efalse\u003C\u002Fcode\u003E in the \u003Ccode\u003Elogin()\u003C\u002Fcode\u003E and \u003Ccode\u003Elogout()\u003C\u002Fcode\u003E calls at \u003Ccode\u003Elib\u002Fexample_app.dart\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Cp\u003EOpen \u003Ccode\u003Eios\u002FRunner.xcodeproj\u003C\u002Fcode\u003E (or \u003Ccode\u003Emacos\u002FRunner.xcodeproj\u003C\u002Fcode\u003E, for macOS) in Xcode and go to the settings of the \u003Cstrong\u003ERunner\u003C\u002Fstrong\u003E app target. In the \u003Cstrong\u003ESigning & Capabilities\u003C\u002Fstrong\u003E tab, change the bundle identifier from the default \u003Ccode\u003Ecom.auth0.samples.FlutterSample\u003C\u002Fcode\u003E to another value of your choosing. Then, make sure the \u003Cstrong\u003EAutomatically manage signing\u003C\u002Fstrong\u003E box is checked, and that your Apple Team is selected.\u003C\u002Fp\u003E\n\u003Cp\u003ENext, find the \u003Ccode\u003Ewebcredentials:YOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E entry under \u003Cstrong\u003EAssociated Domains\u003C\u002Fstrong\u003E, and replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with the domain of your Auth0 application.\u003C\u002Fp\u003E\n\u003Cp\u003EFinally, open the settings page of your Auth0 application, scroll to the end, and open \u003Cstrong\u003EAdvanced Settings > Device Settings\u003C\u002Fstrong\u003E. In the \u003Cstrong\u003EiOS\u003C\u002Fstrong\u003E section, set \u003Cstrong\u003ETeam ID\u003C\u002Fstrong\u003E to your \u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fhelp\u002Faccount\u002Fmanage-your-team\u002Flocate-your-team-id\u002F\"\u003EApple Team ID\u003C\u002Fa\u003E, and \u003Cstrong\u003EApp ID\u003C\u002Fstrong\u003E to the app's bundle identifier.\u003C\u002Fp\u003E\n\u003Ch2 id=\"3-run-the-app\"\u003E3. Run the app\u003C\u002Fh2\u003E\n\u003Cp\u003EUse the \u003Ca href=\"https:\u002F\u002Fdocs.flutter.dev\u002Freference\u002Fflutter-cli\"\u003EFlutter CLI\u003C\u002Fa\u003E to run the app: \u003Ccode\u003Eflutter run\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n","hidden":true}]},"ionic-angular":{"name":"ionic-angular","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-angular","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fionic.jpeg","logo_name":"ionic","logo":"ionic","title":"Ionic & Capacitor (Angular)","author":{"name":"Steve Hobbs","email":"steve.hobbs@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-angular\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Angular & Capacitor application.","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Origins","anchor":"configure-origins","level":3},{"content":"Install the Auth0 Angular SDK","anchor":"install-the-auth0-angular-sdk","level":2},{"content":"Install Capacitor plugins","anchor":"install-capacitor-plugins","level":3},{"content":"Configure your App module","anchor":"configure-your-app-module","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Handling the callback","anchor":"handling-the-callback","level":3},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Node & Npm (LTS)","XCode 12+ (for iOS)","Android Studio 4+ (for Android)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fionic-angular\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Angular & Capacitor application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-ionic-samples","path":"angular"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ionic-samples\u002Ftree\u002Fmain\u002Fangular","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EAdd the following to \u003Cstrong\u003EAllowed Origins (CORS)\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecapacitor:\u002F\u002Flocalhost, http:\u002F\u002Flocalhost\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003E\n\u003Cp\u003ECheck that mobile development environments for \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fandroid\"\u003EAndroid\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fios\"\u003EiOS\u003C\u002Fa\u003E are setup correctly. For iOS, \u003Ca href=\"https:\u002F\u002Fcocoapods.org\u002F\"\u003ECocoaPods\u003C\u002Fa\u003E must be installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm run build\n\n# to test it in iOS\nnpx cap run ios\n# to test it in Android\nnpx cap run android\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about the \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fbasics\u002Fworkflow\"\u003ECapacitor development workflow\u003C\u002Fa\u003E on Capacitor's docs site.\u003C\u002Fp\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-angular\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Angular & Capacitor application.","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Origins","anchor":"configure-origins","level":3},{"content":"Install the Auth0 Angular SDK","anchor":"install-the-auth0-angular-sdk","level":2},{"content":"Install Capacitor plugins","anchor":"install-capacitor-plugins","level":3},{"content":"Configure your App module","anchor":"configure-your-app-module","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Handling the callback","anchor":"handling-the-callback","level":3},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Node & Npm (LTS)","XCode 12+ (for iOS)","Android Studio 4+ (for Android)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fionic-angular\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Angular & Capacitor application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-ionic-samples","path":"angular"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ionic-samples\u002Ftree\u002Fmain\u002Fangular","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EAdd the following to \u003Cstrong\u003EAllowed Origins (CORS)\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecapacitor:\u002F\u002Flocalhost, http:\u002F\u002Flocalhost\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003E\n\u003Cp\u003ECheck that mobile development environments for \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fandroid\"\u003EAndroid\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fios\"\u003EiOS\u003C\u002Fa\u003E are setup correctly. For iOS, \u003Ca href=\"https:\u002F\u002Fcocoapods.org\u002F\"\u003ECocoaPods\u003C\u002Fa\u003E must be installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm run build\n\n# to test it in iOS\nnpx cap run ios\n# to test it in Android\nnpx cap run android\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about the \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fbasics\u002Fworkflow\"\u003ECapacitor development workflow\u003C\u002Fa\u003E on Capacitor's docs site.\u003C\u002Fp\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-angular\u002Finteractive","title":"Add login to your Ionic Angular with Capacitor app","description":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Angular & Capacitor application.","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Origins","anchor":"configure-allowed-origins","level":3},{"content":"Install the Auth0 Angular SDK","anchor":"install-the-auth0-angular-sdk","level":2},{"content":"Install Capacitor plugins","anchor":"install-capacitor-plugins","level":3},{"content":"Register and configure the authentication module","anchor":"register-and-configure-the-authentication-module","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Handling the login callback","anchor":"handling-the-login-callback","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show the user profile","anchor":"show-the-user-profile","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Node & Npm (LTS)","XCode 12+ (for iOS)","Android Studio 4+ (for Android)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fionic-angular\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"app.module.ts","language":"javascript","content":"\u002F\u002F Import the types from the SDK\nimport { AuthModule } from '@auth0\u002Fauth0-angular';\nimport config from '..\u002F..\u002Fcapacitor.config';\n\n\u002F\u002F ..\n\n\u002F\u002F Build the URL that Auth0 should redirect back to\nconst redirect_uri = `${config.appId}:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002F${config.appId}\u002Fcallback`;\n\n\u002F\u002F Register AuthModule with your AppModule\n@NgModule({\n declarations: [AppComponent],\n entryComponents: [],\n imports: [\n BrowserModule,\n IonicModule.forRoot(),\n AppRoutingModule,\n AuthModule.forRoot({\n domain: \"__AUTH0_NAMESPACE__\",\n clientId: \"__AUTH0_CLIENT_ID__\",\n useRefreshTokens: true,\n useRefreshTokensFallback: false,\n authorizationParams: {\n redirect_uri\n }\n }),\n ],\n providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }],\n bootstrap: [AppComponent],\n})"},{"filename":"app.component.ts","language":"javascript","content":"import { Component, OnInit, NgZone } from '@angular\u002Fcore';\nimport { AuthService } from '@auth0\u002Fauth0-angular';\nimport { mergeMap } from 'rxjs\u002Foperators';\nimport { Browser } from '@capacitor\u002Fbrowser';\nimport { App } from '@capacitor\u002Fapp';\n\nconst callbackUri = `${config.appId}:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002F${config.appId}\u002Fcallback`;\n\n@Component({\n selector: 'app-root',\n templateUrl: 'app.component.html',\n styleUrls: ['app.component.scss'],\n})\nexport class AppComponent implements OnInit {\n \u002F\u002F Import the AuthService module from the Auth0 Angular SDK\n constructor(public auth: AuthService, private ngZone: NgZone) {}\n\n ngOnInit(): void {\n \u002F\u002F Use Capacitor's App plugin to subscribe to the `appUrlOpen` event\n App.addListener('appUrlOpen', ({ url }) =\u003E {\n \u002F\u002F Must run inside an NgZone for Angular to pick up the changes\n \u002F\u002F https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fguides\u002Fangular\n ngZone.run(() =\u003E {\n if (url?.startsWith(callbackUri)) {\n \u002F\u002F If the URL is an authentication callback URL..\n if (\n url.includes('state=') &&\n (url.includes('error=') || url.includes('code='))\n ) {\n \u002F\u002F Call handleRedirectCallback and close the browser\n this.auth\n .handleRedirectCallback(url)\n .pipe(mergeMap(() =\u003E Browser.close()))\n .subscribe();\n } else {\n Browser.close();\n }\n }\n });\n });\n }\n}"},{"filename":"login-button.ts","language":"javascript","content":"import { Component, OnInit } from '@angular\u002Fcore';\nimport { AuthService } from '@auth0\u002Fauth0-angular';\nimport { Browser } from '@capacitor\u002Fbrowser';\nimport { mergeMap } from 'rxjs\u002Foperators';\n\n@Component({\n selector: 'app-login-button',\n template: `\u003Cion-button (click)=\"login()\"\u003ELogin\u003C\u002Fion-button\u003E`,\n})\nexport class LoginButtonComponent {\n constructor(public auth: AuthService) {}\n\n login() {\n this.auth\n .loginWithRedirect({\n async openUrl(url: string) {\n await Browser.open({ url, windowName: '_self' });\n }\n })\n .subscribe();\n }\n}"},{"filename":"logout-button.ts","language":"javascript","content":"import { Component, OnInit } from '@angular\u002Fcore';\nimport { AuthService } from '@auth0\u002Fauth0-angular';\nimport { Browser } from '@capacitor\u002Fbrowser';\nimport { tap } from 'rxjs\u002Foperators';\n\n\u002F\u002F Build the URL to return back to your app after logout\nconst returnTo = `${config.appId}:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002F${config.appId}\u002Fcallback`;\n\n@Component({\n selector: 'app-logout-button',\n template: `\u003Cion-button (click)=\"logout()\"\u003ELog out\u003C\u002Fion-button\u003E`,\n})\nexport class LogoutButtonComponent {\n \u002F\u002F Import the AuthService module from the Auth0 Angular SDK\n constructor(public auth: AuthService) {}\n\n logout() {\n this.auth\n .logout({ \n logoutParams: {\n returnTo,\n },\n async openUrl(url: string) {\n await Browser.open({ url });\n } \n })\n .subscribe();\n }\n}"},{"filename":"user-profile.ts","language":"javascript","content":"import { Component, OnInit } from '@angular\u002Fcore';\nimport { AuthService } from '@auth0\u002Fauth0-angular';\n\n@Component({\n selector: 'app-profile',\n template: `\n \u003Cdiv *ngIf=\"auth.user$ | async as user\"\u003E\n \u003Cion-avatar class=\"avatar\"\u003E\n \u003Cimg [src]=\"user.picture\" [alt]=\"user.name\" \u002F\u003E\n \u003C\u002Fion-avatar\u003E\n \u003Ch2\u003E{{ user.name }}\u003C\u002Fh2\u003E\n \u003Cp\u003E{{ user.email }}\u003C\u002Fp\u003E\n \u003C\u002Fdiv\u003E`,\n})\nexport class ProfileComponent {\n constructor(public auth: AuthService) {}\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Angular & Capacitor application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-ionic-samples","path":"angular"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ionic-samples\u002Ftree\u002Fmain\u002Fangular","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EAdd the following to \u003Cstrong\u003EAllowed Origins (CORS)\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecapacitor:\u002F\u002Flocalhost, http:\u002F\u002Flocalhost\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003E\n\u003Cp\u003ECheck that mobile development environments for \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fandroid\"\u003EAndroid\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fios\"\u003EiOS\u003C\u002Fa\u003E are setup correctly. For iOS, \u003Ca href=\"https:\u002F\u002Fcocoapods.org\u002F\"\u003ECocoaPods\u003C\u002Fa\u003E must be installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm run build\n\n# to test it in iOS\nnpx cap run ios\n# to test it in Android\nnpx cap run android\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about the \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fbasics\u002Fworkflow\"\u003ECapacitor development workflow\u003C\u002Fa\u003E on Capacitor's docs site.\u003C\u002Fp\u003E\n","hidden":true}]},"ionic-react":{"name":"ionic-react","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-react","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fionic.jpeg","logo_name":"ionic","logo":"ionic","title":"Ionic & Capacitor (React)","author":{"name":"Steve Hobbs","email":"steve.hobbs@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-react\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login with Auth0 to an Ionic React & Capacitor application.","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Origins","anchor":"configure-origins","level":3},{"content":"Install the Auth0 React SDK","anchor":"install-the-auth0-react-sdk","level":2},{"content":"Install Capacitor plugins","anchor":"install-capacitor-plugins","level":3},{"content":"Configure the Auth0Provider component","anchor":"configure-the-auth0provider-component","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Handling the callback","anchor":"handling-the-callback","level":3},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Node & Npm (LTS)","XCode 12+ (for iOS)","Android Studio 4+ (for Android)","React 18"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fionic-react\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Ionic React & Capacitor application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-ionic-samples","path":"react"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ionic-samples\u002Ftree\u002Fmain\u002Freact","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EAdd the following to \u003Cstrong\u003EAllowed Origins (CORS)s\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecapacitor:\u002F\u002Flocalhost, http:\u002F\u002Flocalhost\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003E\n\u003Cp\u003ECheck that mobile development environments for \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fandroid\"\u003EAndroid\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fios\"\u003EiOS\u003C\u002Fa\u003E are setup correctly. For iOS, \u003Ca href=\"https:\u002F\u002Fcocoapods.org\u002F\"\u003ECocoaPods\u003C\u002Fa\u003E must be installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm run build\n\n# to test it in iOS\nnpx cap run ios\n# to test it in Android\nnpx cap run android\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about the \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fbasics\u002Fworkflow\"\u003ECapacitor development workflow\u003C\u002Fa\u003E on Capacitor's docs site.\u003C\u002Fp\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-react\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login with Auth0 to an Ionic React & Capacitor application.","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Origins","anchor":"configure-origins","level":3},{"content":"Install the Auth0 React SDK","anchor":"install-the-auth0-react-sdk","level":2},{"content":"Install Capacitor plugins","anchor":"install-capacitor-plugins","level":3},{"content":"Configure the Auth0Provider component","anchor":"configure-the-auth0provider-component","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Handling the callback","anchor":"handling-the-callback","level":3},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Node & Npm (LTS)","XCode 12+ (for iOS)","Android Studio 4+ (for Android)","React 18"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fionic-react\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Ionic React & Capacitor application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-ionic-samples","path":"react"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ionic-samples\u002Ftree\u002Fmain\u002Freact","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EAdd the following to \u003Cstrong\u003EAllowed Origins (CORS)s\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecapacitor:\u002F\u002Flocalhost, http:\u002F\u002Flocalhost\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003E\n\u003Cp\u003ECheck that mobile development environments for \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fandroid\"\u003EAndroid\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fios\"\u003EiOS\u003C\u002Fa\u003E are setup correctly. For iOS, \u003Ca href=\"https:\u002F\u002Fcocoapods.org\u002F\"\u003ECocoaPods\u003C\u002Fa\u003E must be installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm run build\n\n# to test it in iOS\nnpx cap run ios\n# to test it in Android\nnpx cap run android\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about the \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fbasics\u002Fworkflow\"\u003ECapacitor development workflow\u003C\u002Fa\u003E on Capacitor's docs site.\u003C\u002Fp\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-react\u002Finteractive","title":"Add login to your Ionic React with Capacitor app","description":"This tutorial demonstrates how to add user login with Auth0 to an Ionic React & Capacitor application.","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Origins","anchor":"configure-allowed-origins","level":3},{"content":"Install the Auth0 React SDK","anchor":"install-the-auth0-react-sdk","level":2},{"content":"Install Capacitor plugins","anchor":"install-capacitor-plugins","level":3},{"content":"Configure the Auth0Provider component","anchor":"configure-the-auth0provider-component","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Handle the login callback","anchor":"handle-the-login-callback","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show the user profile","anchor":"show-the-user-profile","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Node & Npm (LTS)","XCode 12+ (for iOS)","Android Studio 4+ (for Android)","React 18"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fionic-react\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"index.tsx","language":"javascript","content":"import React from 'react';\nimport { createRoot } from 'react-dom\u002Fclient';\nimport { Auth0Provider } from '@auth0\u002Fauth0-react';\nimport App from '.\u002FApp';\n\nconst root = createRoot(document.getElementById('root'));\n\nroot.render(\n \u003CAuth0Provider\n domain=\"__AUTH0_NAMESPACE__\"\n clientId=\"__AUTH0_CLIENT_ID__\"\n useRefreshTokens={true}\n useRefreshTokensFallback={false}\n authorizationParams={{\n redirect_uri: \"YOUR_PACKAGE_ID:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002FYOUR_PACKAGE_ID\u002Fcallback\"\n }}\n \u003E\n \u003CApp \u002F\u003E\n \u003C\u002FAuth0Provider\u003E\n);"},{"filename":"login-button.tsx","language":"javascript","content":"import { useAuth0 } from '@auth0\u002Fauth0-react';\nimport { Browser } from '@capacitor\u002Fbrowser';\nimport { IonButton } from '@ionic\u002Freact';\n\nconst LoginButton: React.FC = () =\u003E {\n const { loginWithRedirect } = useAuth0();\n\n const login = async () =\u003E {\n await loginWithRedirect({\n async openUrl(url) {\n \u002F\u002F Redirect using Capacitor's Browser plugin\n await Browser.open({\n url,\n windowName: \"_self\"\n });\n }\n });\n };\n\n return \u003CIonButton onClick={login}\u003ELog in\u003C\u002FIonButton\u003E;\n};\n\nexport default LoginButton;"},{"filename":"logout-button.tsx","language":"javascript","content":"import { useAuth0 } from '@auth0\u002Fauth0-react';\nimport { Browser } from '@capacitor\u002Fbrowser';\nimport { IonButton } from '@ionic\u002Freact';\n\n\u002F\u002F This should reflect the URL added earlier to your \"Allowed Logout URLs\" setting\n\u002F\u002F in the Auth0 dashboard.\nconst logoutUri = 'YOUR_PACKAGE_ID:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002FYOUR_PACKAGE_ID\u002Fcallback';\n\nconst LogoutButton: React.FC = () =\u003E {\n const { logout } = useAuth0();\n\n const doLogout = async () =\u003E {\n await logout({\n logoutParams: {\n returnTo: logoutUri\n },\n async openUrl(url) {\n \u002F\u002F Redirect using Capacitor's Browser plugin\n await Browser.open({\n url,\n windowName: \"_self\"\n });\n }\n });\n };\n\n return \u003CIonButton onClick={doLogout}\u003ELog out\u003C\u002FIonButton\u003E;\n};\n\nexport default LogoutButton;"},{"filename":"app.tsx","language":"javascript","content":"\u002F\u002F Import Capacitor's app and browser plugins, giving us access to `addListener` and `appUrlOpen`,\n\u002F\u002F as well as the bits needed for Auth0 and React\nimport { App as CapApp } from '@capacitor\u002Fapp';\nimport { Browser } from '@capacitor\u002Fbrowser';\nimport { useEffect } from 'react';\nimport { useAuth0 } from '@auth0\u002Fauth0-react';\n\n\u002F\u002F ...\n\nconst App: React.FC = () =\u003E {\n \u002F\u002F Get the callback handler from the Auth0 React hook\n const { handleRedirectCallback } = useAuth0();\n\n useEffect(() =\u003E {\n \u002F\u002F Handle the 'appUrlOpen' event and call `handleRedirectCallback`\n CapApp.addListener('appUrlOpen', async ({ url }) =\u003E {\n if (url.includes('state') && (url.includes('code') || url.includes('error'))) {\n await handleRedirectCallback(url);\n }\n \u002F\u002F No-op on Android\n await Browser.close();\n });\n }, [handleRedirectCallback]);\n\n \u002F\u002F ..\n};"},{"filename":"user-profile.tsx","language":"javascript","content":"import { useAuth0 } from '@auth0\u002Fauth0-react';\n\nconst Profile: React.FC = () =\u003E {\n const { user, isLoading } = useAuth0();\n\n \u002F\u002F If the SDK is not ready, or a user is not authenticated, exit.\n if (isLoading || !user) return null;\n\n return (\n \u003Cdiv\u003E\n \u003Cimg src={user.picture} alt={user.name} \u002F\u003E\n \u003Ch2\u003E{user.name}\u003C\u002Fh2\u003E\n \u003Cp\u003E{user.email}\u003C\u002Fp\u003E\n \u003C\u002Fdiv\u003E\n );\n};\n\nexport default Profile;"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Ionic React & Capacitor application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-ionic-samples","path":"react"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ionic-samples\u002Ftree\u002Fmain\u002Freact","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EAdd the following to \u003Cstrong\u003EAllowed Origins (CORS)s\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecapacitor:\u002F\u002Flocalhost, http:\u002F\u002Flocalhost\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003E\n\u003Cp\u003ECheck that mobile development environments for \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fandroid\"\u003EAndroid\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fios\"\u003EiOS\u003C\u002Fa\u003E are setup correctly. For iOS, \u003Ca href=\"https:\u002F\u002Fcocoapods.org\u002F\"\u003ECocoaPods\u003C\u002Fa\u003E must be installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm run build\n\n# to test it in iOS\nnpx cap run ios\n# to test it in Android\nnpx cap run android\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about the \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fbasics\u002Fworkflow\"\u003ECapacitor development workflow\u003C\u002Fa\u003E on Capacitor's docs site.\u003C\u002Fp\u003E\n","hidden":true}]},"ionic-vue":{"name":"ionic-vue","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-vue","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fionic.jpeg","logo_name":"ionic","logo":"ionic","title":"Ionic & Capacitor (Vue)","author":{"name":"Steve Hobbs","email":"steve.hobbs@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-vue\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Vue & Capacitor application.","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Origins","anchor":"configure-origins","level":3},{"content":"Install the Auth0 Vue SDK","anchor":"install-the-auth0-vue-sdk","level":2},{"content":"Install Capacitor plugins","anchor":"install-capacitor-plugins","level":3},{"content":"Configure the createAuth0 plugin","anchor":"configure-the-createauth0-plugin","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Handling the callback","anchor":"handling-the-callback","level":3},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Node & Npm (LTS)","XCode 12+ (for iOS)","Android Studio 4+ (for Android)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fionic-vue\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Vue & Capacitor application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-ionic-samples","path":"vue"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ionic-samples\u002Ftree\u002Fmain\u002Fvue","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EAdd the following to \u003Cstrong\u003EAllowed Origins (CORS)s\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecapacitor:\u002F\u002Flocalhost, http:\u002F\u002Flocalhost\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003E\n\u003Cp\u003ECheck that mobile development environments for \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fandroid\"\u003EAndroid\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fios\"\u003EiOS\u003C\u002Fa\u003E are setup correctly. For iOS, \u003Ca href=\"https:\u002F\u002Fcocoapods.org\u002F\"\u003ECocoaPods\u003C\u002Fa\u003E must be installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm run build\n\n# to test it in iOS\nnpx cap run ios\n\n# to test it in Android\nnpx cap run android\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about the \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fbasics\u002Fworkflow\"\u003ECapacitor development workflow\u003C\u002Fa\u003E on Capacitor's docs site.\u003C\u002Fp\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-vue\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Vue & Capacitor application.","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Origins","anchor":"configure-origins","level":3},{"content":"Install the Auth0 Vue SDK","anchor":"install-the-auth0-vue-sdk","level":2},{"content":"Install Capacitor plugins","anchor":"install-capacitor-plugins","level":3},{"content":"Configure the createAuth0 plugin","anchor":"configure-the-createauth0-plugin","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Handling the callback","anchor":"handling-the-callback","level":3},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Node & Npm (LTS)","XCode 12+ (for iOS)","Android Studio 4+ (for Android)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fionic-vue\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Vue & Capacitor application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-ionic-samples","path":"vue"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ionic-samples\u002Ftree\u002Fmain\u002Fvue","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EAdd the following to \u003Cstrong\u003EAllowed Origins (CORS)s\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecapacitor:\u002F\u002Flocalhost, http:\u002F\u002Flocalhost\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003E\n\u003Cp\u003ECheck that mobile development environments for \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fandroid\"\u003EAndroid\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fios\"\u003EiOS\u003C\u002Fa\u003E are setup correctly. For iOS, \u003Ca href=\"https:\u002F\u002Fcocoapods.org\u002F\"\u003ECocoaPods\u003C\u002Fa\u003E must be installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm run build\n\n# to test it in iOS\nnpx cap run ios\n\n# to test it in Android\nnpx cap run android\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about the \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fbasics\u002Fworkflow\"\u003ECapacitor development workflow\u003C\u002Fa\u003E on Capacitor's docs site.\u003C\u002Fp\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fionic-vue\u002Finteractive","title":"Add login to your Ionic Vue with Capacitor app","description":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Vue & Capacitor application.","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Origins","anchor":"configure-allowed-origins","level":3},{"content":"Install the Auth0 Vue SDK","anchor":"install-the-auth0-vue-sdk","level":2},{"content":"Install Capacitor plugins","anchor":"install-capacitor-plugins","level":3},{"content":"Configure the createAuth0 plugin","anchor":"configure-the-createauth0-plugin","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Handle the login callback","anchor":"handle-the-login-callback","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show the user profile","anchor":"show-the-user-profile","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Node & Npm (LTS)","XCode 12+ (for iOS)","Android Studio 4+ (for Android)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fionic-vue\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"main.ts","language":"javascript","content":"import { createApp } from \"vue\";\nimport App from \".\u002FApp.vue\";\nimport router from \".\u002Frouter\";\n\nimport { IonicVue } from \"@ionic\u002Fvue\";\n\nimport { createAuth0 } from \"@auth0\u002Fauth0-vue\";\nimport config from \".\u002Fauth.config\";\n\n\u002F\u002F ..\n\n\u002F\u002F Build the URL that Auth0 should redirect back to\nconst redirect_uri = `${config.appId}:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002F${config.appId}\u002Fcallback`;\n\nconst app = createApp(App).use(IonicVue).use(router);\n\napp.use(\n createAuth0({\n domain: \"__AUTH0_NAMESPACE__\",\n clientId: \"__AUTH0_CLIENT_ID__\",\n useRefreshTokens: true,\n useRefreshTokensFallback: false,\n authorizationParams: {\n redirect_uri\n }\n })\n);\n\nrouter.isReady().then(() =\u003E {\n app.mount(\"#app\");\n});"},{"filename":"LoginButton.vue","language":"html","content":"\u003Ctemplate\u003E\n \u003Cion-button @click=\"login\"\u003ELog in\u003C\u002Fion-button\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript lang=\"ts\"\u003E\nimport { defineComponent } from \"vue\";\nimport { IonApp, IonRouterOutlet } from \"@ionic\u002Fvue\";\n\nimport { useAuth0 } from \"@auth0\u002Fauth0-vue\";\nimport { App as CapApp } from \"@capacitor\u002Fapp\";\nimport { Browser } from \"@capacitor\u002Fbrowser\";\n\nexport default defineComponent({\n components: {\n IonButton,\n },\n setup() {\n const { loginWithRedirect } = useAuth0();\n\n const login = async () =\u003E {\n await loginWithRedirect({\n openUrl: (url: string) =\u003E\n Browser.open({\n url,\n windowName: \"_self\",\n }),\n });\n };\n\n return { login };\n },\n});\n\u003C\u002Fscript\u003E"},{"filename":"LogoutButton.vue","language":"html","content":"\u003Ctemplate\u003E\n \u003Cion-button @click=\"onLogout\"\u003ELog out\u003C\u002Fion-button\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript lang=\"ts\"\u003E\nimport { defineComponent } from \"vue\";\nimport { useAuth0 } from \"@auth0\u002Fauth0-vue\";\nimport { Browser } from \"@capacitor\u002Fbrowser\";\nimport { IonButton } from \"@ionic\u002Fvue\";\nimport { callbackUri } from \"..\u002Fauth.config\";\n\nexport default defineComponent({\n components: {\n IonButton,\n },\n setup() {\n const { logout } = useAuth0();\n\n const onLogout = async () =\u003E {\n await logout({\n logoutParams: {\n returnTo: callbackUri,\n },\n openUrl: (url: string) =\u003E\n Browser.open({\n url,\n windowName: \"_self\",\n }),\n });\n };\n\n return {\n onLogout,\n };\n },\n});\n\u003C\u002Fscript\u003E"},{"filename":"App.vue","language":"html","content":"\u003Ctemplate\u003E\n \u003Cion-app\u003E\n \u003Cion-router-outlet \u002F\u003E\n \u003C\u002Fion-app\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript lang=\"ts\"\u003E\nimport { defineComponent } from \"vue\";\nimport { IonApp, IonRouterOutlet } from \"@ionic\u002Fvue\";\n\n\u002F\u002F Import Capacitor's app and browser plugins, giving us access to `addListener` and `appUrlOpen`,\n\u002F\u002F as well as the bits needed for Auth0 and Vue\nimport { useAuth0 } from \"@auth0\u002Fauth0-vue\";\nimport { App as CapApp } from \"@capacitor\u002Fapp\";\nimport { Browser } from \"@capacitor\u002Fbrowser\";\n\nexport default defineComponent({\n name: \"App\",\n components: {\n IonApp,\n IonRouterOutlet,\n },\n setup() {\n const { handleRedirectCallback } = useAuth0();\n\n CapApp.addListener(\"appUrlOpen\", async ({ url }) =\u003E {\n if (\n url.includes(\"state\") &&\n (url.includes(\"code\") || url.includes(\"error\"))\n ) {\n await handleRedirectCallback(url);\n }\n \u002F\u002F No-op on Android\n await Browser.close();\n });\n },\n});\n\u003C\u002Fscript\u003E"},{"filename":"UserProfile.vue","language":"html","content":"\u003Ctemplate\u003E\n \u003Cdiv v-if=\"isLoading\"\u003ELoading ...\u003C\u002Fdiv\u003E\n \u003Cdiv v-else-if=\"!user\"\u003E\u003C\u002Fdiv\u003E\n \u003Cdiv v-else class=\"profile-container\"\u003E\n \u003Cion-avatar\u003E\n \u003Cimg :src=\"user.picture\" :alt=\"user.name\" \u002F\u003E\n \u003C\u002Fion-avatar\u003E\n \u003Ch2\u003E{{ user.name }}\u003C\u002Fh2\u003E\n \u003Cp\u003E{{ user.email }}\u003C\u002Fp\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript lang=\"ts\"\u003E\nimport { defineComponent } from \"vue\";\nimport { useAuth0 } from \"@auth0\u002Fauth0-vue\";\nimport { IonAvatar } from \"@ionic\u002Fvue\";\n\nexport default defineComponent({\n components: {\n IonAvatar,\n },\n setup() {\n const { user, isLoading } = useAuth0();\n\n return { user, isLoading };\n },\n});\n\u003C\u002Fscript\u003E"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Ionic Vue & Capacitor application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-ionic-samples","path":"vue"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ionic-samples\u002Ftree\u002Fmain\u002Fvue","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003EAdd the following URL to \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fcapacitor\u002Fcom.auth0.samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EAdd the following to \u003Cstrong\u003EAllowed Origins (CORS)s\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecapacitor:\u002F\u002Flocalhost, http:\u002F\u002Flocalhost\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003E\n\u003Cp\u003ECheck that mobile development environments for \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fandroid\"\u003EAndroid\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fios\"\u003EiOS\u003C\u002Fa\u003E are setup correctly. For iOS, \u003Ca href=\"https:\u002F\u002Fcocoapods.org\u002F\"\u003ECocoaPods\u003C\u002Fa\u003E must be installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm run build\n\n# to test it in iOS\nnpx cap run ios\n\n# to test it in Android\nnpx cap run android\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about the \u003Ca href=\"https:\u002F\u002Fcapacitorjs.com\u002Fdocs\u002Fbasics\u002Fworkflow\"\u003ECapacitor development workflow\u003C\u002Fa\u003E on Capacitor's docs site.\u003C\u002Fp\u003E\n","hidden":true}]},"ios-swift":{"name":"ios-swift","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fios-swift","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fios.png","logo_name":undefined,"logo":"apple","title":"iOS \u002F macOS","author":{"name":"Rita Zerrizuela","email":"rita.zerrizuela@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":true,"sdk":{"name":"Auth0.swift","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002FAuth0.swift","logo":"apple"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fios-swift\u002F01-login","title":"Login","description":"This guide demonstrates how to integrate Auth0 with any new or existing iOS \u002F macOS app using the Auth0.swift SDK.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure the callback and logout URLs","anchor":"configure-the-callback-and-logout-urls","level":3},{"content":"iOS","anchor":"ios","level":4},{"content":"macOS","anchor":"macos","level":4},{"content":"Configure the associated domain","anchor":"configure-the-associated-domain","level":3},{"content":"Configure the Team ID and bundle identifier","anchor":"configure-the-team-id-and-bundle-identifier","level":4},{"content":"Add the associated domain capability","anchor":"add-the-associated-domain-capability","level":4},{"content":"Install the SDK","anchor":"install-the-sdk","level":2},{"content":"Using the Swift Package Manager","anchor":"using-the-swift-package-manager","level":3},{"content":"Using Cocoapods","anchor":"using-cocoapods","level":3},{"content":"Using Carthage","anchor":"using-carthage","level":3},{"content":"Configure the SDK","anchor":"configure-the-sdk","level":2},{"content":"Login","anchor":"login","level":2},{"content":"Logout","anchor":"logout","level":2},{"content":"Access User Profile Information","anchor":"access-user-profile-information","level":2},{"content":"What's Next?","anchor":"what-s-next-","level":2}],"nextSteps":[],"showSteps":true,"requirements":["iOS 13+ or macOS 11+","Xcode 14.x"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fios-swift\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This guide demonstrates how to integrate Auth0 with any new or existing iOS \u002F macOS app using the Auth0.swift SDK.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-ios-swift-sample","path":"Sample-01"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ios-swift-sample\u002Ftree\u002Fmaster\u002FSample-01","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EOn every step, if you have a \u003Ca href=\"https:\u002F\u002Fauth0.com\u002Fdocs\u002Fcustomize\u002Fcustom-domains\"\u003Ecustom domain\u003C\u002Fa\u003E, replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with your custom domain instead of the value from the settings page.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Ch2 id=\"1-configure-the-associated-domain\"\u003E1. Configure the associated domain\u003C\u002Fh2\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E\u003Cstrong\u003EThis requires Xcode 15.3+ and a paid Apple Developer account\u003C\u002Fstrong\u003E. If you do not have a paid Apple Developer account, skip this step, and comment out the two \u003Ccode\u003EuseHTTPS()\u003C\u002Fcode\u003E calls in \u003Ccode\u003EMainView.swift\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Cp\u003EOpen \u003Ccode\u003ESwiftSample.xcodeproj\u003C\u002Fcode\u003E in Xcode and go to the settings of the app target you want to run. There are two app targets available: \u003Cstrong\u003ESwiftSample (iOS)\u003C\u002Fstrong\u003E and \u003Cstrong\u003ESwiftSample (macOS)\u003C\u002Fstrong\u003E. Change the bundle identifier from the default \u003Ccode\u003Ecom.auth0.samples.SwiftSample\u003C\u002Fcode\u003E to another value of your choosing. Then, make sure the \u003Cstrong\u003EAutomatically manage signing\u003C\u002Fstrong\u003E box is checked, and that your Apple Team is selected.\u003C\u002Fp\u003E\n\u003Cp\u003ENext, go to the \u003Cstrong\u003ESigning & Capabilities\u003C\u002Fstrong\u003E tab of the app's target settings. Find the \u003Ccode\u003Ewebcredentials:YOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E entry under \u003Cstrong\u003EAssociated Domains\u003C\u002Fstrong\u003E, and replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with the domain of your Auth0 application.\u003C\u002Fp\u003E\n\u003Cp\u003EFinally, open the settings page of your Auth0 application, scroll to the end, and open \u003Cstrong\u003EAdvanced Settings > Device Settings\u003C\u002Fstrong\u003E. In the \u003Cstrong\u003EiOS\u003C\u002Fstrong\u003E section, set \u003Cstrong\u003ETeam ID\u003C\u002Fstrong\u003E to your \u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fhelp\u002Faccount\u002Fmanage-your-team\u002Flocate-your-team-id\u002F\"\u003EApple Team ID\u003C\u002Fa\u003E, and \u003Cstrong\u003EApp ID\u003C\u002Fstrong\u003E to the app's bundle identifier.\u003C\u002Fp\u003E\n\u003Ch2 id=\"2-configure-the-auth-0-application\"\u003E2. Configure the Auth0 application\u003C\u002Fh2\u003E\n\u003Cp\u003EOpen the settings page of your Auth0 application and add the following URLs to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E and \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E, depending on the app target you want to run.\u003C\u002Fp\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Cstrong\u003ESwiftSample (iOS)\u003C\u002Fstrong\u003E: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003Cli\u003E\u003Cstrong\u003ESwiftSample (macOS)\u003C\u002Fstrong\u003E: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fios-swift\u002F01-login","title":"Login","description":"This guide demonstrates how to integrate Auth0 with any new or existing iOS \u002F macOS app using the Auth0.swift SDK.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure the callback and logout URLs","anchor":"configure-the-callback-and-logout-urls","level":3},{"content":"iOS","anchor":"ios","level":4},{"content":"macOS","anchor":"macos","level":4},{"content":"Configure the associated domain","anchor":"configure-the-associated-domain","level":3},{"content":"Configure the Team ID and bundle identifier","anchor":"configure-the-team-id-and-bundle-identifier","level":4},{"content":"Add the associated domain capability","anchor":"add-the-associated-domain-capability","level":4},{"content":"Install the SDK","anchor":"install-the-sdk","level":2},{"content":"Using the Swift Package Manager","anchor":"using-the-swift-package-manager","level":3},{"content":"Using Cocoapods","anchor":"using-cocoapods","level":3},{"content":"Using Carthage","anchor":"using-carthage","level":3},{"content":"Configure the SDK","anchor":"configure-the-sdk","level":2},{"content":"Login","anchor":"login","level":2},{"content":"Logout","anchor":"logout","level":2},{"content":"Access User Profile Information","anchor":"access-user-profile-information","level":2},{"content":"What's Next?","anchor":"what-s-next-","level":2}],"nextSteps":[],"showSteps":true,"requirements":["iOS 13+ or macOS 11+","Xcode 14.x"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fios-swift\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This guide demonstrates how to integrate Auth0 with any new or existing iOS \u002F macOS app using the Auth0.swift SDK.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-ios-swift-sample","path":"Sample-01"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ios-swift-sample\u002Ftree\u002Fmaster\u002FSample-01","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EOn every step, if you have a \u003Ca href=\"https:\u002F\u002Fauth0.com\u002Fdocs\u002Fcustomize\u002Fcustom-domains\"\u003Ecustom domain\u003C\u002Fa\u003E, replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with your custom domain instead of the value from the settings page.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Ch2 id=\"1-configure-the-associated-domain\"\u003E1. Configure the associated domain\u003C\u002Fh2\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E\u003Cstrong\u003EThis requires Xcode 15.3+ and a paid Apple Developer account\u003C\u002Fstrong\u003E. If you do not have a paid Apple Developer account, skip this step, and comment out the two \u003Ccode\u003EuseHTTPS()\u003C\u002Fcode\u003E calls in \u003Ccode\u003EMainView.swift\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Cp\u003EOpen \u003Ccode\u003ESwiftSample.xcodeproj\u003C\u002Fcode\u003E in Xcode and go to the settings of the app target you want to run. There are two app targets available: \u003Cstrong\u003ESwiftSample (iOS)\u003C\u002Fstrong\u003E and \u003Cstrong\u003ESwiftSample (macOS)\u003C\u002Fstrong\u003E. Change the bundle identifier from the default \u003Ccode\u003Ecom.auth0.samples.SwiftSample\u003C\u002Fcode\u003E to another value of your choosing. Then, make sure the \u003Cstrong\u003EAutomatically manage signing\u003C\u002Fstrong\u003E box is checked, and that your Apple Team is selected.\u003C\u002Fp\u003E\n\u003Cp\u003ENext, go to the \u003Cstrong\u003ESigning & Capabilities\u003C\u002Fstrong\u003E tab of the app's target settings. Find the \u003Ccode\u003Ewebcredentials:YOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E entry under \u003Cstrong\u003EAssociated Domains\u003C\u002Fstrong\u003E, and replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with the domain of your Auth0 application.\u003C\u002Fp\u003E\n\u003Cp\u003EFinally, open the settings page of your Auth0 application, scroll to the end, and open \u003Cstrong\u003EAdvanced Settings > Device Settings\u003C\u002Fstrong\u003E. In the \u003Cstrong\u003EiOS\u003C\u002Fstrong\u003E section, set \u003Cstrong\u003ETeam ID\u003C\u002Fstrong\u003E to your \u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fhelp\u002Faccount\u002Fmanage-your-team\u002Flocate-your-team-id\u002F\"\u003EApple Team ID\u003C\u002Fa\u003E, and \u003Cstrong\u003EApp ID\u003C\u002Fstrong\u003E to the app's bundle identifier.\u003C\u002Fp\u003E\n\u003Ch2 id=\"2-configure-the-auth-0-application\"\u003E2. Configure the Auth0 application\u003C\u002Fh2\u003E\n\u003Cp\u003EOpen the settings page of your Auth0 application and add the following URLs to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E and \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E, depending on the app target you want to run.\u003C\u002Fp\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Cstrong\u003ESwiftSample (iOS)\u003C\u002Fstrong\u003E: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003Cli\u003E\u003Cstrong\u003ESwiftSample (macOS)\u003C\u002Fstrong\u003E: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fios-swift\u002Finteractive","title":"Add Login to your iOS or macOS app","description":"This guide demonstrates how to add authentication and gain access to user profile information in any iOS \u002F macOS app using the Auth0.swift SDK.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an Auth0 application","anchor":"configure-an-auth0-application","level":3},{"content":"Configure callback and logout URLs","anchor":"configure-callback-and-logout-urls","level":3},{"content":"iOS","anchor":"ios","level":4},{"content":"macOS","anchor":"macos","level":4},{"content":"Configure the associated domain","anchor":"configure-the-associated-domain","level":3},{"content":"Configure the Team ID and bundle identifier","anchor":"configure-the-team-id-and-bundle-identifier","level":4},{"content":"Add the associated domain capability","anchor":"add-the-associated-domain-capability","level":4},{"content":"Install the SDK","anchor":"install-the-sdk","level":2},{"content":"Using the Swift Package Manager","anchor":"using-the-swift-package-manager","level":3},{"content":"Using Cocoapods","anchor":"using-cocoapods","level":3},{"content":"Using Carthage","anchor":"using-carthage","level":3},{"content":"Configure the SDK","anchor":"configure-the-sdk","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Access user profile information","anchor":"access-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["iOS 13+ or macOS 11+","Xcode 14.x"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fios-swift\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"Auth0.plist","language":"xml","content":"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?\u003E\n\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\"\u003E\n\u003Cplist version=\"1.0\"\u003E\n\u003Cdict\u003E\n \u003Ckey\u003EClientId\u003C\u002Fkey\u003E\n \u003Cstring\u003E__AUTH0_CLIENT_ID__\u003C\u002Fstring\u003E\n \u003Ckey\u003EDomain\u003C\u002Fkey\u003E\n \u003Cstring\u003E__AUTH0_NAMESPACE__\u003C\u002Fstring\u003E\n\u003C\u002Fdict\u003E\n\u003C\u002Fplist\u003E"},{"filename":"MainView.swift","language":"swift","content":"import SwiftUI\nimport Auth0\n\nstruct MainView: View {\n @State var user: User?\n\n var body: some View {\n if let user = self.user {\n VStack {\n ProfileView(user: user)\n Button(\"Logout\", action: self.logout)\n }\n } else {\n Button(\"Login\", action: self.login)\n }\n }\n}\n\nextension MainView {\n func login() {\n Auth0\n .webAuth()\n .useHTTPS() \u002F\u002F Use a Universal Link callback URL on iOS 17.4+ \u002F macOS 14.4+\n .start { result in\n switch result {\n case .success(let credentials):\n self.user = User(from: credentials.idToken)\n case .failure(let error):\n print(\"Failed with: \\(error)\")\n }\n }\n }\n\n func logout() {\n Auth0\n .webAuth()\n .useHTTPS() \u002F\u002F Use a Universal Link logout URL on iOS 17.4+ \u002F macOS 14.4+\n .clearSession { result in\n switch result {\n case .success:\n self.user = nil\n case .failure(let error):\n print(\"Failed with: \\(error)\")\n }\n }\n }\n}"},{"filename":"ProfileView.swift","language":"swift","content":"import SwiftUI\n\nstruct ProfileView: View {\n let user: User\n\n var body: some View {\n VStack {\n AsyncImage(url: URL(string: user.picture))\n Text(\"Email: \\(user.email)\")\n }\n }\n}"},{"filename":"User.swift","language":"swift","content":"import JWTDecode\n\nstruct User {\n let id: String\n let email: String\n let picture: String\n}\n\nextension User {\n init?(from idToken: String) {\n guard let jwt = try? decode(jwt: idToken),\n let id = jwt.subject,\n let email = jwt[\"email\"].string,\n let picture = jwt[\"picture\"].string\n else { return nil }\n self.id = id\n self.email = email\n self.picture = picture\n }\n}"}],"interactive":true,"downloadBoxDescription":"This guide demonstrates how to add authentication and gain access to user profile information in any iOS \u002F macOS app using the Auth0.swift SDK.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-ios-swift-sample","path":"Sample-01"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-ios-swift-sample\u002Ftree\u002Fmaster\u002FSample-01","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003EOn every step, if you have a \u003Ca href=\"https:\u002F\u002Fauth0.com\u002Fdocs\u002Fcustomize\u002Fcustom-domains\"\u003Ecustom domain\u003C\u002Fa\u003E, replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with your custom domain instead of the value from the settings page.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Ch2 id=\"1-configure-the-associated-domain\"\u003E1. Configure the associated domain\u003C\u002Fh2\u003E\n\u003Cblockquote\u003E\n\u003Cp\u003E\u003Cstrong\u003EThis requires Xcode 15.3+ and a paid Apple Developer account\u003C\u002Fstrong\u003E. If you do not have a paid Apple Developer account, skip this step, and comment out the two \u003Ccode\u003EuseHTTPS()\u003C\u002Fcode\u003E calls in \u003Ccode\u003EMainView.swift\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fblockquote\u003E\n\u003Cp\u003EOpen \u003Ccode\u003ESwiftSample.xcodeproj\u003C\u002Fcode\u003E in Xcode and go to the settings of the app target you want to run. There are two app targets available: \u003Cstrong\u003ESwiftSample (iOS)\u003C\u002Fstrong\u003E and \u003Cstrong\u003ESwiftSample (macOS)\u003C\u002Fstrong\u003E. Change the bundle identifier from the default \u003Ccode\u003Ecom.auth0.samples.SwiftSample\u003C\u002Fcode\u003E to another value of your choosing. Then, make sure the \u003Cstrong\u003EAutomatically manage signing\u003C\u002Fstrong\u003E box is checked, and that your Apple Team is selected.\u003C\u002Fp\u003E\n\u003Cp\u003ENext, go to the \u003Cstrong\u003ESigning & Capabilities\u003C\u002Fstrong\u003E tab of the app's target settings. Find the \u003Ccode\u003Ewebcredentials:YOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E entry under \u003Cstrong\u003EAssociated Domains\u003C\u002Fstrong\u003E, and replace the \u003Ccode\u003EYOUR_AUTH0_DOMAIN\u003C\u002Fcode\u003E placeholder with the domain of your Auth0 application.\u003C\u002Fp\u003E\n\u003Cp\u003EFinally, open the settings page of your Auth0 application, scroll to the end, and open \u003Cstrong\u003EAdvanced Settings > Device Settings\u003C\u002Fstrong\u003E. In the \u003Cstrong\u003EiOS\u003C\u002Fstrong\u003E section, set \u003Cstrong\u003ETeam ID\u003C\u002Fstrong\u003E to your \u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fhelp\u002Faccount\u002Fmanage-your-team\u002Flocate-your-team-id\u002F\"\u003EApple Team ID\u003C\u002Fa\u003E, and \u003Cstrong\u003EApp ID\u003C\u002Fstrong\u003E to the app's bundle identifier.\u003C\u002Fp\u003E\n\u003Ch2 id=\"2-configure-the-auth-0-application\"\u003E2. Configure the Auth0 application\u003C\u002Fh2\u003E\n\u003Cp\u003EOpen the settings page of your Auth0 application and add the following URLs to \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E and \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E, depending on the app target you want to run.\u003C\u002Fp\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Cstrong\u003ESwiftSample (iOS)\u003C\u002Fstrong\u003E: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fios\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003Cli\u003E\u003Cstrong\u003ESwiftSample (macOS)\u003C\u002Fstrong\u003E: \u003Ccode\u003Ehttps:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback,YOUR_BUNDLE_IDENTIFIER:\u002F\u002FYOUR_AUTH0_DOMAIN\u002Fmacos\u002FYOUR_BUNDLE_IDENTIFIER\u002Fcallback\u003C\u002Fcode\u003E\u003C\u002Fli\u003E\n\u003C\u002Ful\u003E\n","hidden":true}]},"maui":{"name":"maui","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fmaui","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fxamarin.png","logo_name":undefined,"logo":"dotnet-platform","title":"MAUI","author":{"name":"Frederik Prijck","email":"frederik.prijck@okta.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-oidc-client-net","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-oidc-client-net","logo":"dotnet"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fmaui\u002F01-login","title":"Add login to your MAUI application","description":"This tutorial demonstrates how to add user login with Auth0 to a .NET MAUI application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 SDK","anchor":"install-the-auth0-sdk","level":2},{"content":"Platform specific configuration","anchor":"platform-specific-configuration","level":2},{"content":"Android","anchor":"android","level":3},{"content":"Windows","anchor":"windows","level":3},{"content":"Instantiate the Auth0Client","anchor":"instantiate-the-auth0client","level":2},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Visual Studio 2022+ or Visual Studio for Mac",".NET6+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fmaui\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to a .NET MAUI application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-maui-samples","path":"Sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-maui-samples\u002Ftree\u002Fmaster\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Emyapp:\u002F\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Emyapp:\u002F\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it \u003Cstrong\u003Eon Windows\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the Auth0MauiApp.sln in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2022\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), ensure to select your target device.\nYou can also start the application using the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it on \u003Cstrong\u003EmacOS\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the Auth0MauiApp.sln in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002Fmac\u002F\"\u003EVisual Studio for Mac\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the play button), ensure to select your target device. You can also start the application using the \u003Cstrong\u003ERun | Start Debugging\u003C\u002Fstrong\u003E option from the application menu\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fmaui\u002F01-login","title":"Add login to your MAUI application","description":"This tutorial demonstrates how to add user login with Auth0 to a .NET MAUI application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 SDK","anchor":"install-the-auth0-sdk","level":2},{"content":"Platform specific configuration","anchor":"platform-specific-configuration","level":2},{"content":"Android","anchor":"android","level":3},{"content":"Windows","anchor":"windows","level":3},{"content":"Instantiate the Auth0Client","anchor":"instantiate-the-auth0client","level":2},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Visual Studio 2022+ or Visual Studio for Mac",".NET6+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fmaui\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to a .NET MAUI application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-maui-samples","path":"Sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-maui-samples\u002Ftree\u002Fmaster\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Emyapp:\u002F\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Emyapp:\u002F\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it \u003Cstrong\u003Eon Windows\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the Auth0MauiApp.sln in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2022\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), ensure to select your target device.\nYou can also start the application using the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it on \u003Cstrong\u003EmacOS\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the Auth0MauiApp.sln in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002Fmac\u002F\"\u003EVisual Studio for Mac\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the play button), ensure to select your target device. You can also start the application using the \u003Cstrong\u003ERun | Start Debugging\u003C\u002Fstrong\u003E option from the application menu\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fmaui\u002Finteractive","title":"Add login to your .NET MAUI application","description":"This tutorial demonstrates how to add user login with Auth0 to a .NET MAUI application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 SDK","anchor":"install-the-auth0-sdk","level":2},{"content":"Platform specific configuration","anchor":"platform-specific-configuration","level":2},{"content":"Android","anchor":"android","level":3},{"content":"Windows","anchor":"windows","level":3},{"content":"Instantiate the Auth0Client","anchor":"instantiate-the-auth0client","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Visual Studio 2022+ or Visual Studio for Mac",".NET6+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fmaui\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"MainPage.xaml.cs","language":"csharp","content":"public partial class MainPage : ContentPage\n{\n Auth0Client client = new Auth0Client(new Auth0ClientOptions\n {\n Domain = \"__AUTH0_NAMESPACE__\"\n ClientId = \"__AUTH0_CLIENT_ID__\",\n RedirectUri = \"myapp:\u002F\u002Fcallback\",\n PostLogoutRedirectUri = \"myapp:\u002F\u002Fcallback\",\n Scope = \"openid profile email\"\n });\n\n public MainPage()\n {\n InitializeComponent();\n }\n\n private async void OnLoginClicked(object sender, EventArgs e)\n {\n var extraParameters = new Dictionary\u003Cstring, string\u003E();\n var audience = \"\"; \u002F\u002F FILL WITH AUDIENCE AS NEEDED\n\n if (!string.IsNullOrEmpty(audience))\n extraParameters.Add(\"audience\", audience);\n\n var result = await client.LoginAsync(extraParameters);\n\n DisplayResult(result);\n }\n\n private async void OnLogoutClicked(object sender, EventArgs e)\n {\n BrowserResultType browserResult = await client.LogoutAsync();\n\n if (browserResult != BrowserResultType.Success)\n {\n ErrorLabel.Text = browserResult.ToString();\n return;\n }\n\n LogoutBtn.IsVisible = false;\n LoginBtn.IsVisible = true;\n\n HelloLabel.Text = $\"Hello, World!\";\n ErrorLabel.Text = \"\";\n }\n\n private void DisplayResult(LoginResult loginResult)\n {\n if (loginResult.IsError)\n {\n ErrorLabel.Text = loginResult.Error;\n return;\n }\n\n var user = loginResult.User;\n var name = user.FindFirst(c =\u003E c.Type == \"name\")?.Value;\n var email = user.FindFirst(c =\u003E c.Type == \"email\")?.Value;\n var picture = user.FindFirst(c =\u003E c.Type == \"picture\")?.Value;\n \n LogoutBtn.IsVisible = true;\n LoginBtn.IsVisible = false;\n\n\n HelloLabel.Text = $\"Hello, {loginResult.User.Identity.Name}\";\n ErrorLabel.Text = \"\";\n }\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to a .NET MAUI application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-maui-samples","path":"Sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-maui-samples\u002Ftree\u002Fmaster\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Emyapp:\u002F\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Emyapp:\u002F\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it \u003Cstrong\u003Eon Windows\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the Auth0MauiApp.sln in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2022\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), ensure to select your target device.\nYou can also start the application using the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it on \u003Cstrong\u003EmacOS\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the Auth0MauiApp.sln in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002Fmac\u002F\"\u003EVisual Studio for Mac\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the play button), ensure to select your target device. You can also start the application using the \u003Cstrong\u003ERun | Start Debugging\u003C\u002Fstrong\u003E option from the application menu\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","hidden":true}]},"net-android-ios":{"name":"net-android-ios","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fnet-android-ios","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fxamarin.png","logo_name":undefined,"logo":"dotnet","title":".NET Android and iOS","author":{"name":"Frederik Prijck","email":"frederik.prijck@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-oidc-client-net","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-oidc-client-net","logo":"xamarin"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fnet-android-ios\u002F01-login","title":"Add login to your .NET Android or iOS application","description":"This tutorial demonstrates how to add user login with Auth0 to a .NET Android or iOS application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install Dependencies","anchor":"install-dependencies","level":2},{"content":"Trigger Authentication","anchor":"trigger-authentication","level":2},{"content":"Handing the callback URL","anchor":"handing-the-callback-url","level":3},{"content":"Android","anchor":"android","level":3},{"content":"iOS","anchor":"ios","level":3},{"content":"Run the application","anchor":"run-the-application","level":3},{"content":"Accessing the User's Information","anchor":"accessing-the-user-s-information","level":2},{"content":"Authentication Error","anchor":"authentication-error","level":3},{"content":"Accessing the tokens","anchor":"accessing-the-tokens","level":3},{"content":"Obtaining the User Information","anchor":"obtaining-the-user-information","level":3},{"content":"Logout","anchor":"logout","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Visual Studio 2022+ or Visual Studio for Mac","Xamarin for Visual Studio",".NET6+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fnet-android-ios\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to a .NET Android or iOS application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-xamarin-oidc-samples","path":"Quickstart\u002F01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-xamarin-oidc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it \u003Cstrong\u003Eon Windows\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2017\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), optionally selecting your target device.\nYou can also start the application using the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it on \u003Cstrong\u003EmacOS\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002Fmac\u002F\"\u003EVisual Studio for Mac\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the play button), optionally selecting your target device. You can also start the application using the \u003Cstrong\u003ERun | Start Debugging\u003C\u002Fstrong\u003E option from the application menu\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fnet-android-ios\u002F01-login","title":"Add login to your .NET Android or iOS application","description":"This tutorial demonstrates how to add user login with Auth0 to a .NET Android or iOS application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install Dependencies","anchor":"install-dependencies","level":2},{"content":"Trigger Authentication","anchor":"trigger-authentication","level":2},{"content":"Handing the callback URL","anchor":"handing-the-callback-url","level":3},{"content":"Android","anchor":"android","level":3},{"content":"iOS","anchor":"ios","level":3},{"content":"Run the application","anchor":"run-the-application","level":3},{"content":"Accessing the User's Information","anchor":"accessing-the-user-s-information","level":2},{"content":"Authentication Error","anchor":"authentication-error","level":3},{"content":"Accessing the tokens","anchor":"accessing-the-tokens","level":3},{"content":"Obtaining the User Information","anchor":"obtaining-the-user-information","level":3},{"content":"Logout","anchor":"logout","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Visual Studio 2022+ or Visual Studio for Mac","Xamarin for Visual Studio",".NET6+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fnet-android-ios\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to a .NET Android or iOS application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-xamarin-oidc-samples","path":"Quickstart\u002F01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-xamarin-oidc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it \u003Cstrong\u003Eon Windows\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2017\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), optionally selecting your target device.\nYou can also start the application using the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it on \u003Cstrong\u003EmacOS\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002Fmac\u002F\"\u003EVisual Studio for Mac\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the play button), optionally selecting your target device. You can also start the application using the \u003Cstrong\u003ERun | Start Debugging\u003C\u002Fstrong\u003E option from the application menu\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fnet-android-ios\u002Finteractive","title":"Add login to your .NET Android or iOS application","description":"This tutorial demonstrates how to add user login with Auth0 to a .NET Android or iOS application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 SDK","anchor":"install-the-auth0-sdk","level":2},{"content":"Instantiate the Auth0Client","anchor":"instantiate-the-auth0client","level":2},{"content":"Configure Android","anchor":"configure-android","level":2},{"content":"Configure iOS","anchor":"configure-ios","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Visual Studio 2022+ or Visual Studio for Mac","Xamarin for Visual Studio",".NET6+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fnet-android-ios\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"MainActivity.cs","language":"csharp","content":"\u002F\u002F Example of a full Android Activity\n[Activity(Label = \"AndroidSample\", MainLauncher = true, Icon = \"@drawable\u002Ficon\",\n LaunchMode = LaunchMode.SingleTask)]\n[IntentFilter(\n new[] { Intent.ActionView },\n Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },\n DataScheme = \"YOUR_ANDROID_PACKAGE_NAME\",\n DataHost = \"{yourDomain}\",\n DataPathPrefix = \"\u002Fandroid\u002FYOUR_ANDROID_PACKAGE_NAME\u002Fcallback\")]\npublic class MainActivity : Activity\n{ \n private Auth0Client _auth0Client;\n\n protected override void OnNewIntent(Intent intent)\n {\n base.OnNewIntent(intent);\n ActivityMediator.Instance.Send(intent.DataString);\n }\n\n protected override void OnCreate(Bundle bundle)\n {\n base.OnCreate(bundle);\n\n Auth0ClientOptions clientOptions = new Auth0ClientOptions\n {\n Domain = \"__AUTH0_NAMESPACE__\"\n ClientId = \"__AUTH0_CLIENT_ID__\"\n };\n\n _auth0Client = new Auth0Client(clientOptions, this);\n }\n\n private async void LoginButtonOnClick(object sender, EventArgs eventArgs)\n {\n var loginResult = await _auth0Client.LoginAsync();\n\n if (loginResult.IsError == false)\n {\n var user = loginResult.User;\n var name = user.FindFirst(c =\u003E c.Type == \"name\")?.Value;\n var email = user.FindFirst(c =\u003E c.Type == \"email\")?.Value;\n var picture = user.FindFirst(c =\u003E c.Type == \"picture\")?.Value;\n }\n }\n\n private async void LogoutButtonOnClick(object sender, EventArgs e)\n {\n await _auth0Client.LogoutAsync();\n }\n}"},{"filename":"AppDelegate.cs","language":"csharp","content":"using Auth0.OidcClient;\n\n[Register(\"AppDelegate\")]\npublic class AppDelegate : UIApplicationDelegate\n{\n public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)\n {\n ActivityMediator.Instance.Send(url.AbsoluteString);\n\n return true;\n }\n}"},{"filename":"MyViewController.cs","language":"csharp","content":"\u002F\u002F Example of a full iOS UIViewController\npublic partial class MyViewController : UIViewController\n{\n private Auth0Client _auth0Client;\n\n public MyViewController() : base(\"MyViewController\", null)\n {\n }\n\n public override void ViewDidLoad()\n {\n base.ViewDidLoad();\n\n Auth0ClientOptions clientOptions = new Auth0ClientOptions\n {\n Domain = \"__AUTH0_NAMESPACE__\"\n ClientId = \"__AUTH0_CLIENT_ID__\"\n };\n \n _auth0Client = new Auth0Client(clientOptions, this);\n }\n\n private async void LoginButton_TouchUpInside(object sender, EventArgs e)\n {\n var loginResult = await _auth0Client.LoginAsync();\n\n if (loginResult.IsError == false)\n {\n var user = loginResult.User;\n var name = user.FindFirst(c =\u003E c.Type == \"name\")?.Value;\n var email = user.FindFirst(c =\u003E c.Type == \"email\")?.Value;\n var picture = user.FindFirst(c =\u003E c.Type == \"picture\")?.Value;\n }\n }\n\n private async void LogoutButton_TouchUpInside(object sender, EventArgs e)\n {\n await _auth0Client.LogoutAsync();\n }\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to a .NET Android or iOS application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-xamarin-oidc-samples","path":"Quickstart\u002F01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-xamarin-oidc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it \u003Cstrong\u003Eon Windows\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2017\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), optionally selecting your target device.\nYou can also start the application using the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it on \u003Cstrong\u003EmacOS\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002Fmac\u002F\"\u003EVisual Studio for Mac\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the play button), optionally selecting your target device. You can also start the application using the \u003Cstrong\u003ERun | Start Debugging\u003C\u002Fstrong\u003E option from the application menu\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","hidden":true}]},"react-native":{"name":"react-native","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Freact-native","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Freact.png","logo_name":undefined,"logo":"react","title":"React Native","author":{"name":"Steve Hobbs","email":"steve.hobbs@okta.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"react-native-auth0","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Freact-native-auth0","logo":"react"},"articles":[{"name":"00-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Freact-native\u002F00-login","title":"Login","description":"This tutorial demonstrates how to add user login to a React Native application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Install Dependencies","anchor":"install-dependencies","level":2},{"content":"Yarn","anchor":"yarn","level":3},{"content":"npm","anchor":"npm","level":3},{"content":"Additional iOS step: install the module Pod","anchor":"additional-ios-step-install-the-module-pod","level":3},{"content":"Integrate Auth0 in Your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Configure Android","anchor":"configure-android","level":3},{"content":"Configure iOS","anchor":"configure-ios","level":3},{"content":"Configure Callback and Logout URLs","anchor":"configure-callback-and-logout-urls","level":3},{"content":"iOS","anchor":"ios","level":4},{"content":"Android","anchor":"android","level":4},{"content":"Add login to your app","anchor":"add-login-to-your-app","level":2},{"content":"Add logout to your app","anchor":"add-logout-to-your-app","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["React Native 0.62.2","NodeJS 10.16"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Freact-native\u002F00-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a React Native application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-react-native-sample","path":"00-Login-Hooks"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-react-native-sample\u002Ftree\u002Fmaster\u002F00-Login-Hooks","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E, \u003Ca href=\"https:\u002F\u002Fyarnpkg.com\u002Flang\u002Fen\u002Fdocs\u002Finstall\u002F\"\u003EYarn\u003C\u002Fa\u003E and \u003Ca href=\"http:\u002F\u002Fguides.cocoapods.org\u002Fusing\u002Fgetting-started.html\"\u003ECocoaPods\u003C\u002Fa\u003E are installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EExecute the following commands in the sample's directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Eyarn install # Install dependencies\ncd ios && pod install # Install the iOS module Pod\nyarn run ios # Run on iOS device\nyarn run android # Run on Android device\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about how to run react-native apps in their \u003Ca href=\"https:\u002F\u002Ffacebook.github.io\u002Freact-native\u002Fdocs\u002Frunning-on-device.html\"\u003Eofficial documentation\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"00-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Freact-native\u002F00-login","title":"Login","description":"This tutorial demonstrates how to add user login to a React Native application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Install Dependencies","anchor":"install-dependencies","level":2},{"content":"Yarn","anchor":"yarn","level":3},{"content":"npm","anchor":"npm","level":3},{"content":"Additional iOS step: install the module Pod","anchor":"additional-ios-step-install-the-module-pod","level":3},{"content":"Integrate Auth0 in Your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Configure Android","anchor":"configure-android","level":3},{"content":"Configure iOS","anchor":"configure-ios","level":3},{"content":"Configure Callback and Logout URLs","anchor":"configure-callback-and-logout-urls","level":3},{"content":"iOS","anchor":"ios","level":4},{"content":"Android","anchor":"android","level":4},{"content":"Add login to your app","anchor":"add-login-to-your-app","level":2},{"content":"Add logout to your app","anchor":"add-logout-to-your-app","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["React Native 0.62.2","NodeJS 10.16"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Freact-native\u002F00-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a React Native application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-react-native-sample","path":"00-Login-Hooks"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-react-native-sample\u002Ftree\u002Fmaster\u002F00-Login-Hooks","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E, \u003Ca href=\"https:\u002F\u002Fyarnpkg.com\u002Flang\u002Fen\u002Fdocs\u002Finstall\u002F\"\u003EYarn\u003C\u002Fa\u003E and \u003Ca href=\"http:\u002F\u002Fguides.cocoapods.org\u002Fusing\u002Fgetting-started.html\"\u003ECocoaPods\u003C\u002Fa\u003E are installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EExecute the following commands in the sample's directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Eyarn install # Install dependencies\ncd ios && pod install # Install the iOS module Pod\nyarn run ios # Run on iOS device\nyarn run android # Run on Android device\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about how to run react-native apps in their \u003Ca href=\"https:\u002F\u002Ffacebook.github.io\u002Freact-native\u002Fdocs\u002Frunning-on-device.html\"\u003Eofficial documentation\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Freact-native\u002Finteractive","title":"Add Login to your React Native App","description":"This quickstart demonstrates how to add user login to an React Native application using Auth0.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure callback and logout URLs","anchor":"configure-callback-and-logout-urls","level":3},{"content":"iOS","anchor":"ios","level":4},{"content":"Android","anchor":"android","level":4},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Yarn","anchor":"yarn","level":3},{"content":"npm","anchor":"npm","level":3},{"content":"Additional iOS step: install the module Pod","anchor":"additional-ios-step-install-the-module-pod","level":3},{"content":"Integrate Auth0 in your application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Configure Android","anchor":"configure-android","level":3},{"content":"Configure iOS","anchor":"configure-ios","level":3},{"content":"Configure the Auth0Provider component","anchor":"configure-the-auth0provider-component","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["React Native 0.62.2","NodeJS 10.16"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Freact-native\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"app.js","language":"javascript","content":"import React from 'react';\nimport {Button, Text, View, StyleSheet} from 'react-native';\nimport {useAuth0, Auth0Provider} from 'react-native-auth0';\n\nconst Home = () =\u003E {\n const {authorize, clearSession, user, error, isLoading} = useAuth0();\n\n const onLogin = async () =\u003E {\n try {\n await authorize();\n } catch (e) {\n console.log(e);\n }\n };\n\n const onLogout = async () =\u003E {\n try {\n await clearSession();\n } catch (e) {\n console.log('Log out cancelled');\n }\n };\n\n if (isLoading) {\n return \u003CView style={styles.container}\u003E\u003CText\u003ELoading\u003C\u002FText\u003E\u003C\u002FView\u003E;\n }\n\n const loggedIn = user !== undefined && user !== null;\n\n return (\n \u003CView style={styles.container}\u003E\n {loggedIn && \u003CText\u003EYou are logged in as {user.name}\u003C\u002FText\u003E}\n {!loggedIn && \u003CText\u003EYou are not logged in\u003C\u002FText\u003E}\n {error && \u003CText\u003E{error.message}\u003C\u002FText\u003E}\n\n \u003CButton\n onPress={loggedIn ? onLogout : onLogin}\n title={loggedIn ? 'Log Out' : 'Log In'}\n \u002F\u003E\n \u003C\u002FView\u003E\n );\n};\n\nconst App = () =\u003E {\n return (\n \u003CAuth0Provider domain={\"__AUTH0_NAMESPACE__\"} clientId={\"__AUTH0_CLIENT_ID__\"}\u003E\n \u003CHome \u002F\u003E\n \u003C\u002FAuth0Provider\u003E\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#F5FCFF',\n }\n});\n\nexport default App;"}],"interactive":true,"downloadBoxDescription":"This quickstart demonstrates how to add user login to an React Native application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-react-native-sample","path":"00-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-react-native-sample\u002Ftree\u002Fmaster\u002F00-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E, \u003Ca href=\"https:\u002F\u002Fyarnpkg.com\u002Flang\u002Fen\u002Fdocs\u002Finstall\u002F\"\u003EYarn\u003C\u002Fa\u003E and \u003Ca href=\"http:\u002F\u002Fguides.cocoapods.org\u002Fusing\u002Fgetting-started.html\"\u003ECocoaPods\u003C\u002Fa\u003E are installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EExecute the following commands in the sample's directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Eyarn install # Install dependencies\ncd ios && pod install # Install the iOS module Pod\nyarn run ios # Run on iOS device\nyarn run android # Run on Android device\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about how to run react-native apps in their \u003Ca href=\"https:\u002F\u002Ffacebook.github.io\u002Freact-native\u002Fdocs\u002Frunning-on-device.html\"\u003Eofficial documentation\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n","hidden":true}]},"react-native-expo":{"name":"react-native-expo","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Freact-native-expo","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Freact.png","logo_name":"expo","logo":"expo","title":"Expo","author":{"name":"Poovamraj Thanganadar Thiagarajan","email":"poovamraj.thanganadarthigarajan@okta.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"react-native-auth0","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Freact-native-auth0","logo":"expo"},"articles":[{"name":"00-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Freact-native-expo\u002F00-login","title":"Login","description":"This tutorial demonstrates how to add user login to an Expo application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Install Dependencies","anchor":"install-dependencies","level":2},{"content":"Yarn","anchor":"yarn","level":3},{"content":"npm","anchor":"npm","level":3},{"content":"Integrate Auth0 in Your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Setup Auth0 Config Plugin","anchor":"setup-auth0-config-plugin","level":3},{"content":"Generate native source code","anchor":"generate-native-source-code","level":3},{"content":"Configure Callback and Logout URLs","anchor":"configure-callback-and-logout-urls","level":3},{"content":"iOS","anchor":"ios","level":4},{"content":"Android","anchor":"android","level":4},{"content":"Add login to your app","anchor":"add-login-to-your-app","level":2},{"content":"Add logout to your app","anchor":"add-logout-to-your-app","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["React Native 0.62.2","NodeJS 10.16","Expo SDK 41"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Freact-native-expo\u002F00-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an Expo application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-react-native-sample","path":"00-Login-Expo"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-react-native-sample\u002Ftree\u002Fmaster\u002F00-Login-Expo","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E, \u003Ca href=\"https:\u002F\u002Fyarnpkg.com\u002Flang\u002Fen\u002Fdocs\u002Finstall\u002F\"\u003EYarn\u003C\u002Fa\u003E and \u003Ca href=\"http:\u002F\u002Fguides.cocoapods.org\u002Fusing\u002Fgetting-started.html\"\u003ECocoaPods\u003C\u002Fa\u003E are installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EExecute the following commands in the sample's directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Eyarn install # Install dependencies\nexpo prebuild # Generate the native source code\nexpo run:ios # Run on iOS device\nexpo run:android # Run on Android device\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about how to run Expo apps in their \u003Ca href=\"https:\u002F\u002Fdocs.expo.dev\u002Fworkflow\u002Fexpo-cli\u002F#compiling\"\u003Eofficial documentation\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"00-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Freact-native-expo\u002F00-login","title":"Login","description":"This tutorial demonstrates how to add user login to an Expo application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Install Dependencies","anchor":"install-dependencies","level":2},{"content":"Yarn","anchor":"yarn","level":3},{"content":"npm","anchor":"npm","level":3},{"content":"Integrate Auth0 in Your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Setup Auth0 Config Plugin","anchor":"setup-auth0-config-plugin","level":3},{"content":"Generate native source code","anchor":"generate-native-source-code","level":3},{"content":"Configure Callback and Logout URLs","anchor":"configure-callback-and-logout-urls","level":3},{"content":"iOS","anchor":"ios","level":4},{"content":"Android","anchor":"android","level":4},{"content":"Add login to your app","anchor":"add-login-to-your-app","level":2},{"content":"Add logout to your app","anchor":"add-logout-to-your-app","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["React Native 0.62.2","NodeJS 10.16","Expo SDK 41"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Freact-native-expo\u002F00-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an Expo application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-react-native-sample","path":"00-Login-Expo"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-react-native-sample\u002Ftree\u002Fmaster\u002F00-Login-Expo","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E, \u003Ca href=\"https:\u002F\u002Fyarnpkg.com\u002Flang\u002Fen\u002Fdocs\u002Finstall\u002F\"\u003EYarn\u003C\u002Fa\u003E and \u003Ca href=\"http:\u002F\u002Fguides.cocoapods.org\u002Fusing\u002Fgetting-started.html\"\u003ECocoaPods\u003C\u002Fa\u003E are installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EExecute the following commands in the sample's directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Eyarn install # Install dependencies\nexpo prebuild # Generate the native source code\nexpo run:ios # Run on iOS device\nexpo run:android # Run on Android device\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about how to run Expo apps in their \u003Ca href=\"https:\u002F\u002Fdocs.expo.dev\u002Fworkflow\u002Fexpo-cli\u002F#compiling\"\u003Eofficial documentation\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Freact-native-expo\u002Finteractive","title":"Add Login to your React Native App","description":"This quickstart demonstrates how to add user login to an React Native application using Auth0.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure callback and logout URLs","anchor":"configure-callback-and-logout-urls","level":3},{"content":"iOS","anchor":"ios","level":4},{"content":"Android","anchor":"android","level":4},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Yarn","anchor":"yarn","level":3},{"content":"npm","anchor":"npm","level":3},{"content":"Setup Auth0 Config Plugin","anchor":"setup-auth0-config-plugin","level":2},{"content":"Generate Native Source Code","anchor":"generate-native-source-code","level":2},{"content":"Configure the Auth0Provider component","anchor":"configure-the-auth0provider-component","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["React Native 0.62.2","NodeJS 10.16","Expo SDK 41"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Freact-native-expo\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"app.json","language":"json","content":"{\n \"expo\": {\n \"name\": \"00-Login-Expo\",\n \"slug\": \"00-Login-Expo\",\n \"version\": \"1.0.0\",\n \"orientation\": \"portrait\",\n \"icon\": \".\u002Fassets\u002Ficon.png\",\n \"userInterfaceStyle\": \"light\",\n \"plugins\": [\n [\n \"react-native-auth0\",\n {\n \"domain\": \"__AUTH0_NAMESPACE__\",\n }\n ]\n ],\n \"splash\": {\n \"image\": \".\u002Fassets\u002Fsplash.png\",\n \"resizeMode\": \"contain\",\n \"backgroundColor\": \"#ffffff\"\n },\n \"updates\": {\n \"fallbackToCacheTimeout\": 0\n },\n \"assetBundlePatterns\": [\n \"**\u002F*\"\n ],\n \"web\": {\n \"favicon\": \".\u002Fassets\u002Ffavicon.png\"\n },\n \"android\": {\n \"package\": \"com.auth0samples\"\n },\n \"ios\": {\n \"bundleIdentifier\": \"com.auth0samples\"\n }\n }\n}"},{"filename":"App.js","language":"javascript","content":"import React from 'react';\nimport {Button, Text, View, StyleSheet} from 'react-native';\nimport {useAuth0, Auth0Provider} from 'react-native-auth0';\n\nconst Home = () =\u003E {\n const {authorize, clearSession, user, error, isLoading} = useAuth0();\n\n const onLogin = async () =\u003E {\n try {\n await authorize();\n } catch (e) {\n console.log(e);\n }\n };\n\n const onLogout = async () =\u003E {\n try {\n await clearSession();\n } catch (e) {\n console.log('Log out cancelled');\n }\n };\n\n if (isLoading) {\n return \u003CView style={styles.container}\u003E\u003CText\u003ELoading\u003C\u002FText\u003E\u003C\u002FView\u003E;\n }\n\n const loggedIn = user !== undefined && user !== null;\n\n return (\n \u003CView style={styles.container}\u003E\n {loggedIn && \u003CText\u003EYou are logged in as {user.name}\u003C\u002FText\u003E}\n {!loggedIn && \u003CText\u003EYou are not logged in\u003C\u002FText\u003E}\n {error && \u003CText\u003E{error.message}\u003C\u002FText\u003E}\n\n \u003CButton\n onPress={loggedIn ? onLogout : onLogin}\n title={loggedIn ? 'Log Out' : 'Log In'}\n \u002F\u003E\n \u003C\u002FView\u003E\n );\n};\n\nconst App = () =\u003E {\n return (\n \u003CAuth0Provider domain={\"__AUTH0_NAMESPACE__\"} clientId={\"__AUTH0_CLIENT_ID__\"}\u003E\n \u003CHome \u002F\u003E\n \u003C\u002FAuth0Provider\u003E\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#F5FCFF',\n }\n});\n\nexport default App;"}],"interactive":true,"downloadBoxDescription":"This quickstart demonstrates how to add user login to an React Native application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-react-native-sample","path":"00-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-react-native-sample\u002Ftree\u002Fmaster\u002F00-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0samples\u002Fcallback,com.auth0samples:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0samples\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003E\n\u003Cp\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E, \u003Ca href=\"https:\u002F\u002Fyarnpkg.com\u002Flang\u002Fen\u002Fdocs\u002Finstall\u002F\"\u003EYarn\u003C\u002Fa\u003E and \u003Ca href=\"http:\u002F\u002Fguides.cocoapods.org\u002Fusing\u002Fgetting-started.html\"\u003ECocoaPods\u003C\u002Fa\u003E are installed.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EExecute the following commands in the sample's directory:\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Eyarn install # Install dependencies\nexpo prebuild # Generate the native source code\nexpo run:ios # Run on iOS device\nexpo run:android # Run on Android device\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ERead more about how to run Expo apps in their \u003Ca href=\"https:\u002F\u002Fdocs.expo.dev\u002Fworkflow\u002Fexpo-cli\u002F#compiling\"\u003Eofficial documentation\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n","hidden":true}]},"windows-uwp-csharp":{"name":"windows-uwp-csharp","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fwindows-uwp-csharp","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fwindows-8.png","logo_name":undefined,"logo":"windows","title":"UWP","author":{"name":"Damien Guard","email":"damien.guard@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-oidc-client-net","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-oidc-client-net","logo":"windows"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fwindows-uwp-csharp\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a UWP C# application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate Auth0 in your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Install Dependencies","anchor":"install-dependencies","level":3},{"content":"Trigger Authentication","anchor":"trigger-authentication","level":2},{"content":"Handle Authentication Tokens","anchor":"handle-authentication-tokens","level":2},{"content":"Authentication Error","anchor":"authentication-error","level":3},{"content":"Accessing the tokens","anchor":"accessing-the-tokens","level":3},{"content":"Obtaining the User Information","anchor":"obtaining-the-user-information","level":3},{"content":"Logout","anchor":"logout","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Microsoft Visual Studio 2017","Windows 10 SDK (10.0.10586.0)","Auth0.OidcClient.UWP 2.3.1"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fwindows-uwp-csharp\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a UWP C# application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-uwp-oidc-samples","path":"Quickstart\u002F00-Starter-Seed"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-uwp-oidc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F00-Starter-Seed","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003EEnsure that you have \u003Ca href=\"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fwindows\u002Fuwp\u002Fget-started\u002Fenable-your-device-for-development\"\u003Eenabled Developer Mode\u003C\u002Fa\u003E for your computer.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EOpen the UWPSample.sln solution in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2017\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E and \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E according to the instructions described in the Quickstart. For more information check Web authenticator broker \u003Ca href=\"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fwindows\u002Fuwp\u002Fsecurity\u002Fweb-authentication-broker#connecting-with-single-sign-on-sso\"\u003Edocumentation\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), optionally selecting your target device. You can also start the application using the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fwindows-uwp-csharp\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a UWP C# application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate Auth0 in your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Install Dependencies","anchor":"install-dependencies","level":3},{"content":"Trigger Authentication","anchor":"trigger-authentication","level":2},{"content":"Handle Authentication Tokens","anchor":"handle-authentication-tokens","level":2},{"content":"Authentication Error","anchor":"authentication-error","level":3},{"content":"Accessing the tokens","anchor":"accessing-the-tokens","level":3},{"content":"Obtaining the User Information","anchor":"obtaining-the-user-information","level":3},{"content":"Logout","anchor":"logout","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Microsoft Visual Studio 2017","Windows 10 SDK (10.0.10586.0)","Auth0.OidcClient.UWP 2.3.1"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fwindows-uwp-csharp\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a UWP C# application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-uwp-oidc-samples","path":"Quickstart\u002F00-Starter-Seed"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-uwp-oidc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F00-Starter-Seed","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003EEnsure that you have \u003Ca href=\"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fwindows\u002Fuwp\u002Fget-started\u002Fenable-your-device-for-development\"\u003Eenabled Developer Mode\u003C\u002Fa\u003E for your computer.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EOpen the UWPSample.sln solution in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2017\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E and \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E according to the instructions described in the Quickstart. For more information check Web authenticator broker \u003Ca href=\"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fwindows\u002Fuwp\u002Fsecurity\u002Fweb-authentication-broker#connecting-with-single-sign-on-sso\"\u003Edocumentation\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), optionally selecting your target device. You can also start the application using the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n"},"hiddenArticles":undefined},"wpf-winforms":{"name":"wpf-winforms","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fwpf-winforms","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fasp.png","logo_name":undefined,"logo":"dotnet-platform","title":"WPF \u002F Winforms","author":{"name":"Damien Guard","email":"damien.guard@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-oidc-client-net","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-oidc-client-net","logo":"windows"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fwpf-winforms\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a WPF and Windows Forms C# application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate Auth0 in your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Install Dependencies","anchor":"install-dependencies","level":3},{"content":"Trigger Authentication","anchor":"trigger-authentication","level":2},{"content":"Handle Authentication Tokens","anchor":"handle-authentication-tokens","level":2},{"content":"Authentication Error","anchor":"authentication-error","level":3},{"content":"Accessing the tokens","anchor":"accessing-the-tokens","level":3},{"content":"Obtaining the User Information","anchor":"obtaining-the-user-information","level":3},{"content":"Logout","anchor":"logout","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Microsoft Visual Studio 2022",".NET Framework 4.6.2",".NET 6"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fwpf-winforms\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a WPF and Windows Forms C# application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-WinFormsWPF-oidc-samples","path":"Quickstart\u002F00-Starter-Seed"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-WinFormsWPF-oidc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F00-Starter-Seed","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttps:\u002F\u002F__AUTH0_NAMESPACE__\u002Fmobile\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttps:\u002F\u002F__AUTH0_NAMESPACE__\u002Fmobile\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EOpen the WPFSample.sln or WindowsFormsSample.sln solution in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2017\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), or select the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fwpf-winforms\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a WPF and Windows Forms C# application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate Auth0 in your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Install Dependencies","anchor":"install-dependencies","level":3},{"content":"Trigger Authentication","anchor":"trigger-authentication","level":2},{"content":"Handle Authentication Tokens","anchor":"handle-authentication-tokens","level":2},{"content":"Authentication Error","anchor":"authentication-error","level":3},{"content":"Accessing the tokens","anchor":"accessing-the-tokens","level":3},{"content":"Obtaining the User Information","anchor":"obtaining-the-user-information","level":3},{"content":"Logout","anchor":"logout","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Microsoft Visual Studio 2022",".NET Framework 4.6.2",".NET 6"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fwpf-winforms\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a WPF and Windows Forms C# application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-WinFormsWPF-oidc-samples","path":"Quickstart\u002F00-Starter-Seed"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-WinFormsWPF-oidc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F00-Starter-Seed","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttps:\u002F\u002F__AUTH0_NAMESPACE__\u002Fmobile\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttps:\u002F\u002F__AUTH0_NAMESPACE__\u002Fmobile\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EOpen the WPFSample.sln or WindowsFormsSample.sln solution in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2017\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), or select the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fwpf-winforms\u002Finteractive","title":"Add login to your WinForms and WPF application","description":"This tutorial demonstrates how to add user login with Auth0 to a WPF and WinForms application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 SDK","anchor":"install-the-auth0-sdk","level":2},{"content":"Instantiate the Auth0Client","anchor":"instantiate-the-auth0client","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Microsoft Visual Studio 2022",".NET Framework 4.6.2",".NET 6"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fwpf-winforms\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"MainWindow.xaml.cs","language":"csharp","content":"using Auth0.OidcClient;\n\npublic partial class MainWindow : Window\n{\n private Auth0Client client;\n\n public MainWindow()\n {\n InitializeComponent();\n InitializeClient();\n }\n\n private InitializeClient()\n {\n Auth0ClientOptions clientOptions = new Auth0ClientOptions\n {\n Domain = \"__AUTH0_NAMESPACE__\"\n ClientId = \"__AUTH0_CLIENT_ID__\"\n };\n client = new Auth0Client(clientOptions);\n clientOptions.PostLogoutRedirectUri = clientOptions.RedirectUri;\n }\n\n private async void LoginButton_OnClick(object sender, RoutedEventArgs e) \n {\n var loginResult = await client.LoginAsync();\n\n if (loginResult.IsError == false)\n {\n var user = loginResult.User;\n var name = user.FindFirst(c =\u003E c.Type == \"name\")?.Value;\n var email = user.FindFirst(c =\u003E c.Type == \"email\")?.Value;\n var picture = user.FindFirst(c =\u003E c.Type == \"picture\")?.Value;\n }\n }\n\n private async void LogoutButton_Click(object sender, RoutedEventArgs e)\n {\n await client.LogoutAsync();\n }\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to a WPF and WinForms application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-WinFormsWPF-oidc-samples","path":"Quickstart\u002F00-Starter-Seed"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-WinFormsWPF-oidc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F00-Starter-Seed","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttps:\u002F\u002F__AUTH0_NAMESPACE__\u002Fmobile\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttps:\u002F\u002F__AUTH0_NAMESPACE__\u002Fmobile\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EOpen the WPFSample.sln or WindowsFormsSample.sln solution in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2017\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), or select the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","hidden":true}]},"xamarin":{"name":"xamarin","url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fxamarin","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fxamarin.png","logo_name":undefined,"logo":"xamarin","title":"Xamarin","author":{"name":"Frederik Prijck","email":"frederik.prijck@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-oidc-client-net","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-oidc-client-net","logo":"xamarin"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fxamarin\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Xamarin application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install Dependencies","anchor":"install-dependencies","level":2},{"content":"Trigger Authentication","anchor":"trigger-authentication","level":2},{"content":"Handing the callback URL","anchor":"handing-the-callback-url","level":3},{"content":"Android","anchor":"android","level":3},{"content":"iOS","anchor":"ios","level":3},{"content":"Run the application","anchor":"run-the-application","level":3},{"content":"Accessing the User's Information","anchor":"accessing-the-user-s-information","level":2},{"content":"Authentication Error","anchor":"authentication-error","level":3},{"content":"Accessing the tokens","anchor":"accessing-the-tokens","level":3},{"content":"Obtaining the User Information","anchor":"obtaining-the-user-information","level":3},{"content":"Logout","anchor":"logout","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Visual Studio 2022 or Visual Studio for Mac","Xamarin for Visual Studio",".NET 6+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fxamarin\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Xamarin application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-xamarin-oidc-samples","path":"Quickstart\u002F01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-xamarin-oidc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it \u003Cstrong\u003Eon Windows\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2017\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), optionally selecting your target device.\nYou can also start the application using the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it on \u003Cstrong\u003EmacOS\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002Fmac\u002F\"\u003EVisual Studio for Mac\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the play button), optionally selecting your target device. You can also start the application using the \u003Cstrong\u003ERun | Start Debugging\u003C\u002Fstrong\u003E option from the application menu\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n"}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fxamarin\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Xamarin application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install Dependencies","anchor":"install-dependencies","level":2},{"content":"Trigger Authentication","anchor":"trigger-authentication","level":2},{"content":"Handing the callback URL","anchor":"handing-the-callback-url","level":3},{"content":"Android","anchor":"android","level":3},{"content":"iOS","anchor":"ios","level":3},{"content":"Run the application","anchor":"run-the-application","level":3},{"content":"Accessing the User's Information","anchor":"accessing-the-user-s-information","level":2},{"content":"Authentication Error","anchor":"authentication-error","level":3},{"content":"Accessing the tokens","anchor":"accessing-the-tokens","level":3},{"content":"Obtaining the User Information","anchor":"obtaining-the-user-information","level":3},{"content":"Logout","anchor":"logout","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Visual Studio 2022 or Visual Studio for Mac","Xamarin for Visual Studio",".NET 6+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fxamarin\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Xamarin application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-xamarin-oidc-samples","path":"Quickstart\u002F01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-xamarin-oidc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it \u003Cstrong\u003Eon Windows\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2017\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), optionally selecting your target device.\nYou can also start the application using the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it on \u003Cstrong\u003EmacOS\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002Fmac\u002F\"\u003EVisual Studio for Mac\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the play button), optionally selecting your target device. You can also start the application using the \u003Cstrong\u003ERun | Start Debugging\u003C\u002Fstrong\u003E option from the application menu\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fnative\u002Fxamarin\u002Finteractive","title":"Add login to your .NET Android or iOS application","description":"This tutorial demonstrates how to add user login with Auth0 to a .NET Android or iOS application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 SDK","anchor":"install-the-auth0-sdk","level":2},{"content":"Instantiate the Auth0Client","anchor":"instantiate-the-auth0client","level":2},{"content":"Configure Android","anchor":"configure-android","level":2},{"content":"Configure iOS","anchor":"configure-ios","level":2},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Visual Studio 2022 or Visual Studio for Mac","Xamarin for Visual Studio",".NET 6+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fnative\u002Fxamarin\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"MainActivity.cs","language":"csharp","content":"\u002F\u002F Example of a full Android Activity\n[Activity(Label = \"AndroidSample\", MainLauncher = true, Icon = \"@drawable\u002Ficon\",\n LaunchMode = LaunchMode.SingleTask)]\n[IntentFilter(\n new[] { Intent.ActionView },\n Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },\n DataScheme = \"YOUR_ANDROID_PACKAGE_NAME\",\n DataHost = \"{yourDomain}\",\n DataPathPrefix = \"\u002Fandroid\u002FYOUR_ANDROID_PACKAGE_NAME\u002Fcallback\")]\npublic class MainActivity : Activity\n{ \n private Auth0Client _auth0Client;\n\n protected override void OnNewIntent(Intent intent)\n {\n base.OnNewIntent(intent);\n ActivityMediator.Instance.Send(intent.DataString);\n }\n\n protected override void OnCreate(Bundle bundle)\n {\n base.OnCreate(bundle);\n\n Auth0ClientOptions clientOptions = new Auth0ClientOptions\n {\n Domain = \"__AUTH0_NAMESPACE__\"\n ClientId = \"__AUTH0_CLIENT_ID__\"\n };\n\n _auth0Client = new Auth0Client(clientOptions, this);\n }\n\n private async void LoginButtonOnClick(object sender, EventArgs eventArgs)\n {\n var loginResult = await _auth0Client.LoginAsync();\n\n if (loginResult.IsError == false)\n {\n var user = loginResult.User;\n var name = user.FindFirst(c =\u003E c.Type == \"name\")?.Value;\n var email = user.FindFirst(c =\u003E c.Type == \"email\")?.Value;\n var picture = user.FindFirst(c =\u003E c.Type == \"picture\")?.Value;\n }\n }\n\n private async void LogoutButtonOnClick(object sender, EventArgs e)\n {\n await _auth0Client.LogoutAsync();\n }\n}"},{"filename":"AppDelegate.cs","language":"csharp","content":"using Auth0.OidcClient;\n\n[Register(\"AppDelegate\")]\npublic class AppDelegate : UIApplicationDelegate\n{\n public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)\n {\n ActivityMediator.Instance.Send(url.AbsoluteString);\n\n return true;\n }\n}"},{"filename":"MyViewController.cs","language":"csharp","content":"\u002F\u002F Example of a full iOS UIViewController\npublic partial class MyViewController : UIViewController\n{\n private Auth0Client _auth0Client;\n\n public MyViewController() : base(\"MyViewController\", null)\n {\n }\n\n public override void ViewDidLoad()\n {\n base.ViewDidLoad();\n\n Auth0ClientOptions clientOptions = new Auth0ClientOptions\n {\n Domain = \"__AUTH0_NAMESPACE__\"\n ClientId = \"__AUTH0_CLIENT_ID__\"\n };\n \n _auth0Client = new Auth0Client(clientOptions, this);\n }\n\n private async void LoginButton_TouchUpInside(object sender, EventArgs e)\n {\n var loginResult = await _auth0Client.LoginAsync();\n\n if (loginResult.IsError == false)\n {\n var user = loginResult.User;\n var name = user.FindFirst(c =\u003E c.Type == \"name\")?.Value;\n var email = user.FindFirst(c =\u003E c.Type == \"email\")?.Value;\n var picture = user.FindFirst(c =\u003E c.Type == \"picture\")?.Value;\n }\n }\n\n private async void LogoutButton_TouchUpInside(object sender, EventArgs e)\n {\n await _auth0Client.LogoutAsync();\n }\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to a .NET Android or iOS application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-xamarin-oidc-samples","path":"Quickstart\u002F01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-xamarin-oidc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample first set the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E so it works for both Android and iOS apps:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.quickstart:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.quickstart\u002Fcallback com.auth0.iossample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.iossample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThen, to run it \u003Cstrong\u003Eon Windows\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fwww.visualstudio.com\u002Fvs\u002F\"\u003EVisual Studio 2017\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the green play button), optionally selecting your target device.\nYou can also start the application using the \u003Cstrong\u003EDebug | Start Debugging\u003C\u002Fstrong\u003E option from the main menu.\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cp\u003ETo run it on \u003Cstrong\u003EmacOS\u003C\u002Fstrong\u003E:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003EOpen the AndroidSample.sln or iOSSample.sln solution in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002Fmac\u002F\"\u003EVisual Studio for Mac\u003C\u002Fa\u003E.\u003C\u002Fli\u003E\n\u003Cli\u003EClick the \u003Cstrong\u003EStart\u003C\u002Fstrong\u003E button (the play button), optionally selecting your target device. You can also start the application using the \u003Cstrong\u003ERun | Start Debugging\u003C\u002Fstrong\u003E option from the application menu\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n"}]}}},"spa":{"title":"Single-Page App","name":"spa","description":"JavaScript web app that runs in the browser","example":"e.g., AngularJS + Node.js, React","question":"What technology are you using for your web app?","budicon":349,"slug":"application-platforms","platforms":{"angular":{"name":"angular","url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fangular","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fangular.png","logo_name":"angular2","logo":"angular","title":"Angular","author":{"name":"Steve Hobbs","email":"steve.hobbs@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":true,"sdk":{"name":"auth0-angular","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-angular","logo":"angular"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fangular\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to an Angular application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the Auth0 Angular SDK","anchor":"install-the-auth0-angular-sdk","level":2},{"content":"Register and providing Auth0","anchor":"register-and-providing-auth0","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Angular 12+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fangular\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an Angular application using Auth0.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-angular-samples","path":"Standalone"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-angular-samples\u002Ftree\u002Fmain\u002FStandalone","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true},{"name":"02-calling-an-api","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fangular\u002F02-calling-an-api","title":"Call an API","description":"This tutorial demonstrates how to make API calls to the Auth0 Management API.","canonical":undefined,"budicon":448,"titles":[{"content":"Provide the HTTP Interceptor","anchor":"provide-the-http-interceptor","level":2},{"content":"Make an API Call","anchor":"make-an-api-call","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Angular 12+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fangular\u002F02-calling-an-api.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to make API calls to the Auth0 Management API.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-angular-samples","path":"Standalone"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-angular-samples\u002Ftree\u002Fmain\u002FStandalone","sampleDownloadRequiredData":["client","api"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":false}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fangular\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to an Angular application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the Auth0 Angular SDK","anchor":"install-the-auth0-angular-sdk","level":2},{"content":"Register and providing Auth0","anchor":"register-and-providing-auth0","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Angular 12+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fangular\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an Angular application using Auth0.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-angular-samples","path":"Standalone"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-angular-samples\u002Ftree\u002Fmain\u002FStandalone","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fangular\u002Finteractive","title":"Add Login to your Angular Application","description":"Auth0 allows you to add authentication to your Angular application and gain access to user profile information. This guide demonstrates common snippets used to integrate Auth0 with any new or existing Angular application using the Auth0 Angular SDK.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the Auth0 Angular SDK","anchor":"install-the-auth0-angular-sdk","level":2},{"content":"Register and providing Auth0","anchor":"register-and-providing-auth0","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Angular 12+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fangular\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"main.ts","language":"javascript","content":"import { bootstrapApplication } from '@angular\u002Fplatform-browser';\nimport { provideAuth0 } from '@auth0\u002Fauth0-angular';\nimport { AppComponent } from '.\u002Fapp.component';\n\nbootstrapApplication(AppComponent, {\n providers: [\n provideAuth0({\n domain: '__AUTH0_NAMESPACE__',\n clientId: '__AUTH0_CLIENT_ID__',\n authorizationParams: {\n redirect_uri: window.location.origin\n }\n }),\n ]\n});"},{"filename":"login-button.ts","language":"javascript","content":"import { Component } from '@angular\u002Fcore';\nimport { AuthService } from '@auth0\u002Fauth0-angular';\n\n@Component({\n selector: 'app-login-button',\n template: '\u003Cbutton (click)=\"login()\"\u003ELog in\u003C\u002Fbutton\u003E',\n standalone: true\n})\nexport class LoginButtonComponent {\n constructor(private auth: AuthService) {}\n\n login() {\n this.auth.loginWithRedirect();\n }\n}"},{"filename":"logout-button.ts","language":"javascript","content":"import { Component, Inject } from '@angular\u002Fcore';\nimport { AuthService } from '@auth0\u002Fauth0-angular';\nimport { DOCUMENT } from '@angular\u002Fcommon';\n\n@Component({\n selector: 'app-logout-button',\n template: `\n \u003Cbutton (click)=\"logout()\"\u003E\n Log out\n \u003C\u002Fbutton\u003E\n `,\n standalone: true\n})\nexport class LogoutButtonComponent {\n constructor(\n @Inject(DOCUMENT) public document: Document,\n private auth: AuthService\n ) {}\n\n logout() {\n this.auth.logout({ \n logoutParams: {\n returnTo: this.document.location.origin \n }\n });\n }\n}"},{"filename":"user-profile.ts","language":"javascript","content":"import { Component } from '@angular\u002Fcore';\nimport { AuthService } from '@auth0\u002Fauth0-angular';\n\n@Component({\n selector: 'app-user-profile',\n template: `\n \u003Cul *ngIf=\"auth.user$ | async as user\"\u003E\n \u003Cli\u003E{{ user.name }}\u003C\u002Fli\u003E\n \u003Cli\u003E{{ user.email }}\u003C\u002Fli\u003E\n \u003C\u002Ful\u003E`,\n standalone: true\n})\nexport class UserProfileComponent {\n constructor(public auth: AuthService) {}\n}"}],"interactive":true,"downloadBoxDescription":"Auth0 allows you to add authentication to your Angular application and gain access to user profile information. This guide demonstrates common snippets used to integrate Auth0 with any new or existing Angular application using the Auth0 Angular SDK.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-angular-samples","path":"Sample-01"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-angular-samples\u002Ftree\u002Fmain\u002FSample-01","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:4200\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"flutter":{"name":"flutter","url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fflutter","image":undefined,"logo_name":"flutter","logo":"flutter","title":"Flutter (Web)","author":{"name":"Steve Hobbs","email":"steve.hobbs@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-flutter","url":"https:\u002F\u002Fwww.github.com\u002Fauth0\u002Fauth0-flutter\u002F","logo":"flutter"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fflutter\u002F01-login","title":"Add login to your Flutter app","description":"This tutorial demonstrates how to add user login with Auth0 to an Flutter Web application using the Auth0 Flutter SDK","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the Auth0 Flutter SDK","anchor":"install-the-auth0-flutter-sdk","level":2},{"content":"Add login to your app","anchor":"add-login-to-your-app","level":2},{"content":"Add logout to your app","anchor":"add-logout-to-your-app","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Flutter 3+","Xcode 14+ (for iOS)","Android Studio 4+ (for Android)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fflutter\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Flutter Web application using the Auth0 Flutter SDK","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-flutter-samples","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-flutter-samples\u002Ftree\u002Fmain\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E and \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to the following value so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples.FlutterSample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.samples.FlutterSample\u002Fcallback,com.auth0.sample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.sample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ERename the file \u003Ccode\u003E.env.example\u003C\u002Fcode\u003E to \u003Ccode\u003E.env\u003C\u002Fcode\u003E and fill in the following values:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sh\"\u003EAUTH0_DOMAIN=__AUTH0_NAMESPACE__\nAUTH0_CLIENT_ID=__AUTH0_CLIENT_ID__\nAUTH0_CUSTOM_SCHEME=com.auth0.sample\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ERename the file \u003Ccode\u003Estrings.xml.example\u003C\u002Fcode\u003E in \u003Ccode\u003Eandroid\u002Fapp\u002Fsrc\u002Fmain\u002Fres\u002Fvalues\u003C\u002Fcode\u003E to \u003Ccode\u003Estrings.xml\u003C\u002Fcode\u003E and fill in the following values:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-xml\"\u003E<?xml version="1.0" encoding="utf-8"?>\n<resources>\n <string name="com_auth0_domain">__AUTH0_NAMESPACE__<\u002Fstring>\n <string name="com_auth0_scheme">com.auth0.sample<\u002Fstring>\n<\u002Fresources>\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EUse the \u003Ca href=\"https:\u002F\u002Fdocs.flutter.dev\u002Freference\u002Fflutter-cli\"\u003EFlutter CLI's\u003C\u002Fa\u003E \u003Ccode\u003Erun\u003C\u002Fcode\u003E command to run the app:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sh\"\u003Eflutter run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fflutter\u002F01-login","title":"Add login to your Flutter app","description":"This tutorial demonstrates how to add user login with Auth0 to an Flutter Web application using the Auth0 Flutter SDK","canonical":undefined,"budicon":448,"titles":[{"content":"Getting started","anchor":"getting-started","level":2},{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the Auth0 Flutter SDK","anchor":"install-the-auth0-flutter-sdk","level":2},{"content":"Add login to your app","anchor":"add-login-to-your-app","level":2},{"content":"Add logout to your app","anchor":"add-logout-to-your-app","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Flutter 3+","Xcode 14+ (for iOS)","Android Studio 4+ (for Android)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fflutter\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to an Flutter Web application using the Auth0 Flutter SDK","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-flutter-samples","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-flutter-samples\u002Ftree\u002Fmain\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E and \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to the following value so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples.FlutterSample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.samples.FlutterSample\u002Fcallback,com.auth0.sample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.sample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ERename the file \u003Ccode\u003E.env.example\u003C\u002Fcode\u003E to \u003Ccode\u003E.env\u003C\u002Fcode\u003E and fill in the following values:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sh\"\u003EAUTH0_DOMAIN=__AUTH0_NAMESPACE__\nAUTH0_CLIENT_ID=__AUTH0_CLIENT_ID__\nAUTH0_CUSTOM_SCHEME=com.auth0.sample\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ERename the file \u003Ccode\u003Estrings.xml.example\u003C\u002Fcode\u003E in \u003Ccode\u003Eandroid\u002Fapp\u002Fsrc\u002Fmain\u002Fres\u002Fvalues\u003C\u002Fcode\u003E to \u003Ccode\u003Estrings.xml\u003C\u002Fcode\u003E and fill in the following values:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-xml\"\u003E<?xml version="1.0" encoding="utf-8"?>\n<resources>\n <string name="com_auth0_domain">__AUTH0_NAMESPACE__<\u002Fstring>\n <string name="com_auth0_scheme">com.auth0.sample<\u002Fstring>\n<\u002Fresources>\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EUse the \u003Ca href=\"https:\u002F\u002Fdocs.flutter.dev\u002Freference\u002Fflutter-cli\"\u003EFlutter CLI's\u003C\u002Fa\u003E \u003Ccode\u003Erun\u003C\u002Fcode\u003E command to run the app:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sh\"\u003Eflutter run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fflutter\u002Finteractive","title":"Add login to your Flutter app","description":"This tutorial demonstrates how to add user login with Auth0 to a Flutter Web application using the Auth0 Flutter SDK","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the Auth0 Flutter SDK","anchor":"install-the-auth0-flutter-sdk","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about Actions","icon":345,"href":"\u002Fdocs\u002Fcustomize\u002Factions"}],"showSteps":true,"requirements":["Flutter 3+","Xcode 14+ (for iOS)","Android Studio 4+ (for Android)"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fflutter\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"main_view.dart","language":"dart","content":"import 'package:auth0_flutter\u002Fauth0_flutter.dart';\nimport 'package:auth0_flutter\u002Fauth0_flutter_web.dart';\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'profile_view.dart';\n\nclass MainView extends StatefulWidget {\n const MainView({Key? key}) : super(key: key);\n\n @override\n State\u003CMainView\u003E createState() =\u003E _MainViewState();\n}\n\nclass _MainViewState extends State\u003CMainView\u003E {\n Credentials? _credentials;\n\n late Auth0Web auth0;\n\n @override\n void initState() {\n super.initState();\n auth0 = Auth0Web('__AUTH0_NAMESPACE__', '__AUTH0_CLIENT_ID__');\n\n auth0.onLoad().then((final credentials) =\u003E setState(() {\n _credentials = credentials;\n }));\n }\n\n @override\n Widget build(BuildContext context) {\n return Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: \u003CWidget\u003E[\n if (_credentials == null)\n ElevatedButton(\n onPressed: () =\u003E auth0.loginWithRedirect(redirectUrl: 'http:\u002F\u002Flocalhost:3000'),\n child: const Text(\"Log in\"))\n else\n Column(\n children: [\n ProfileView(user: _credentials!.user),\n ElevatedButton(\n onPressed: () async {\n await auth0.logout(returnToUrl: 'http:\u002F\u002Flocalhost:3000');\n },\n child: const Text(\"Log out\"))\n ],\n )\n ],\n );\n }\n}"},{"filename":"profile_view.dart","language":"dart","content":"import 'package:auth0_flutter\u002Fauth0_flutter.dart';\nimport 'package:flutter\u002Fmaterial.dart';\n\nclass ProfileView extends StatelessWidget {\n const ProfileView({Key? key, required this.user}) : super(key: key);\n\n final UserProfile user;\n\n @override\n Widget build(BuildContext context) {\n return Column(\n mainAxisAlignment: MainAxisAlignment.center,\n children: [\n if (user.name != null) Text(user.name!),\n if (user.email != null) Text(user.email!)\n ],\n );\n }\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login with Auth0 to a Flutter Web application using the Auth0 Flutter SDK","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-flutter-samples","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-flutter-samples\u002Ftree\u002Fmain\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E and \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to the following value so it works for both Android and iOS apps:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ecom.auth0.samples.FlutterSample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fios\u002Fcom.auth0.samples.FlutterSample\u002Fcallback,com.auth0.sample:\u002F\u002F__AUTH0_NAMESPACE__\u002Fandroid\u002Fcom.auth0.sample\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ERename the file \u003Ccode\u003E.env.example\u003C\u002Fcode\u003E to \u003Ccode\u003E.env\u003C\u002Fcode\u003E and fill in the following values:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sh\"\u003EAUTH0_DOMAIN=__AUTH0_NAMESPACE__\nAUTH0_CLIENT_ID=__AUTH0_CLIENT_ID__\nAUTH0_CUSTOM_SCHEME=com.auth0.sample\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ERename the file \u003Ccode\u003Estrings.xml.example\u003C\u002Fcode\u003E in \u003Ccode\u003Eandroid\u002Fapp\u002Fsrc\u002Fmain\u002Fres\u002Fvalues\u003C\u002Fcode\u003E to \u003Ccode\u003Estrings.xml\u003C\u002Fcode\u003E and fill in the following values:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-xml\"\u003E<?xml version="1.0" encoding="utf-8"?>\n<resources>\n <string name="com_auth0_domain">__AUTH0_NAMESPACE__<\u002Fstring>\n <string name="com_auth0_scheme">com.auth0.sample<\u002Fstring>\n<\u002Fresources>\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EUse the \u003Ca href=\"https:\u002F\u002Fdocs.flutter.dev\u002Freference\u002Fflutter-cli\"\u003EFlutter CLI's\u003C\u002Fa\u003E \u003Ccode\u003Erun\u003C\u002Fcode\u003E command to run the app:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sh\"\u003Eflutter run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"react":{"name":"react","url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Freact","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Freact.png","logo_name":undefined,"logo":"react","title":"React","author":{"name":"Dan Arias","email":"dan.arias@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":true,"sdk":{"name":"auth0-react","url":"https:\u002F\u002Fwww.github.com\u002Fauth0\u002Fauth0-react\u002F","logo":"react"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Freact\u002F01-login","title":"Login","description":"Auth0 allows you to add authentication to your React application quickly and to gain access to user profile information. This guide demonstrates how to integrate Auth0 with any new or existing React application using the Auth0 React SDK.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the Auth0 React SDK","anchor":"install-the-auth0-react-sdk","level":2},{"content":"Configure the Auth0Provider component","anchor":"configure-the-auth0provider-component","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Part 2: Calling an API using an access token","icon":345,"href":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Freact\u002F02-calling-an-api"}],"showSteps":true,"requirements":["React 18"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Freact\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"Auth0 allows you to add authentication to your React application quickly and to gain access to user profile information. This guide demonstrates how to integrate Auth0 with any new or existing React application using the Auth0 React SDK.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-react-samples","path":"Sample-01"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-react-samples\u002Ftree\u002Fmaster\u002FSample-01","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":false},{"name":"02-calling-an-api","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Freact\u002F02-calling-an-api","title":"Call an API","description":"This tutorial demonstrates how to make API calls to the Auth0 Management API.","canonical":undefined,"budicon":448,"titles":[{"content":"Set Up the Auth0 Service","anchor":"set-up-the-auth0-service","level":2},{"content":"Get an Access Token","anchor":"get-an-access-token","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["React 18"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Freact\u002F02-calling-an-api.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to make API calls to the Auth0 Management API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-react-samples","path":"Sample-01"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-react-samples\u002Ftree\u002Fmaster\u002FSample-01","sampleDownloadRequiredData":["client","api"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Freact\u002F01-login","title":"Login","description":"Auth0 allows you to add authentication to your React application quickly and to gain access to user profile information. This guide demonstrates how to integrate Auth0 with any new or existing React application using the Auth0 React SDK.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the Auth0 React SDK","anchor":"install-the-auth0-react-sdk","level":2},{"content":"Configure the Auth0Provider component","anchor":"configure-the-auth0provider-component","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Part 2: Calling an API using an access token","icon":345,"href":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Freact\u002F02-calling-an-api"}],"showSteps":true,"requirements":["React 18"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Freact\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"Auth0 allows you to add authentication to your React application quickly and to gain access to user profile information. This guide demonstrates how to integrate Auth0 with any new or existing React application using the Auth0 React SDK.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-react-samples","path":"Sample-01"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-react-samples\u002Ftree\u002Fmaster\u002FSample-01","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Freact\u002Finteractive","title":"Add Login to your React App","description":"Auth0 allows you to add authentication to your React application quickly and to gain access to user profile information. This guide demonstrates how to integrate Auth0 with any new or existing React application using the Auth0 React SDK.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the Auth0 React SDK","anchor":"install-the-auth0-react-sdk","level":2},{"content":"Configure the Auth0Provider component","anchor":"configure-the-auth0provider-component","level":3},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["React 18"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Freact\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"index.js","language":"javascript","content":"import React from 'react';\nimport { createRoot } from 'react-dom\u002Fclient';\nimport { Auth0Provider } from '@auth0\u002Fauth0-react';\nimport App from '.\u002FApp';\n\nconst root = createRoot(document.getElementById('root'));\n\nroot.render(\n\u003CAuth0Provider\n domain=\"__AUTH0_NAMESPACE__\"\n clientId=\"__AUTH0_CLIENT_ID__\"\n authorizationParams={{\n redirect_uri: window.location.origin\n }}\n \u003E\n \u003CApp \u002F\u003E\n \u003C\u002FAuth0Provider\u003E,\n);"},{"filename":"login.js","language":"javascript","content":"import { useAuth0 } from \"@auth0\u002Fauth0-react\";\nimport React from \"react\";\n\nconst LoginButton = () =\u003E {\n const { loginWithRedirect } = useAuth0();\n\n return \u003Cbutton onClick={() =\u003E loginWithRedirect()}\u003ELog In\u003C\u002Fbutton\u003E;\n};\n\nexport default LoginButton;"},{"filename":"logout.js","language":"javascript","content":"import { useAuth0 } from \"@auth0\u002Fauth0-react\";\nimport React from \"react\";\n\nconst LogoutButton = () =\u003E {\n const { logout } = useAuth0();\n\n return (\n \u003Cbutton onClick={() =\u003E logout({ logoutParams: { returnTo: window.location.origin } })}\u003E\n Log Out\n \u003C\u002Fbutton\u003E\n );\n};\n\nexport default LogoutButton;"},{"filename":"profile.js","language":"javascript","content":"import { useAuth0 } from \"@auth0\u002Fauth0-react\";\nimport React from \"react\";\n\nconst Profile = () =\u003E {\n const { user, isAuthenticated, isLoading } = useAuth0();\n\n if (isLoading) {\n return \u003Cdiv\u003ELoading ...\u003C\u002Fdiv\u003E;\n }\n\n return (\n isAuthenticated && (\n \u003Cdiv\u003E\n \u003Cimg src={user.picture} alt={user.name} \u002F\u003E\n \u003Ch2\u003E{user.name}\u003C\u002Fh2\u003E\n \u003Cp\u003E{user.email}\u003C\u002Fp\u003E\n \u003C\u002Fdiv\u003E\n )\n );\n};\n\nexport default Profile;"}],"interactive":true,"downloadBoxDescription":"Auth0 allows you to add authentication to your React application quickly and to gain access to user profile information. This guide demonstrates how to integrate Auth0 with any new or existing React application using the Auth0 React SDK.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-react-samples","path":"Sample-01"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-react-samples\u002Ftree\u002Fmaster\u002FSample-01","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"vanillajs":{"name":"vanillajs","url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvanillajs","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fhtml5.png","logo_name":undefined,"logo":"javascript","title":"JavaScript","author":{"name":"Steve Hobbs","email":"steve.hobbs@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":true,"sdk":{"name":"auth0-spa-js","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-spa-js","logo":"javascript"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvanillajs\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Javascript application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Integrate Auth0 in your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Install as a dependency","anchor":"install-as-a-dependency","level":3},{"content":"Reference the CDN","anchor":"reference-the-cdn","level":3},{"content":"Authentication with Auth0","anchor":"authentication-with-auth0","level":3},{"content":"Setting Up the Application","anchor":"setting-up-the-application","level":2},{"content":"Create a basic HTML page","anchor":"create-a-basic-html-page","level":3},{"content":"Reference the SDK","anchor":"reference-the-sdk","level":3},{"content":"Configure credentials","anchor":"configure-credentials","level":3},{"content":"Create the server","anchor":"create-the-server","level":2},{"content":"Installing dependencies","anchor":"installing-dependencies","level":3},{"content":"Creating server.js","anchor":"creating-server-js","level":3},{"content":"Initialize the SDK","anchor":"initialize-the-sdk","level":2},{"content":"Restoring Login State with Social Providers","anchor":"restoring-login-state-with-social-providers","level":3},{"content":"Evaluate the authentication state","anchor":"evaluate-the-authentication-state","level":2},{"content":"Log In to the Application","anchor":"log-in-to-the-application","level":2},{"content":"Log the User Out","anchor":"log-the-user-out","level":2},{"content":"Read the User Profile","anchor":"read-the-user-profile","level":2}],"nextSteps":[{"text":"Part 2: Calling an API using an access token","icon":345,"href":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvanillajs\u002F02-calling-an-api"}],"showSteps":true,"requirements":undefined,"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fvanillajs\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Javascript application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-javascript-samples","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-javascript-samples\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true},{"name":"02-calling-an-api","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvanillajs\u002F02-calling-an-api","title":"Calling an API","description":"This tutorial demonstrates how to make API calls for protected resources on your server.","canonical":undefined,"budicon":546,"titles":[{"content":"Create an API","anchor":"create-an-api","level":2},{"content":"Create a Backend API","anchor":"create-a-backend-api","level":2},{"content":"Add middleware to the backend","anchor":"add-middleware-to-the-backend","level":3},{"content":"Add a protected endpoint","anchor":"add-a-protected-endpoint","level":3},{"content":"Test the API","anchor":"test-the-api","level":3},{"content":"Calling the API","anchor":"calling-the-api","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":undefined,"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fvanillajs\u002F02-calling-an-api.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to make API calls for protected resources on your server.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-javascript-samples","path":"02-Calling-an-API"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-javascript-samples\u002Ftree\u002Fmaster\u002F02-Calling-an-API","sampleDownloadRequiredData":["client","api"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":false}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvanillajs\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Javascript application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Integrate Auth0 in your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Install as a dependency","anchor":"install-as-a-dependency","level":3},{"content":"Reference the CDN","anchor":"reference-the-cdn","level":3},{"content":"Authentication with Auth0","anchor":"authentication-with-auth0","level":3},{"content":"Setting Up the Application","anchor":"setting-up-the-application","level":2},{"content":"Create a basic HTML page","anchor":"create-a-basic-html-page","level":3},{"content":"Reference the SDK","anchor":"reference-the-sdk","level":3},{"content":"Configure credentials","anchor":"configure-credentials","level":3},{"content":"Create the server","anchor":"create-the-server","level":2},{"content":"Installing dependencies","anchor":"installing-dependencies","level":3},{"content":"Creating server.js","anchor":"creating-server-js","level":3},{"content":"Initialize the SDK","anchor":"initialize-the-sdk","level":2},{"content":"Restoring Login State with Social Providers","anchor":"restoring-login-state-with-social-providers","level":3},{"content":"Evaluate the authentication state","anchor":"evaluate-the-authentication-state","level":2},{"content":"Log In to the Application","anchor":"log-in-to-the-application","level":2},{"content":"Log the User Out","anchor":"log-the-user-out","level":2},{"content":"Read the User Profile","anchor":"read-the-user-profile","level":2}],"nextSteps":[{"text":"Part 2: Calling an API using an access token","icon":345,"href":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvanillajs\u002F02-calling-an-api"}],"showSteps":true,"requirements":undefined,"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fvanillajs\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Javascript application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-javascript-samples","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-javascript-samples\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvanillajs\u002Finteractive","title":"Add login to your JavaScript App","description":"Auth0 allows you to add authentication to your JavaScript application quickly and to gain access to user profile information. This guide demonstrates how to integrate Auth0 with any new or existing JavaScript application using the Auth0 SPA SDK.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Add the Auth0 SPA SDK","anchor":"add-the-auth0-spa-sdk","level":2},{"content":"Create the Auth0 client","anchor":"create-the-auth0-client","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Handle the callback from Auth0","anchor":"handle-the-callback-from-auth0","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":undefined,"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fvanillajs\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"app.js","language":"javascript","content":"auth0.createAuth0Client({\n domain: \"__AUTH0_NAMESPACE__\",\n clientId: \"__AUTH0_CLIENT_ID__\",\n authorizationParams: {\n redirect_uri: window.location.origin\n }\n}).then(async (auth0Client) =\u003E {\n \u002F\u002F Assumes a button with id \"login\" in the DOM\n const loginButton = document.getElementById(\"login\");\n\n loginButton.addEventListener(\"click\", (e) =\u003E {\n e.preventDefault();\n auth0Client.loginWithRedirect();\n });\n\n if (location.search.includes(\"state=\") && \n (location.search.includes(\"code=\") || \n location.search.includes(\"error=\"))) {\n await auth0Client.handleRedirectCallback();\n window.history.replaceState({}, document.title, \"\u002F\");\n }\n\n \u002F\u002F Assumes a button with id \"logout\" in the DOM\n const logoutButton = document.getElementById(\"logout\");\n\n logoutButton.addEventListener(\"click\", (e) =\u003E {\n e.preventDefault();\n auth0Client.logout();\n });\n\n const isAuthenticated = await auth0Client.isAuthenticated();\n const userProfile = await auth0Client.getUser();\n\n \u002F\u002F Assumes an element with id \"profile\" in the DOM\n const profileElement = document.getElementById(\"profile\");\n\n if (isAuthenticated) {\n profileElement.style.display = \"block\";\n profileElement.innerHTML = `\n \u003Cp\u003E${userProfile.name}\u003C\u002Fp\u003E\n \u003Cimg src=\"${userProfile.picture}\" \u002F\u003E\n `;\n } else {\n profileElement.style.display = \"none\";\n }\n});"}],"interactive":true,"downloadBoxDescription":"Auth0 allows you to add authentication to your JavaScript application quickly and to gain access to user profile information. This guide demonstrates how to integrate Auth0 with any new or existing JavaScript application using the Auth0 SPA SDK.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-javascript-samples","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-javascript-samples\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"vuejs":{"name":"vuejs","url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvuejs","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fvue.png","logo_name":undefined,"logo":"vuejs","title":"Vue","author":{"name":"Frederik Prijck","email":"frederik.prijck@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":true,"sdk":{"name":"auth0-vue","url":"https:\u002F\u002Fwww.github.com\u002Fauth0\u002Fauth0-vue","logo":"vuejs"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvuejs\u002F01-login","title":"Login","description":"This quickstart demonstrates how to add user login to a Vue.JS application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the SDK","anchor":"install-the-sdk","level":2},{"content":"Register the plugin","anchor":"register-the-plugin","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Using the Options API","anchor":"using-the-options-api","level":4},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Using the Options API","anchor":"using-the-options-api","level":4},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2},{"content":"Using the Options API","anchor":"using-the-options-api","level":4}],"nextSteps":[{"text":"Part 2: Calling an API using an access token","icon":345,"href":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvuejs\u002F02-calling-an-api"}],"showSteps":true,"requirements":["Vue 3+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fvuejs\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This quickstart demonstrates how to add user login to a Vue.JS application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-vue-samples","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-vue-samples\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003ECallback URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm run serve\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS \nsh exec.sh \n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true},{"name":"02-calling-an-api","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvuejs\u002F02-calling-an-api","title":"Calling an API","description":"This quickstart demonstrates how to make calls to an external API from a Vue.JS application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Create an API","anchor":"create-an-api","level":2},{"content":"Configuring the plugin","anchor":"configuring-the-plugin","level":2},{"content":"Retrieving an Access Token","anchor":"retrieving-an-access-token","level":2},{"content":"Using the Options API","anchor":"using-the-options-api","level":3},{"content":"Calling an API","anchor":"calling-an-api","level":2}],"nextSteps":[{"text":"Accessing ID Token Claims","icon":345,"href":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-vue\u002Fblob\u002Fmain\u002FEXAMPLES.md#accessing-id-token-claims"},{"text":"Protect a Route","icon":345,"href":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-vue\u002Fblob\u002Fmain\u002FEXAMPLES.md#protecting-a-route"},{"text":"Handling errors","icon":345,"href":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-vue\u002Fblob\u002Fmain\u002FEXAMPLES.md#error-handling"}],"showSteps":true,"requirements":["Vue 3+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fvuejs\u002F02-calling-an-api.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This quickstart demonstrates how to make calls to an external API from a Vue.JS application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-vue-samples","path":"02-Calling-an-API"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-vue-samples\u002Ftree\u002Fmaster\u002F02-Calling-an-API","sampleDownloadRequiredData":["client","api"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003ECallback URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm run serve\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS \nsh exec.sh \n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":false}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvuejs\u002F01-login","title":"Login","description":"This quickstart demonstrates how to add user login to a Vue.JS application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the SDK","anchor":"install-the-sdk","level":2},{"content":"Register the plugin","anchor":"register-the-plugin","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Using the Options API","anchor":"using-the-options-api","level":4},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Using the Options API","anchor":"using-the-options-api","level":4},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2},{"content":"Using the Options API","anchor":"using-the-options-api","level":4}],"nextSteps":[{"text":"Part 2: Calling an API using an access token","icon":345,"href":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvuejs\u002F02-calling-an-api"}],"showSteps":true,"requirements":["Vue 3+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fvuejs\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This quickstart demonstrates how to add user login to a Vue.JS application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-vue-samples","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-vue-samples\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003ECallback URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm run serve\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS \nsh exec.sh \n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fspa\u002Fvuejs\u002Finteractive","title":"Add Login to your Vue App","description":"Auth0 allows you to add authentication to almost any application type quickly. This guide demonstrates how to integrate Auth0, add authentication, and display user profile information in any Vue application using the Auth0 Vue SDK.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the Auth0 Vue SDK","anchor":"install-the-auth0-vue-sdk","level":2},{"content":"Register the plugin","anchor":"register-the-plugin","level":3},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Using the Options API","anchor":"using-the-options-api","level":3},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Using the Options API","anchor":"using-the-options-api","level":3},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2},{"content":"Using the Options API","anchor":"using-the-options-api","level":3}],"nextSteps":[],"showSteps":true,"requirements":["Vue 3+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fspa\u002Fvuejs\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"index.js","language":"javascript","content":"import { createAuth0 } from '@auth0\u002Fauth0-vue';\n\nconst app = createApp(App);\n\napp.use(\n createAuth0({\n domain: \"__AUTH0_NAMESPACE__\",\n clientId: \"__AUTH0_CLIENT_ID__\",\n authorizationParams: {\n redirect_uri: window.location.origin\n }\n })\n);\n\napp.mount('#app');"},{"filename":"login.js","language":"html","content":"\u003Ctemplate\u003E\n \u003Cdiv\u003E\n \u003Cbutton @click=\"login\"\u003ELog in\u003C\u002Fbutton\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\u003Cscript\u003E\n \u002F\u002F Composition API\n import { useAuth0 } from '@auth0\u002Fauth0-vue';\n\n export default {\n setup() {\n const auth0 = useAuth0();\n\n return {\n login() {\n auth0.loginWithRedirect();\n }\n };\n }\n };\n\n \u002F\u002F Options API\n export default {\n methods: {\n login() {\n this.$auth0.loginWithRedirect();\n }\n }\n };\n\u003C\u002Fscript\u003E"},{"filename":"logout.js","language":"html","content":"\u003Ctemplate\u003E\n \u003Cdiv\u003E\n \u003Cbutton @click=\"logout\"\u003ELog out\u003C\u002Fbutton\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\u003Cscript\u003E\n \u002F\u002F Composition API\n import { useAuth0 } from '@auth0\u002Fauth0-vue';\n\n export default {\n setup() {\n const auth0 = useAuth0();\n\n return {\n logout() {\n auth0.logout({ \n logoutParams: { \n returnTo: window.location.origin \n } \n });\n }\n };\n }\n };\n\n \u002F\u002F Options API\n export default {\n methods: {\n logout() {\n this.$auth0.logout({ \n logoutParams: { \n returnTo: window.location.origin \n } \n });\n }\n }\n };\n\u003C\u002Fscript\u003E"},{"filename":"profile.js","language":"html","content":"\u003Ctemplate\u003E\n \u003Cdiv v-if=\"isLoading\"\u003ELoading ...\u003C\u002Fdiv\u003E\n \u003Cdiv v-else\u003E\n \u003Ch2\u003EUser Profile\u003C\u002Fh2\u003E\n \u003Cbutton @click=\"login\"\u003ELog in\u003C\u002Fbutton\u003E\n \u003Cpre v-if=\"isAuthenticated\"\u003E\n \u003Ccode\u003E{{ user }}\u003C\u002Fcode\u003E\n \u003C\u002Fpre\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\u003Cscript\u003E\n \u002F\u002F Composition API\n import { useAuth0 } from '@auth0\u002Fauth0-vue';\n\n export default {\n setup() {\n const auth0 = useAuth0();\n\n return {\n login: () =\u003E auth0.loginWithRedirect(),\n user: auth0.user,\n isAuthenticated: auth0.isAuthenticated,\n isLoading: auth0.isLoading,\n };\n }\n };\n\n \u002F\u002F Options API\n export default {\n data() {\n return {\n user: this.$auth0.user,\n isAuthenticated: this.$auth0.isAuthenticated,\n isLoading: this.$auth0.isLoading,\n };\n },\n methods: {\n login() {\n this.$auth0.loginWithRedirect();\n }\n }\n };\n\u003C\u002Fscript\u003E"}],"interactive":true,"downloadBoxDescription":"Auth0 allows you to add authentication to almost any application type quickly. This guide demonstrates how to integrate Auth0, add authentication, and display user profile information in any Vue application using the Auth0 Vue SDK.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-vue-samples","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-vue-samples\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003ECallback URL\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Web Origins\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm run serve\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS \nsh exec.sh \n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]}}},"webapp":{"title":"Regular Web App","name":"webapp","description":"Traditional web app that runs on the server","example":"e.g., Express.js, ASP.NET","question":"What technology are you using for your web app?","budicon":349,"slug":"server-platforms","platforms":{"apache":{"name":"apache","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fapache","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fapache.jpg","logo_name":undefined,"logo":"apache","title":"Apache","author":{"community":true},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fapache\u002F01-login","title":"Login","description":"This tutorial demonstrates how to use the Auth0 Apache SDK to add authentication and authorization to your web app.","canonical":undefined,"budicon":448,"titles":[{"content":"Install and Enable mod_auth_openidc Module","anchor":"install-and-enable-mod_auth_openidc-module","level":2},{"content":"Configure the Module with Your Auth0 Account Information","anchor":"configure-the-module-with-your-auth0-account-information","level":2},{"content":"Configuring Auth0 Settings","anchor":"configuring-auth0-settings","level":2},{"content":"Authorization","anchor":"authorization","level":2}],"nextSteps":[],"showSteps":true,"requirements":undefined,"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fapache\u002F01-login.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fapache\u002F01-login","title":"Login","description":"This tutorial demonstrates how to use the Auth0 Apache SDK to add authentication and authorization to your web app.","canonical":undefined,"budicon":448,"titles":[{"content":"Install and Enable mod_auth_openidc Module","anchor":"install-and-enable-mod_auth_openidc-module","level":2},{"content":"Configure the Module with Your Auth0 Account Information","anchor":"configure-the-module-with-your-auth0-account-information","level":2},{"content":"Configuring Auth0 Settings","anchor":"configuring-auth0-settings","level":2},{"content":"Authorization","anchor":"authorization","level":2}],"nextSteps":[],"showSteps":true,"requirements":undefined,"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fapache\u002F01-login.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined},"hiddenArticles":undefined},"aspnet-core":{"name":"aspnet-core","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-core","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fasp.png","logo_name":undefined,"logo":"dotnet-platform","title":"ASP.NET Core MVC","author":{"name":"Frederik Prijck","email":"frederik.prijck@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-aspnetcore-authentication","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-aspnetcore-authentication","logo":"dotnet"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-core\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to an ASP.NET Core application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate Auth0","anchor":"integrate-auth0","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Install and configure the SDK","anchor":"install-and-configure-the-sdk","level":3},{"content":"Login","anchor":"login","level":2},{"content":"Display User Profile","anchor":"display-user-profile","level":2},{"content":"Logout","anchor":"logout","level":2},{"content":"What's next?","anchor":"what-s-next-","level":2}],"nextSteps":[],"showSteps":true,"requirements":[".NET 6.0",".NET 7.0",".NET 8.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Faspnet-core\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an ASP.NET Core application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-aspnetcore-mvc-samples","path":"Quickstart\u002FSample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnetcore-mvc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.microsoft.com\u002Fnet\u002Fdownload\"\u003E.NET Core\u003C\u002Fa\u003E is installed, and run the following commands:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Edotnet run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-core\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to an ASP.NET Core application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate Auth0","anchor":"integrate-auth0","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Install and configure the SDK","anchor":"install-and-configure-the-sdk","level":3},{"content":"Login","anchor":"login","level":2},{"content":"Display User Profile","anchor":"display-user-profile","level":2},{"content":"Logout","anchor":"logout","level":2},{"content":"What's next?","anchor":"what-s-next-","level":2}],"nextSteps":[],"showSteps":true,"requirements":[".NET 6.0",".NET 7.0",".NET 8.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Faspnet-core\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an ASP.NET Core application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-aspnetcore-mvc-samples","path":"Quickstart\u002FSample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnetcore-mvc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.microsoft.com\u002Fnet\u002Fdownload\"\u003E.NET Core\u003C\u002Fa\u003E is installed, and run the following commands:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Edotnet run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-core\u002Finteractive","title":"Add Login to your ASP.NET MVC application","description":"This tutorial demonstrates how to add user login to an ASP.NET Core application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install and Configure the SDK","anchor":"install-and-configure-the-sdk","level":2},{"content":"Install from Nuget","anchor":"install-from-nuget","level":3},{"content":"Configure the middleware","anchor":"configure-the-middleware","level":3},{"content":"Login","anchor":"login","level":2},{"content":"Display User Profile","anchor":"display-user-profile","level":2},{"content":"Logout","anchor":"logout","level":2}],"nextSteps":[],"showSteps":true,"requirements":[".NET 6.0",".NET 7.0",".NET 8.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Faspnet-core\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"Program.cs","language":"csharp","content":"var builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddAuth0WebAppAuthentication(options =\u003E\n{\n options.Domain = builder.Configuration[\"Auth0:Domain\"];\n options.ClientId = builder.Configuration[\"Auth0:ClientId\"];\n});\n\nbuilder.Services.AddControllersWithViews();\n\nvar app = builder.Build();\n\napp.UseAuthentication();\napp.UseAuthorization();"},{"filename":"appsettings.json","language":"json","content":"{\n \"Auth0\": {\n \"Domain\": \"__AUTH0_NAMESPACE__\",\n \"ClientId\": \"__AUTH0_CLIENT_ID__\"\n }\n}"},{"filename":"AccountController.cs","language":"csharp","content":"using Microsoft.AspNetCore.Authentication;\nusing Microsoft.AspNetCore.Authentication.Cookies;\nusing Auth0.AspNetCore.Authentication;\n\npublic class AccountController : Controller\n{\n public async Task Login(string returnUrl = \"\u002F\")\n {\n var authenticationProperties = new LoginAuthenticationPropertiesBuilder()\n \u002F\u002F Indicate here where Auth0 should redirect the user after a login.\n \u002F\u002F Note that the resulting absolute Uri must be added to the\n \u002F\u002F **Allowed Callback URLs** settings for the app.\n .WithRedirectUri(returnUrl)\n .Build();\n\n await HttpContext.ChallengeAsync(\n Auth0Constants.AuthenticationScheme,\n authenticationProperties\n );\n }\n\n [Authorize]\n public IActionResult Profile()\n {\n return View(new\n {\n Name = User.Identity.Name,\n EmailAddress = User.Claims\n .FirstOrDefault(c =\u003E c.Type == ClaimTypes.Email)?.Value,\n ProfileImage = User.Claims\n .FirstOrDefault(c =\u003E c.Type == \"picture\")?.Value\n });\n }\n\n [Authorize]\n public async Task Logout()\n {\n var authenticationProperties = new LogoutAuthenticationPropertiesBuilder()\n \u002F\u002F Indicate here where Auth0 should redirect the user after a logout.\n \u002F\u002F Note that the resulting absolute Uri must be added to the\n \u002F\u002F **Allowed Logout URLs** settings for the app.\n .WithRedirectUri(Url.Action(\"Index\", \"Home\"))\n .Build();\n\n \u002F\u002F Logout from Auth0\n await HttpContext.SignOutAsync(\n Auth0Constants.AuthenticationScheme,\n authenticationProperties\n );\n \u002F\u002F Logout from the application\n await HttpContext.SignOutAsync(\n CookieAuthenticationDefaults.AuthenticationScheme\n );\n }\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an ASP.NET Core application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-aspnetcore-mvc-samples","path":"Quickstart\u002FSample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnetcore-mvc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.microsoft.com\u002Fnet\u002Fdownload\"\u003E.NET Core\u003C\u002Fa\u003E is installed, and run the following commands:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Edotnet run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"aspnet-core-blazor-server":{"name":"aspnet-core-blazor-server","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-core-blazor-server","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fasp.png","logo_name":undefined,"logo":"dotnet-platform","title":"ASP.NET Core Blazor Server","author":{"name":"Frederik Prijck","email":"frederik.prijck@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-aspnetcore-authentication","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-aspnetcore-authentication","logo":"dotnet"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-core-blazor-server\u002F01-login","title":"Add Login to your ASP.NET Core Blazor Server application","description":"This tutorial demonstrates how to add user login to an ASP.NET Core Blazor Server application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate Auth0","anchor":"integrate-auth0","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Install and configure the SDK","anchor":"install-and-configure-the-sdk","level":3},{"content":"Login","anchor":"login","level":2},{"content":"Display User Profile","anchor":"display-user-profile","level":2},{"content":"Logout","anchor":"logout","level":2},{"content":"What's next?","anchor":"what-s-next-","level":2}],"nextSteps":[],"showSteps":true,"requirements":[".NET 6.0",".NET 7.0",".NET 8.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Faspnet-core-blazor-server\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an ASP.NET Core Blazor Server application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-aspnetcore-blazor-server-samples","path":"Quickstart\u002FSample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnetcore-blazor-server-samples\u002Ftree\u002Fmain\u002FQuickstart\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.microsoft.com\u002Fnet\u002Fdownload\"\u003E.NET Core\u003C\u002Fa\u003E is installed, and run the following commands:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Edotnet run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-core-blazor-server\u002F01-login","title":"Add Login to your ASP.NET Core Blazor Server application","description":"This tutorial demonstrates how to add user login to an ASP.NET Core Blazor Server application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate Auth0","anchor":"integrate-auth0","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Install and configure the SDK","anchor":"install-and-configure-the-sdk","level":3},{"content":"Login","anchor":"login","level":2},{"content":"Display User Profile","anchor":"display-user-profile","level":2},{"content":"Logout","anchor":"logout","level":2},{"content":"What's next?","anchor":"what-s-next-","level":2}],"nextSteps":[],"showSteps":true,"requirements":[".NET 6.0",".NET 7.0",".NET 8.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Faspnet-core-blazor-server\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an ASP.NET Core Blazor Server application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-aspnetcore-blazor-server-samples","path":"Quickstart\u002FSample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnetcore-blazor-server-samples\u002Ftree\u002Fmain\u002FQuickstart\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.microsoft.com\u002Fnet\u002Fdownload\"\u003E.NET Core\u003C\u002Fa\u003E is installed, and run the following commands:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Edotnet run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-core-blazor-server\u002Finteractive","title":"Add Login to your ASP.NET Core Blazor Server application","description":"This tutorial demonstrates how to add user login to an ASP.NET Core Blazor Server application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install and Configure the SDK","anchor":"install-and-configure-the-sdk","level":2},{"content":"Install from Nuget","anchor":"install-from-nuget","level":3},{"content":"Configure the middleware","anchor":"configure-the-middleware","level":3},{"content":"Login","anchor":"login","level":2},{"content":"Display User Profile","anchor":"display-user-profile","level":2},{"content":"Logout","anchor":"logout","level":2}],"nextSteps":[],"showSteps":true,"requirements":[".NET 6.0",".NET 7.0",".NET 8.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Faspnet-core-blazor-server\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"Login.cshtml.cs","language":"csharp","content":"public class LoginModel : PageModel\n{\n public async Task OnGet(string redirectUri)\n {\n var authenticationProperties = new LoginAuthenticationPropertiesBuilder()\n .WithRedirectUri(redirectUri)\n .Build();\n\n await HttpContext.ChallengeAsync(Auth0Constants.AuthenticationScheme, authenticationProperties);\n }\n}"},{"filename":"Logout.cshtml.cs","language":"csharp","content":"[Authorize]\npublic class LogoutModel : PageModel\n{\n public async Task OnGet()\n {\n var authenticationProperties = new LogoutAuthenticationPropertiesBuilder()\n .WithRedirectUri(\"\u002F\")\n .Build();\n\n await HttpContext.SignOutAsync(Auth0Constants.AuthenticationScheme, authenticationProperties);\n await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);\n }\n}"},{"filename":"Profile.razor","language":"csharp","content":"@page \"\u002FProfile\"\n@attribute [Authorize]\n\n\u003CPageTitle\u003EProfile\u003C\u002FPageTitle\u003E\n\n\u003Cdiv class=\"row\"\u003E\n \u003Cdiv class=\"col-md-12\"\u003E\n \u003Cdiv class=\"row\"\u003E\n \u003Ch2\u003EProfile\u003C\u002Fh2\u003E\n \u003Cdiv class=\"col-md-4\"\u003E\n \u003Ch3\u003E@Username\u003C\u002Fh3\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Fdiv\u003E\n\n@code {\n [CascadingParameter]\n public Task\u003CAuthenticationState\u003E AuthenticationStateTask { get; set; }\n private string Username = \"\";\n\n protected override async Task OnInitializedAsync()\n {\n var state = await AuthenticationStateTask;\n\n Username = state.User.Identity.Name ?? string.Empty;\n\n await base.OnInitializedAsync();\n }\n}"},{"filename":"Program.cs","language":"csharp","content":"var builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddAuth0WebAppAuthentication(options =\u003E\n{\n options.Domain = builder.Configuration[\"Auth0:Domain\"];\n options.ClientId = builder.Configuration[\"Auth0:ClientId\"];\n});\n\nbuilder.Services.AddControllersWithViews();\n\nvar app = builder.Build();\n\napp.UseAuthentication();\napp.UseAuthorization();"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an ASP.NET Core Blazor Server application.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-aspnetcore-blazor-server-samples","path":"Quickstart\u002FSample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnetcore-blazor-server-samples\u002Ftree\u002Fmain\u002FQuickstart\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.microsoft.com\u002Fnet\u002Fdownload\"\u003E.NET Core\u003C\u002Fa\u003E is installed, and run the following commands:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Edotnet run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"}]},"aspnet-owin":{"name":"aspnet-owin","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-owin","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fasp.png","logo_name":undefined,"logo":"dotnet","title":"ASP.NET (OWIN)","author":{"name":"Frederik Prijck","email":"frederik.prijck@okta.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-owin\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to an ASP.NET OWIN application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":2},{"content":"Install and configure the OpenID Connect middleware","anchor":"install-and-configure-the-openid-connect-middleware","level":2},{"content":"Add login to your ASP.NET OWIN application","anchor":"add-login-to-your-asp-net-owin-application","level":2},{"content":"Add logout to your ASP.NET OWIN application","anchor":"add-logout-to-your-asp-net-owin-application","level":2},{"content":"Display the user profile","anchor":"display-the-user-profile","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Microsoft Visual Studio 2017","Microsoft.Owin.Security.OpenIdConnect v4.1.0 and up"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Faspnet-owin\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an ASP.NET OWIN application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-aspnet-owin-mvc-samples","path":"Quickstart\u002FSample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnet-owin-mvc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003E\n\u003Cp\u003EOpen the project in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002F\"\u003EVisual Studio\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EClick the \u003Ccode\u003EStart\u003C\u002Fcode\u003E button or select the menu option \u003Ccode\u003EDebug | Start Debugging\u003C\u002Fcode\u003E or use the keyboard shortcut \u003Ccode\u003EF5\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-owin\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to an ASP.NET OWIN application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":2},{"content":"Install and configure the OpenID Connect middleware","anchor":"install-and-configure-the-openid-connect-middleware","level":2},{"content":"Add login to your ASP.NET OWIN application","anchor":"add-login-to-your-asp-net-owin-application","level":2},{"content":"Add logout to your ASP.NET OWIN application","anchor":"add-logout-to-your-asp-net-owin-application","level":2},{"content":"Display the user profile","anchor":"display-the-user-profile","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Microsoft Visual Studio 2017","Microsoft.Owin.Security.OpenIdConnect v4.1.0 and up"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Faspnet-owin\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an ASP.NET OWIN application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-aspnet-owin-mvc-samples","path":"Quickstart\u002FSample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnet-owin-mvc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003E\n\u003Cp\u003EOpen the project in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002F\"\u003EVisual Studio\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EClick the \u003Ccode\u003EStart\u003C\u002Fcode\u003E button or select the menu option \u003Ccode\u003EDebug | Start Debugging\u003C\u002Fcode\u003E or use the keyboard shortcut \u003Ccode\u003EF5\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Faspnet-owin\u002Finteractive","title":"Add Login to your ASP.NET Owin application","description":"This tutorial demonstrates how to add user login to an ASP.NET Owin application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure the project","anchor":"configure-the-project","level":2},{"content":"Install from Nuget","anchor":"install-from-nuget","level":3},{"content":"Configure the credentials","anchor":"configure-the-credentials","level":3},{"content":"Configure the middleware","anchor":"configure-the-middleware","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Microsoft Visual Studio 2017","Microsoft.Owin.Security.OpenIdConnect v4.1.0 and up"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Faspnet-owin\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"Web.config","language":"xml","content":"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?\u003E\n\u003Cconfiguration\u003E\n \u003CappSettings\u003E\n \u003Cadd key=\"auth0:Domain\" value=\"__AUTH0_NAMESPACE__\" \u002F\u003E\n \u003Cadd key=\"auth0:ClientId\" value=\"__AUTH0_CLIENT_ID__\" \u002F\u003E\n \u003C\u002FappSettings\u003E\n\u003C\u002Fconfiguration\u003E"},{"filename":"Startup.cs","language":"csharp","content":"using Microsoft.IdentityModel.Protocols.OpenIdConnect;\nusing Microsoft.IdentityModel.Tokens;\nusing Microsoft.Owin;\nusing Microsoft.Owin.Host.SystemWeb;\nusing Microsoft.Owin.Security;\nusing Microsoft.Owin.Security.Cookies;\nusing Microsoft.Owin.Security.OpenIdConnect;\nusing MvcApplication.Support;\nusing Owin;\n\npublic void Configuration(IAppBuilder app)\n{\n string domain = ConfigurationManager.AppSettings[\"auth0:Domain\"];\n string clientId = ConfigurationManager.AppSettings[\"auth0:ClientId\"];\n string redirectUri = \"http:\u002F\u002Flocalhost:3000\u002Fcallback\";\n string postLogoutRedirectUri = \"http:\u002F\u002Flocalhost:3000\";\n\n \u002F\u002F Set Cookies as default authentication type\n app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);\n app.UseCookieAuthentication(new CookieAuthenticationOptions\n {\n AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,\n LoginPath = new PathString(\"\u002FAccount\u002FLogin\"),\n\n CookieSameSite = SameSiteMode.Lax,\n\n \u002F\u002F More information on why the CookieManager needs to be set can be found here: \n \u002F\u002F https:\u002F\u002Fgithub.com\u002Faspnet\u002FAspNetKatana\u002Fwiki\u002FSystem.Web-response-cookie-integration-issues\n CookieManager = new SameSiteCookieManager(new SystemWebCookieManager())\n });\n\n app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions\n {\n AuthenticationType = \"Auth0\",\n Authority = $\"https:\u002F\u002F{domain}\",\n ClientId = clientId,\n RedirectUri = redirectUri,\n PostLogoutRedirectUri = postLogoutRedirectUri,\n ResponseType = OpenIdConnectResponseType.CodeIdToken,\n Scope = \"openid profile email\",\n TokenValidationParameters = new TokenValidationParameters\n {\n NameClaimType = \"name\"\n },\n \u002F\u002F More information on why the CookieManager needs to be set can be found here: \n \u002F\u002F https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fsamesite\u002Fowin-samesite\n CookieManager = new SameSiteCookieManager(new SystemWebCookieManager()),\n Notifications = new OpenIdConnectAuthenticationNotifications\n {\n RedirectToIdentityProvider = notification =\u003E\n {\n if (notification.ProtocolMessage.RequestType == OpenIdConnectRequestType.Logout)\n {\n var logoutUri = $\"https:\u002F\u002F{domain}\u002Fv2\u002Flogout?client_id={clientId}\";\n\n var postLogoutUri = notification.ProtocolMessage.PostLogoutRedirectUri;\n if (!string.IsNullOrEmpty(postLogoutUri))\n {\n if (postLogoutUri.StartsWith(\"\u002F\"))\n {\n \u002F\u002F transform to absolute\n var request = notification.Request;\n postLogoutUri = request.Scheme + \":\u002F\u002F\" + request.Host + request.PathBase + postLogoutUri;\n }\n logoutUri += $\"&returnTo={ Uri.EscapeDataString(postLogoutUri)}\";\n }\n\n notification.Response.Redirect(logoutUri);\n notification.HandleResponse();\n }\n return Task.FromResult(0);\n }\n }\n });\n}"},{"filename":"AccountController.cs","language":"csharp","content":"using Microsoft.AspNetCore.Authentication;\nusing Microsoft.AspNetCore.Authentication.Cookies;\n\npublic class AccountController : Controller\n{\n public ActionResult Login(string returnUrl = \"\u002F\")\n {\n HttpContext.GetOwinContext().Authentication.Challenge(\n new AuthenticationProperties\n {\n RedirectUri = returnUrl ?? Url.Action(\"Index\", \"Home\")\n },\n \"Auth0\"\n );\n }\n\n [Authorize]\n public ActionResult UserProfile()\n {\n var claimsIdentity = User.Identity as ClaimsIdentity;\n\n return View(new UserProfileViewModel()\n {\n Name = claimsIdentity?\n .FindFirst(c =\u003E c.Type == claimsIdentity.NameClaimType)?.Value,\n EmailAddress = claimsIdentity?\n .FindFirst(c =\u003E c.Type == ClaimTypes.Email)?.Value,\n ProfileImage = claimsIdentity?\n .FindFirst(c =\u003E c.Type == \"picture\")?.Value\n });\n }\n\n [Authorize]\n public void Logout()\n {\n HttpContext.GetOwinContext().Authentication.SignOut(CookieAuthenticationDefaults.AuthenticationType);\n HttpContext.GetOwinContext().Authentication.SignOut(\"Auth0\");\n }\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login to an ASP.NET Owin application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-aspnet-owin-mvc-samples","path":"Quickstart\u002FSample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnet-owin-mvc-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002FSample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003E\n\u003Cp\u003EOpen the project in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002F\"\u003EVisual Studio\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003Cli\u003E\n\u003Cp\u003EClick the \u003Ccode\u003EStart\u003C\u002Fcode\u003E button or select the menu option \u003Ccode\u003EDebug | Start Debugging\u003C\u002Fcode\u003E or use the keyboard shortcut \u003Ccode\u003EF5\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n","hidden":true}]},"django":{"name":"django","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fdjango","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fpython.png","logo_name":undefined,"logo":"python","title":"Django","author":{"name":"Evan Sims","email":"evan.sims@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fdjango\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Python web application built with the Django framework and Authlib OAuth library.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Create application","anchor":"create-application","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure your .env file","anchor":"configure-your-env-file","level":2},{"content":"Update settings.py","anchor":"update-settings-py","level":2},{"content":"Setup your application","anchor":"setup-your-application","level":2},{"content":"Setup your route handlers","anchor":"setup-your-route-handlers","level":2},{"content":"Triggering authentication with \u002Flogin","anchor":"triggering-authentication-with-login","level":3},{"content":"Finalizing authentication with \u002Fcallback","anchor":"finalizing-authentication-with-callback","level":3},{"content":"Clearing a session with \u002Flogout","anchor":"clearing-a-session-with-logout","level":3},{"content":"There's no place like \u002Fhome","anchor":"there-s-no-place-like-home","level":3},{"content":"Register your routes","anchor":"register-your-routes","level":3},{"content":"Add templates","anchor":"add-templates","level":2},{"content":"Run your application","anchor":"run-your-application","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Python 3","Authlib 1.0","Django 4.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fdjango\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Python web application built with the Django framework and Authlib OAuth library.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-django-web-app","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-django-web-app\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F\"\u003EPython\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epip install -r requirements.txt\npython manage.py migrate \npython manage.py runserver 3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fdjango\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Python web application built with the Django framework and Authlib OAuth library.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Create application","anchor":"create-application","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure your .env file","anchor":"configure-your-env-file","level":2},{"content":"Update settings.py","anchor":"update-settings-py","level":2},{"content":"Setup your application","anchor":"setup-your-application","level":2},{"content":"Setup your route handlers","anchor":"setup-your-route-handlers","level":2},{"content":"Triggering authentication with \u002Flogin","anchor":"triggering-authentication-with-login","level":3},{"content":"Finalizing authentication with \u002Fcallback","anchor":"finalizing-authentication-with-callback","level":3},{"content":"Clearing a session with \u002Flogout","anchor":"clearing-a-session-with-logout","level":3},{"content":"There's no place like \u002Fhome","anchor":"there-s-no-place-like-home","level":3},{"content":"Register your routes","anchor":"register-your-routes","level":3},{"content":"Add templates","anchor":"add-templates","level":2},{"content":"Run your application","anchor":"run-your-application","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Python 3","Authlib 1.0","Django 4.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fdjango\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Python web application built with the Django framework and Authlib OAuth library.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-django-web-app","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-django-web-app\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F\"\u003EPython\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epip install -r requirements.txt\npython manage.py migrate \npython manage.py runserver 3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fdjango\u002Finteractive","title":"Add Login to your Django application","description":"This tutorial demonstrates how to add user login to a Django application.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure your .env file","anchor":"configure-your-env-file","level":2},{"content":"Create an application","anchor":"create-an-application","level":2},{"content":"Update settings.py","anchor":"update-settings-py","level":2},{"content":"Setup your application","anchor":"setup-your-application","level":2},{"content":"Setup your route handlers","anchor":"setup-your-route-handlers","level":2},{"content":"Register your routes","anchor":"register-your-routes","level":2},{"content":"Add templates","anchor":"add-templates","level":2},{"content":"Run your application","anchor":"run-your-application","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Python 3","Authlib 1.0","Django 4.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fdjango\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"webappexample\u002Ftemplates\u002Findex.html","language":"html","content":"\u003Chtml\u003E\n\u003Chead\u003E\n \u003Cmeta charset=\"utf-8\" \u002F\u003E\n \u003Ctitle\u003EAuth0 Example\u003C\u002Ftitle\u003E\n\u003C\u002Fhead\u003E\n\u003Cbody\u003E\n{% if session %}\n \u003Ch1\u003EWelcome {{session.userinfo.name}}!\u003C\u002Fh1\u003E\n \u003Cp\u003E\u003Ca href=\"{% url 'logout' %}\"\u003ELogout\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n \u003Cdiv\u003E\u003Cpre\u003E{{pretty}}\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\n{% else %}\n \u003Ch1\u003EWelcome Guest\u003C\u002Fh1\u003E\n \u003Cp\u003E\u003Ca href=\"{% url 'login' %}\"\u003ELogin\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n{% endif %}\n\u003C\u002Fbody\u003E\n\u003C\u002Fhtml\u003E"},{"filename":"webappexample\u002Fsettings.py","language":"python","content":"import os\nfrom pathlib import Path\nfrom dotenv import load_dotenv, find_dotenv\n\n# Build paths inside the project like this: BASE_DIR \u002F 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nTEMPLATE_DIR = os.path.join(BASE_DIR, \"webappexample\", \"templates\")\n\n# ... other settings ...\n\nTEMPLATES = [\n {\n # Leave other lines as they are; we're just updating `DIRS`.\n \"DIRS\": [TEMPLATE_DIR],\n },\n]\n\n# ... other settings ...\n\n# Load environment definition file\nENV_FILE = find_dotenv()\nif ENV_FILE:\n load_dotenv(ENV_FILE)\n\n# Load Auth0 application settings into memory\nAUTH0_DOMAIN = os.environ.get(\"AUTH0_DOMAIN\")\nAUTH0_CLIENT_ID = os.environ.get(\"AUTH0_CLIENT_ID\")\nAUTH0_CLIENT_SECRET = os.environ.get(\"AUTH0_CLIENT_SECRET\")"},{"filename":"webappexample\u002Furls.py","language":"python","content":"from django.urls import path\n\nfrom . import views\n\nurlpatterns = [\n path(\"\", views.index, name=\"index\"),\n path(\"login\", views.login, name=\"login\"),\n path(\"logout\", views.logout, name=\"logout\"),\n path(\"callback\", views.callback, name=\"callback\"),\n]"},{"filename":"webappexample\u002Fviews.py","language":"python","content":"import json\nfrom authlib.integrations.django_client import OAuth\nfrom django.conf import settings\nfrom django.shortcuts import redirect, render, redirect\nfrom django.urls import reverse\nfrom urllib.parse import quote_plus, urlencode\n\noauth = OAuth()\n\noauth.register(\n \"auth0\",\n client_id=settings.AUTH0_CLIENT_ID,\n client_secret=settings.AUTH0_CLIENT_SECRET,\n client_kwargs={\n \"scope\": \"openid profile email\",\n },\n server_metadata_url=f\"https:\u002F\u002F{settings.AUTH0_DOMAIN}\u002F.well-known\u002Fopenid-configuration\",\n)\n\ndef login(request):\n return oauth.auth0.authorize_redirect(\n request, request.build_absolute_uri(reverse(\"callback\"))\n )\n\ndef callback(request):\n token = oauth.auth0.authorize_access_token(request)\n request.session[\"user\"] = token\n return redirect(request.build_absolute_uri(reverse(\"index\")))\n\ndef logout(request):\n request.session.clear()\n\n return redirect(\n f\"https:\u002F\u002F{settings.AUTH0_DOMAIN}\u002Fv2\u002Flogout?\"\n + urlencode(\n {\n \"returnTo\": request.build_absolute_uri(reverse(\"index\")),\n \"client_id\": settings.AUTH0_CLIENT_ID,\n },\n quote_via=quote_plus,\n ),\n )\n\ndef index(request):\n return render(\n request,\n \"index.html\",\n context={\n \"session\": request.session.get(\"user\"),\n \"pretty\": json.dumps(request.session.get(\"user\"), indent=4),\n },\n )"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Django application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-django-web-app","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-django-web-app\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F\"\u003EPython\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epip install -r requirements.txt\npython manage.py migrate \npython manage.py runserver 3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"express":{"name":"express","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fexpress","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fnode.png","logo_name":"nodejs","logo":"javascript","title":"Express","author":{"name":"David Patrick","email":"david.patrick@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"express-openid-connect","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fexpress-openid-connect","logo":"javascript"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fexpress\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login, logout, and profile to a Node.js Express application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"1. Configure Callback URL","anchor":"1-configure-callback-url","level":3},{"content":"2. Configure Logout URL","anchor":"2-configure-logout-url","level":3},{"content":"3. Get Your Application Keys","anchor":"3-get-your-application-keys","level":3},{"content":"Integrate Auth0","anchor":"integrate-auth0","level":2},{"content":"4. Install Dependencies","anchor":"4-install-dependencies","level":3},{"content":"5. Configure Router","anchor":"5-configure-router","level":3},{"content":"Login","anchor":"login","level":2},{"content":"Display User Profile","anchor":"display-user-profile","level":2},{"content":"Logout","anchor":"logout","level":2},{"content":"What's next?","anchor":"what-s-next-","level":2}],"nextSteps":[],"showSteps":true,"requirements":["NodeJS 10.13+","Express 4.17+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fexpress\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login, logout, and profile to a Node.js Express application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-express-webapp-sample","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-express-webapp-sample\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fexpress\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login, logout, and profile to a Node.js Express application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"1. Configure Callback URL","anchor":"1-configure-callback-url","level":3},{"content":"2. Configure Logout URL","anchor":"2-configure-logout-url","level":3},{"content":"3. Get Your Application Keys","anchor":"3-get-your-application-keys","level":3},{"content":"Integrate Auth0","anchor":"integrate-auth0","level":2},{"content":"4. Install Dependencies","anchor":"4-install-dependencies","level":3},{"content":"5. Configure Router","anchor":"5-configure-router","level":3},{"content":"Login","anchor":"login","level":2},{"content":"Display User Profile","anchor":"display-user-profile","level":2},{"content":"Logout","anchor":"logout","level":2},{"content":"What's next?","anchor":"what-s-next-","level":2}],"nextSteps":[],"showSteps":true,"requirements":["NodeJS 10.13+","Express 4.17+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fexpress\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login, logout, and profile to a Node.js Express application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-express-webapp-sample","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-express-webapp-sample\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fexpress\u002Finteractive","title":"Add Login to your Express App","description":"Auth0 allows you to add authentication to almost any application type quickly. This guide demonstrates how to integrate Auth0, add user login, logout, and profile to a Node.js Express application using the Express OpenID Connect SDK.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Express OpenID Connect SDK","anchor":"install-the-express-openid-connect-sdk","level":2},{"content":"Configure Router","anchor":"configure-router","level":3},{"content":"Display User Profile","anchor":"display-user-profile","level":2}],"nextSteps":[],"showSteps":true,"requirements":["NodeJS 10.13+","Express 4.17+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fexpress\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"server.js","language":"javascript","content":"const express = require('express');\nconst { auth, requiresAuth } = require('express-openid-connect');\nconst app = express();\n\nconst config = {\n authRequired: false,\n auth0Logout: true,\n baseURL: 'http:\u002F\u002Flocalhost:3000',\n clientID: '__AUTH0_CLIENT_ID__',\n issuerBaseURL: 'https:\u002F\u002F__AUTH0_NAMESPACE__',\n secret: 'LONG_RANDOM_STRING'\n};\n\n\u002F\u002F The `auth` router attaches \u002Flogin, \u002Flogout\n\u002F\u002F and \u002Fcallback routes to the baseURL\napp.use(auth(config));\n\n\u002F\u002F req.oidc.isAuthenticated is provided from the auth router\napp.get('\u002F', (req, res) =\u003E {\n res.send(\n req.oidc.isAuthenticated() ? 'Logged in' : 'Logged out'\n )\n});\n\n\u002F\u002F The \u002Fprofile route will show the user profile as JSON\napp.get('\u002Fprofile', requiresAuth(), (req, res) =\u003E {\n res.send(JSON.stringify(req.oidc.user, null, 2));\n});\n\napp.listen(3000, function() {\n console.log('Listening on http:\u002F\u002Flocalhost:3000');\n});"}],"interactive":true,"downloadBoxDescription":"Auth0 allows you to add authentication to almost any application type quickly. This guide demonstrates how to integrate Auth0, add user login, logout, and profile to a Node.js Express application using the Express OpenID Connect SDK.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-express-webapp-sample","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-express-webapp-sample\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"golang":{"name":"golang","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fgolang","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fgolang.png","logo_name":undefined,"logo":"golang","title":"Go","author":{"name":"Sergiu Ghitea","email":"sergiu.ghitea@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fgolang\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Go web application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Go to Use Auth0","anchor":"configure-go-to-use-auth0","level":2},{"content":"Download dependencies","anchor":"download-dependencies","level":3},{"content":"Configure your application","anchor":"configure-your-application","level":3},{"content":"Configure OAuth2 and OpenID Connect packages","anchor":"configure-oauth2-and-openid-connect-packages","level":3},{"content":"Setting up your application routes","anchor":"setting-up-your-application-routes","level":3},{"content":"Serving your application","anchor":"serving-your-application","level":3},{"content":"Logging In","anchor":"logging-in","level":2},{"content":"Handling Authentication Callback","anchor":"handling-authentication-callback","level":2},{"content":"Displaying User Information","anchor":"displaying-user-information","level":2},{"content":"Logging Out","anchor":"logging-out","level":2},{"content":"Optional Steps","anchor":"optional-steps","level":2},{"content":"Checking if the user is authenticated","anchor":"checking-if-the-user-is-authenticated","level":3}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Go 1.21+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fgolang\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Go web application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-golang-web-app","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-golang-web-app\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fgolang.org\u002Fdl\u002F\"\u003EGo\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ego mod vendor\ngo run main.go\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fgolang\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Go web application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Go to Use Auth0","anchor":"configure-go-to-use-auth0","level":2},{"content":"Download dependencies","anchor":"download-dependencies","level":3},{"content":"Configure your application","anchor":"configure-your-application","level":3},{"content":"Configure OAuth2 and OpenID Connect packages","anchor":"configure-oauth2-and-openid-connect-packages","level":3},{"content":"Setting up your application routes","anchor":"setting-up-your-application-routes","level":3},{"content":"Serving your application","anchor":"serving-your-application","level":3},{"content":"Logging In","anchor":"logging-in","level":2},{"content":"Handling Authentication Callback","anchor":"handling-authentication-callback","level":2},{"content":"Displaying User Information","anchor":"displaying-user-information","level":2},{"content":"Logging Out","anchor":"logging-out","level":2},{"content":"Optional Steps","anchor":"optional-steps","level":2},{"content":"Checking if the user is authenticated","anchor":"checking-if-the-user-is-authenticated","level":3}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Go 1.21+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fgolang\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Go web application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-golang-web-app","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-golang-web-app\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fgolang.org\u002Fdl\u002F\"\u003EGo\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ego mod vendor\ngo run main.go\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fgolang\u002Finteractive","title":"Add Login to your Go web application","description":"This tutorial demonstrates how to add user login to a Go web application using Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure the environment variables","anchor":"configure-the-environment-variables","level":2},{"content":"Configure OAuth2 and OpenID Connect packages","anchor":"configure-oauth2-and-openid-connect-packages","level":2},{"content":"Set up your application routes","anchor":"set-up-your-application-routes","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Handle authentication callback","anchor":"handle-authentication-callback","level":2},{"content":"Display user profile information","anchor":"display-user-profile-information","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Protect routes","anchor":"protect-routes","level":2},{"content":"Serve your application","anchor":"serve-your-application","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Go 1.21+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fgolang\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"auth.go","language":"go","content":"\u002F\u002F Save this file in .\u002Fplatform\u002Fauthenticator\u002Fauth.go\n\npackage authenticator\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"os\"\n\n\t\"github.com\u002Fcoreos\u002Fgo-oidc\u002Fv3\u002Foidc\"\n\t\"golang.org\u002Fx\u002Foauth2\"\n)\n\n\u002F\u002F Authenticator is used to authenticate our users.\ntype Authenticator struct {\n\t*oidc.Provider\n\toauth2.Config\n}\n\n\u002F\u002F New instantiates the *Authenticator.\nfunc New() (*Authenticator, error) {\n\tprovider, err := oidc.NewProvider(\n\t\tcontext.Background(),\n\t\t\"https:\u002F\u002F\"+os.Getenv(\"AUTH0_DOMAIN\")+\"\u002F\",\n\t)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tconf := oauth2.Config{\n\t\tClientID: os.Getenv(\"AUTH0_CLIENT_ID\"),\n\t\tClientSecret: os.Getenv(\"AUTH0_CLIENT_SECRET\"),\n\t\tRedirectURL: os.Getenv(\"AUTH0_CALLBACK_URL\"),\n\t\tEndpoint: provider.Endpoint(),\n\t\tScopes: []string{oidc.ScopeOpenID, \"profile\"},\n\t}\n\n\treturn &Authenticator{\n\t\tProvider: provider,\n\t\tConfig: conf,\n\t}, nil\n}\n\n\u002F\u002F VerifyIDToken verifies that an *oauth2.Token is a valid *oidc.IDToken.\nfunc (a *Authenticator) VerifyIDToken(ctx context.Context, token *oauth2.Token) (*oidc.IDToken, error) {\n\trawIDToken, ok := token.Extra(\"id_token\").(string)\n\tif !ok {\n\t\treturn nil, errors.New(\"no id_token field in oauth2 token\")\n\t}\n\n\toidcConfig := &oidc.Config{\n\t\tClientID: a.ClientID,\n\t}\n\n\treturn a.Verifier(oidcConfig).Verify(ctx, rawIDToken)\n}"},{"filename":"callback.go","language":"go","content":"\u002F\u002F Save this file in .\u002Fweb\u002Fapp\u002Fcallback\u002Fcallback.go\n\npackage callback\n\nimport (\n\t\"net\u002Fhttp\"\n\n\t\"github.com\u002Fgin-contrib\u002Fsessions\"\n\t\"github.com\u002Fgin-gonic\u002Fgin\"\n\n\t\"01-Login\u002Fplatform\u002Fauthenticator\"\n)\n\n\u002F\u002F Handler for our callback.\nfunc Handler(auth *authenticator.Authenticator) gin.HandlerFunc {\n\treturn func(ctx *gin.Context) {\n\t\tsession := sessions.Default(ctx)\n\t\tif ctx.Query(\"state\") != session.Get(\"state\") {\n\t\t\tctx.String(http.StatusBadRequest, \"Invalid state parameter.\")\n\t\t\treturn\n\t\t}\n\n\t\t\u002F\u002F Exchange an authorization code for a token.\n\t\ttoken, err := auth.Exchange(ctx.Request.Context(), ctx.Query(\"code\"))\n\t\tif err != nil {\n\t\t\tctx.String(http.StatusUnauthorized, \"Failed to exchange an authorization code for a token.\")\n\t\t\treturn\n\t\t}\n\n\t\tidToken, err := auth.VerifyIDToken(ctx.Request.Context(), token)\n\t\tif err != nil {\n\t\t\tctx.String(http.StatusInternalServerError, \"Failed to verify ID Token.\")\n\t\t\treturn\n\t\t}\n\n\t\tvar profile map[string]interface{}\n\t\tif err := idToken.Claims(&profile); err != nil {\n\t\t\tctx.String(http.StatusInternalServerError, err.Error())\n\t\t\treturn\n\t\t}\n\n\t\tsession.Set(\"access_token\", token.AccessToken)\n\t\tsession.Set(\"profile\", profile)\n\t\tif err := session.Save(); err != nil {\n\t\t\tctx.String(http.StatusInternalServerError, err.Error())\n\t\t\treturn\n\t\t}\n\n\t\t\u002F\u002F Redirect to logged in page.\n\t\tctx.Redirect(http.StatusTemporaryRedirect, \"\u002Fuser\")\n\t}\n}"},{"filename":".env","language":"shell","content":"# Save this file in .\u002F.env\n\n# The URL of our Auth0 Tenant Domain.\n# If you're using a Custom Domain, be sure to set this to that value instead.\nAUTH0_DOMAIN='__AUTH0_NAMESPACE__'\n\n# Our Auth0 application's Client ID.\nAUTH0_CLIENT_ID='__AUTH0_CLIENT_ID__'\n\n# Our Auth0 application's Client Secret.\nAUTH0_CLIENT_SECRET='__AUTH0_CLIENT_SECRET__'\n\n# The Callback URL of our application.\nAUTH0_CALLBACK_URL='http:\u002F\u002Flocalhost:3000\u002Fcallback'"},{"filename":"go.mod","language":"go-mod","content":"\u002F\u002F Save this file in .\u002Fgo.mod\n\nmodule 01-Login\n\ngo 1.21\n\nrequire (\n\tgithub.com\u002Fcoreos\u002Fgo-oidc\u002Fv3 v3.8.0\n\tgithub.com\u002Fgin-contrib\u002Fsessions v0.0.5\n\tgithub.com\u002Fgin-gonic\u002Fgin v1.9.1\n\tgithub.com\u002Fjoho\u002Fgodotenv v1.5.1\n\tgolang.org\u002Fx\u002Foauth2 v0.15.0\n)"},{"filename":"isAuthenticated.go","language":"go","content":"\u002F\u002F Save this file in .\u002Fplatform\u002Fmiddleware\u002FisAuthenticated.go\n\npackage middleware\n\nimport (\n\t\"net\u002Fhttp\"\n\n\t\"github.com\u002Fgin-contrib\u002Fsessions\"\n\t\"github.com\u002Fgin-gonic\u002Fgin\"\n)\n\n\u002F\u002F IsAuthenticated is a middleware that checks if\n\u002F\u002F the user has already been authenticated previously.\nfunc IsAuthenticated(ctx *gin.Context) {\n\tif sessions.Default(ctx).Get(\"profile\") == nil {\n\t\tctx.Redirect(http.StatusSeeOther, \"\u002F\")\n\t} else {\n\t\tctx.Next()\n\t}\n}"},{"filename":"login.go","language":"go","content":"\u002F\u002F Save this file in .\u002Fweb\u002Fapp\u002Flogin\u002Flogin.go\n\npackage login\n\nimport (\n\t\"crypto\u002Frand\"\n\t\"encoding\u002Fbase64\"\n\t\"net\u002Fhttp\"\n\n\t\"github.com\u002Fgin-contrib\u002Fsessions\"\n\t\"github.com\u002Fgin-gonic\u002Fgin\"\n\n\t\"01-Login\u002Fplatform\u002Fauthenticator\"\n)\n\n\u002F\u002F Handler for our login.\nfunc Handler(auth *authenticator.Authenticator) gin.HandlerFunc {\n\treturn func(ctx *gin.Context) {\n\t\tstate, err := generateRandomState()\n\t\tif err != nil {\n\t\t\tctx.String(http.StatusInternalServerError, err.Error())\n\t\t\treturn\n\t\t}\n\n\t\t\u002F\u002F Save the state inside the session.\n\t\tsession := sessions.Default(ctx)\n\t\tsession.Set(\"state\", state)\n\t\tif err := session.Save(); err != nil {\n\t\t\tctx.String(http.StatusInternalServerError, err.Error())\n\t\t\treturn\n\t\t}\n\n\t\tctx.Redirect(http.StatusTemporaryRedirect, auth.AuthCodeURL(state))\n\t}\n}\n\nfunc generateRandomState() (string, error) {\n\tb := make([]byte, 32)\n\t_, err := rand.Read(b)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tstate := base64.StdEncoding.EncodeToString(b)\n\n\treturn state, nil\n}"},{"filename":"logout.go","language":"go","content":"\u002F\u002F Save this file in .\u002Fweb\u002Fapp\u002Flogout\u002Flogout.go\n\npackage logout\n\nimport (\n\t\"net\u002Fhttp\"\n\t\"net\u002Furl\"\n\t\"os\"\n\n\t\"github.com\u002Fgin-gonic\u002Fgin\"\n)\n\n\u002F\u002F Handler for our logout.\nfunc Handler(ctx *gin.Context) {\n\tlogoutUrl, err := url.Parse(\"https:\u002F\u002F\" + os.Getenv(\"AUTH0_DOMAIN\") + \"\u002Fv2\u002Flogout\")\n\tif err != nil {\n\t\tctx.String(http.StatusInternalServerError, err.Error())\n\t\treturn\n\t}\n\n\tscheme := \"http\"\n\tif ctx.Request.TLS != nil {\n\t\tscheme = \"https\"\n\t}\n\n\treturnTo, err := url.Parse(scheme + \":\u002F\u002F\" + ctx.Request.Host)\n\tif err != nil {\n\t\tctx.String(http.StatusInternalServerError, err.Error())\n\t\treturn\n\t}\n\n\tparameters := url.Values{}\n\tparameters.Add(\"returnTo\", returnTo.String())\n\tparameters.Add(\"client_id\", os.Getenv(\"AUTH0_CLIENT_ID\"))\n\tlogoutUrl.RawQuery = parameters.Encode()\n\n\tctx.Redirect(http.StatusTemporaryRedirect, logoutUrl.String())\n}"},{"filename":"main.go","language":"go","content":"\u002F\u002F Save this file in .\u002Fmain.go\n\npackage main\n\nimport (\n\t\"log\"\n\t\"net\u002Fhttp\"\n\n\t\"github.com\u002Fjoho\u002Fgodotenv\"\n\n\t\"01-Login\u002Fplatform\u002Fauthenticator\"\n\t\"01-Login\u002Fplatform\u002Frouter\"\n)\n\nfunc main() {\n\tif err := godotenv.Load(); err != nil {\n\t\tlog.Fatalf(\"Failed to load the env vars: %v\", err)\n\t}\n\n\tauth, err := authenticator.New()\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to initialize the authenticator: %v\", err)\n\t}\n\n\trtr := router.New(auth)\n\n\tlog.Print(\"Server listening on http:\u002F\u002Flocalhost:3000\u002F\")\n\tif err := http.ListenAndServe(\"0.0.0.0:3000\", rtr); err != nil {\n\t\tlog.Fatalf(\"There was an error with the http server: %v\", err)\n\t}\n}"},{"filename":"router.go","language":"go","content":"\u002F\u002F Save this file in .\u002Fplatform\u002Frouter\u002Frouter.go\n\npackage router\n\nimport (\n\t\"encoding\u002Fgob\"\n\t\"net\u002Fhttp\"\n\n\t\"github.com\u002Fgin-contrib\u002Fsessions\"\n\t\"github.com\u002Fgin-contrib\u002Fsessions\u002Fcookie\"\n\t\"github.com\u002Fgin-gonic\u002Fgin\"\n\n\t\"01-Login\u002Fplatform\u002Fauthenticator\"\n\t\"01-Login\u002Fplatform\u002Fmiddleware\"\n\t\"01-Login\u002Fweb\u002Fapp\u002Fcallback\"\n\t\"01-Login\u002Fweb\u002Fapp\u002Flogin\"\n\t\"01-Login\u002Fweb\u002Fapp\u002Flogout\"\n\t\"01-Login\u002Fweb\u002Fapp\u002Fuser\"\n)\n\n\u002F\u002F New registers the routes and returns the router.\nfunc New(auth *authenticator.Authenticator) *gin.Engine {\n\trouter := gin.Default()\n\n\t\u002F\u002F To store custom types in our cookies,\n\t\u002F\u002F we must first register them using gob.Register\n\tgob.Register(map[string]interface{}{})\n\n\tstore := cookie.NewStore([]byte(\"secret\"))\n\trouter.Use(sessions.Sessions(\"auth-session\", store))\n\n\trouter.Static(\"\u002Fpublic\", \"web\u002Fstatic\")\n\trouter.LoadHTMLGlob(\"web\u002Ftemplate\u002F*\")\n\n\trouter.GET(\"\u002F\", func(ctx *gin.Context) {\n\t\tctx.HTML(http.StatusOK, \"home.html\", nil)\n\t})\n\trouter.GET(\"\u002Flogin\", login.Handler(auth))\n\trouter.GET(\"\u002Fcallback\", callback.Handler(auth))\n\trouter.GET(\"\u002Fuser\", user.Handler)\n\trouter.GET(\"\u002Flogout\", logout.Handler)\n\n\treturn router\n}"},{"filename":"user.go","language":"go","content":"\u002F\u002F Save this file in .\u002Fweb\u002Fapp\u002Fuser\u002Fuser.go\n\npackage user\n\nimport (\n\t\"net\u002Fhttp\"\n\n\t\"github.com\u002Fgin-contrib\u002Fsessions\"\n\t\"github.com\u002Fgin-gonic\u002Fgin\"\n)\n\n\u002F\u002F Handler for our logged-in user page.\nfunc Handler(ctx *gin.Context) {\n\tsession := sessions.Default(ctx)\n\tprofile := session.Get(\"profile\")\n\n\tctx.HTML(http.StatusOK, \"user.html\", profile)\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Go web application using Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-golang-web-app","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-golang-web-app\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fgolang.org\u002Fdl\u002F\"\u003EGo\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ego mod vendor\ngo run main.go\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"java":{"name":"java","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fjava","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fjava.png","logo_name":undefined,"logo":"java","title":"Java","author":{"name":"Jim Anderson","email":"jim.anderson@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-java-mvc-common","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-java-mvc-common","logo":"java"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fjava\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Java Servlet application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate Auth0 in your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Setup Dependencies","anchor":"setup-dependencies","level":3},{"content":"Configure your Java App","anchor":"configure-your-java-app","level":3},{"content":"Project Structure","anchor":"project-structure","level":3},{"content":"Create the AuthenticationController","anchor":"create-the-authenticationcontroller","level":2},{"content":"Trigger Authentication","anchor":"trigger-authentication","level":2},{"content":"Display the Home Page","anchor":"display-the-home-page","level":2},{"content":"Handle Logout","anchor":"handle-logout","level":2},{"content":"Run the Sample","anchor":"run-the-sample","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Java 8","Gradle 3.3 and up"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fjava\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Java Servlet application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-servlet-sample","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-servlet-sample\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Flogin\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Fwww.oracle.com\u002Ftechnetwork\u002Fjava\u002Fjavase\u002Fdownloads\u002F\"\u003EJava\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew clean appRun\n# In Windows\ngradlew clean appRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fjava\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Java Servlet application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate Auth0 in your Application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Setup Dependencies","anchor":"setup-dependencies","level":3},{"content":"Configure your Java App","anchor":"configure-your-java-app","level":3},{"content":"Project Structure","anchor":"project-structure","level":3},{"content":"Create the AuthenticationController","anchor":"create-the-authenticationcontroller","level":2},{"content":"Trigger Authentication","anchor":"trigger-authentication","level":2},{"content":"Display the Home Page","anchor":"display-the-home-page","level":2},{"content":"Handle Logout","anchor":"handle-logout","level":2},{"content":"Run the Sample","anchor":"run-the-sample","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Java 8","Gradle 3.3 and up"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fjava\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Java Servlet application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-servlet-sample","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-servlet-sample\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Flogin\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Fwww.oracle.com\u002Ftechnetwork\u002Fjava\u002Fjavase\u002Fdownloads\u002F\"\u003EJava\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew clean appRun\n# In Windows\ngradlew clean appRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fjava\u002Finteractive","title":"Add Login to your Java Servlet application","description":"This tutorial demonstrates how to add user login to a Java Servlet application.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate Auth0 in your application","anchor":"integrate-auth0-in-your-application","level":2},{"content":"Setup dependencies","anchor":"setup-dependencies","level":3},{"content":"Configure your Java application","anchor":"configure-your-java-application","level":2},{"content":"Project structure","anchor":"project-structure","level":3},{"content":"Create the AuthenticationController","anchor":"create-the-authenticationcontroller","level":2},{"content":"Login Redirection","anchor":"login-redirection","level":2},{"content":"Handling the tokens","anchor":"handling-the-tokens","level":2},{"content":"Display the home page","anchor":"display-the-home-page","level":2},{"content":"Handle logout","anchor":"handle-logout","level":2},{"content":"Run the sample","anchor":"run-the-sample","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Java 8","Gradle 3.3 and up"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fjava\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"web.xml","language":"xml","content":"\u003Ccontext-param\u003E\n \u003Cparam-name\u003Ecom.auth0.domain\u003C\u002Fparam-name\u003E\n \u003Cparam-value\u003E__AUTH0_NAMESPACE__\u003C\u002Fparam-value\u003E\n\u003C\u002Fcontext-param\u003E\n\n\u003Ccontext-param\u003E\n \u003Cparam-name\u003Ecom.auth0.clientId\u003C\u002Fparam-name\u003E\n \u003Cparam-value\u003E__AUTH0_CLIENT_ID__\u003C\u002Fparam-value\u003E\n\u003C\u002Fcontext-param\u003E\n\n\u003Ccontext-param\u003E\n \u003Cparam-name\u003Ecom.auth0.clientSecret\u003C\u002Fparam-name\u003E\n \u003Cparam-value\u003EYOUR_CLIENT_SECRET\u003C\u002Fparam-value\u003E\n\u003C\u002Fcontext-param\u003E"},{"filename":"AuthenticationControllerProvider.java","language":"java","content":"class AuthenticationControllerProvider {\n\n private AuthenticationControllerProvider() {}\n\n private static AuthenticationController INSTANCE;\n\n \u002F\u002F if multiple threads may call this, synchronize this method and consider double locking\n static AuthenticationController getInstance(ServletConfig config) throws UnsupportedEncodingException {\n if (INSTANCE == null) {\n String domain = config.getServletContext().getInitParameter(\"com.auth0.domain\");\n String clientId = config.getServletContext().getInitParameter(\"com.auth0.clientId\");\n String clientSecret = config.getServletContext().getInitParameter(\"com.auth0.clientSecret\");\n\n if (domain == null || clientId == null || clientSecret == null) {\n throw new IllegalArgumentException(\"Missing domain, clientId, or clientSecret. Did you update src\u002Fmain\u002Fwebapp\u002FWEB-INF\u002Fweb.xml?\");\n }\n\n \u002F\u002F JwkProvider required for RS256 tokens. If using HS256, do not use.\n JwkProvider jwkProvider = new JwkProviderBuilder(domain).build();\n INSTANCE = AuthenticationController.newBuilder(domain, clientId, clientSecret)\n .withJwkProvider(jwkProvider)\n .build();\n }\n\n return INSTANCE;\n }\n}"},{"filename":"LoginServlet.java","language":"java","content":"@WebServlet(urlPatterns = {\"\u002Flogin\"})\npublic class LoginServlet extends HttpServlet {\n private AuthenticationController authenticationController;\n private String domain;\n\n @Override\n public void init(ServletConfig config) throws ServletException {\n super.init(config);\n domain = config.getServletContext().getInitParameter(\"com.auth0.domain\");\n authenticationController = AuthenticationControllerProvider.getInstance(config);\n }\n\n @Override\n protected void doGet(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException {\n String redirectUri = req.getScheme() + \":\u002F\u002F\" + req.getServerName();\n if ((req.getScheme().equals(\"http\") && req.getServerPort() != 80) || (req.getScheme().equals(\"https\") && req.getServerPort() != 443)) {\n redirectUri += \":\" + req.getServerPort();\n }\n redirectUri += \"\u002Fcallback\";\n\n String authorizeUrl = authenticationController.buildAuthorizeUrl(req, res, redirectUri)\n .build();\n res.sendRedirect(authorizeUrl);\n }\n}"},{"filename":"CallbackServlet.java","language":"java","content":"@WebServlet(urlPatterns = {\"\u002Fcallback\"})\npublic class CallbackServlet extends HttpServlet {\n\n private String redirectOnSuccess;\n private String redirectOnFail;\n private AuthenticationController authenticationController;\n\n @Override\n public void init(ServletConfig config) throws ServletException {\n super.init(config);\n redirectOnSuccess = \"\u002Fportal\u002Fhome\";\n redirectOnFail = \"\u002Flogin\";\n authenticationController = AuthenticationControllerProvider.getInstance(config);\n }\n\n @Override\n public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {\n handle(req, res);\n }\n\n @Override\n public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {\n handle(req, res);\n }\n\n private void handle(HttpServletRequest req, HttpServletResponse res) throws IOException {\n try {\n \u002F\u002F Parse the request\n Tokens tokens = authenticationController.handle(req, res);\n SessionUtils.set(req, \"accessToken\", tokens.getAccessToken());\n SessionUtils.set(req, \"idToken\", tokens.getIdToken());\n res.sendRedirect(redirectOnSuccess);\n } catch (IdentityVerificationException e) {\n e.printStackTrace();\n res.sendRedirect(redirectOnFail);\n }\n }\n}"},{"filename":"HomeServlet.java","language":"java","content":"@WebServlet(urlPatterns = {\"\u002Fportal\u002Fhome\"})\npublic class HomeServlet extends HttpServlet {\n\n @Override\n protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {\n final String accessToken = (String) SessionUtils.get(req, \"accessToken\");\n final String idToken = (String) SessionUtils.get(req, \"idToken\");\n if (accessToken != null) {\n req.setAttribute(\"userId\", accessToken);\n } else if (idToken != null) {\n req.setAttribute(\"userId\", idToken);\n }\n req.getRequestDispatcher(\"\u002FWEB-INF\u002Fjsp\u002Fhome.jsp\").forward(req, res);\n }\n}"},{"filename":"LogoutServlet.java","language":"java","content":"@WebServlet(urlPatterns = {\"\u002Flogout\"})\npublic class LogoutServlet extends HttpServlet {\n\n private String domain;\n private String clientId;\n\n @Override\n public void init(ServletConfig config) {\n domain = config.getServletContext().getInitParameter(\"com.auth0.domain\");\n clientId = config.getServletContext().getInitParameter(\"com.auth0.clientId\");\n }\n\n @Override\n protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {\n if (request.getSession() != null) {\n request.getSession().invalidate();\n }\n String returnUrl = String.format(\"%s:\u002F\u002F%s\", request.getScheme(), request.getServerName());\n if ((request.getScheme().equals(\"http\") && request.getServerPort() != 80) || (request.getScheme().equals(\"https\") && request.getServerPort() != 443)) {\n returnUrl += \":\" + request.getServerPort();\n }\n returnUrl += \"\u002Flogin\";\n String logoutUrl = String.format(\n \"https:\u002F\u002F%s\u002Fv2\u002Flogout?client_id=%s&returnTo=%s\",\n domain,\n clientId,\n returnUrl\n );\n response.sendRedirect(logoutUrl);\n }\n\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Java Servlet application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-servlet-sample","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-servlet-sample\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Flogin\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Fwww.oracle.com\u002Ftechnetwork\u002Fjava\u002Fjavase\u002Fdownloads\u002F\"\u003EJava\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew clean appRun\n# In Windows\ngradlew clean appRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"java-ee":{"name":"java-ee","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fjava-ee","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fjava.png","logo_name":"java","logo":"java","title":"Java EE","author":{"name":"Jim Anderson","email":"jim.anderson@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-java-mvc-common","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-java-mvc-common","logo":"java"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fjava-ee\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Java EE web application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Java EE to use Auth0","anchor":"configure-java-ee-to-use-auth0","level":2},{"content":"Set up dependencies","anchor":"set-up-dependencies","level":3},{"content":"Configure your Java EE application","anchor":"configure-your-java-ee-application","level":3},{"content":"Configure Java EE Security","anchor":"configure-java-ee-security","level":2},{"content":"Trigger authentication","anchor":"trigger-authentication","level":2},{"content":"Display user information","anchor":"display-user-information","level":2},{"content":"Handle logout","anchor":"handle-logout","level":2},{"content":"Run the sample","anchor":"run-the-sample","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Java 11"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fjava-ee\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Java EE web application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-java-ee-sample","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-java-ee-sample\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002F\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Fwww.oracle.com\u002Ftechnetwork\u002Fjava\u002Fjavase\u002Fdownloads\u002F\"\u003EJava\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fmvnw clean wildfly:run\n# In Windows\nmvnw.cmd clean wildfly:run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fjava-ee\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Java EE web application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Java EE to use Auth0","anchor":"configure-java-ee-to-use-auth0","level":2},{"content":"Set up dependencies","anchor":"set-up-dependencies","level":3},{"content":"Configure your Java EE application","anchor":"configure-your-java-ee-application","level":3},{"content":"Configure Java EE Security","anchor":"configure-java-ee-security","level":2},{"content":"Trigger authentication","anchor":"trigger-authentication","level":2},{"content":"Display user information","anchor":"display-user-information","level":2},{"content":"Handle logout","anchor":"handle-logout","level":2},{"content":"Run the sample","anchor":"run-the-sample","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Java 11"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fjava-ee\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Java EE web application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-java-ee-sample","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-java-ee-sample\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002F\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Fwww.oracle.com\u002Ftechnetwork\u002Fjava\u002Fjavase\u002Fdownloads\u002F\"\u003EJava\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fmvnw clean wildfly:run\n# In Windows\nmvnw.cmd clean wildfly:run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":undefined},"java-spring-boot":{"name":"java-spring-boot","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fjava-spring-boot","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fspring.png","logo_name":"spring","logo":"spring","title":"Java Spring Boot","author":{"name":"Jim Anderson","email":"jim.anderson@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"Okta Spring Boot Starter","url":"https:\u002F\u002Fgithub.com\u002Fokta\u002Fokta-spring-boot\u002F","logo":"spring"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fjava-spring-boot\u002F01-login","title":"Login","description":"The Okta Spring Boot Starter makes it easy to add login to your Spring Boot application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Spring Boot Application","anchor":"configure-spring-boot-application","level":2},{"content":"Add dependencies","anchor":"add-dependencies","level":3},{"content":"Configure Spring Security","anchor":"configure-spring-security","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Java 17"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fjava-spring-boot\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"The Okta Spring Boot Starter makes it easy to add login to your Spring Boot application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-spring-boot-login-samples","path":"mvc-login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-spring-boot-login-samples\u002Ftree\u002Fmaster\u002Fmvc-login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Flogin\u002Foauth2\u002Fcode\u002Fauth0\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002F\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Fwww.oracle.com\u002Ftechnetwork\u002Fjava\u002Fjavase\u002Fdownloads\u002F\"\u003EJava\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew clean bootRun\n# In Windows\ngradlew clean bootRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fjava-spring-boot\u002F01-login","title":"Login","description":"The Okta Spring Boot Starter makes it easy to add login to your Spring Boot application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Spring Boot Application","anchor":"configure-spring-boot-application","level":2},{"content":"Add dependencies","anchor":"add-dependencies","level":3},{"content":"Configure Spring Security","anchor":"configure-spring-security","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Java 17"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fjava-spring-boot\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"The Okta Spring Boot Starter makes it easy to add login to your Spring Boot application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-spring-boot-login-samples","path":"mvc-login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-spring-boot-login-samples\u002Ftree\u002Fmaster\u002Fmvc-login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Flogin\u002Foauth2\u002Fcode\u002Fauth0\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002F\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Fwww.oracle.com\u002Ftechnetwork\u002Fjava\u002Fjavase\u002Fdownloads\u002F\"\u003EJava\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew clean bootRun\n# In Windows\ngradlew clean bootRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fjava-spring-boot\u002Finteractive","title":"Add login to your Spring Webapp","description":"The Okta Spring Boot Starter makes it easy to add login to your Spring Boot application.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Spring Boot application","anchor":"configure-spring-boot-application","level":2},{"content":"Add Spring dependencies","anchor":"add-spring-dependencies","level":3},{"content":"Configure Spring Security","anchor":"configure-spring-security","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add front page","anchor":"add-front-page","level":2},{"content":"Add controller","anchor":"add-controller","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Java 17"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fjava-spring-boot\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"application.yml","language":"yaml","content":"okta:\n oauth2:\n issuer: https:\u002F\u002F__AUTH0_NAMESPACE__\u002F\n client-id: __AUTH0_CLIENT_ID__\n client-secret: YOUR_CLIENT_SECRET"},{"filename":"SecurityConfig.java","language":"java","content":"package com.auth0.example;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity;\nimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;\nimport org.springframework.security.web.SecurityFilterChain;\n\nimport static org.springframework.security.config.Customizer.withDefaults;\n\n@Configuration\n@EnableWebSecurity\npublic class SecurityConfig {\n\n @Bean\n public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {\n http\n .authorizeHttpRequests(authorize -\u003E authorize\n .anyRequest().authenticated()\n )\n .oauth2Login(withDefaults());\n return http.build();\n }\n}"},{"filename":"index.html","language":"html","content":"\u003C!-- src\u002Fmain\u002Fresources\u002Ftemplates\u002Findex.html --\u003E\n\u003Chtml lang=\"en\" xmlns:th=\"http:\u002F\u002Fwww.thymeleaf.org\" xmlns:sec=\"http:\u002F\u002Fwww.thymeleaf.org\u002Fthymeleaf-extras-springsecurity5\"\u003E\n \u003Cbody\u003E\n \u003Cdiv sec:authorize=\"!isAuthenticated()\"\u003E\n \u003Ca th:href=\"@{\u002Foauth2\u002Fauthorization\u002Fokta}\"\u003ELog In\u003C\u002Fa\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv sec:authorize=\"isAuthenticated()\"\u003E\n \u003Cp\u003EYou are logged in!\u003C\u002Fp\u003E\n \u003Cimg th:src=\"${profile.get('picture')}\" th:attr=\"alt=${profile.get('name')}\"\u002F\u003E\n \u003Ch2 th:text=\"${profile.get('name')}\"\u003E\u003C\u002Fh2\u003E\n \u003Cp th:text=\"${profile.get('email')}\"\u003E\u003C\u002Fp\u003E\n \u003Cform name=\"logoutForm\" th:action=\"@{\u002Flogout}\" method=\"post\"\u003E\n \u003Cbutton type=\"submit\" value=\"Log out\"\u002F\u003E\n \u003C\u002Fform\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fbody\u003E\n\u003C\u002Fhtml\u003E"},{"filename":"HomeController.java","language":"java","content":"package com.auth0.example;\n\nimport org.springframework.security.core.annotation.AuthenticationPrincipal;\nimport org.springframework.security.oauth2.core.oidc.user.OidcUser;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.GetMapping;\n\n\u002F**\n * Controller for the home page.\n *\u002F\n@Controller\npublic class HomeController {\n\n @GetMapping(\"\u002F\")\n public String home(Model model, @AuthenticationPrincipal OidcUser principal) {\n if (principal != null) {\n model.addAttribute(\"profile\", principal.getClaims());\n }\n return \"index\";\n }\n}"},{"filename":"SecurityConfigWithLogout.java","language":"java","content":"package com.auth0.example;\n\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity;\nimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;\nimport org.springframework.security.web.SecurityFilterChain;\nimport org.springframework.security.web.authentication.logout.LogoutHandler;\nimport org.springframework.web.servlet.support.ServletUriComponentsBuilder;\n\nimport java.io.IOException;\n\nimport static org.springframework.security.config.Customizer.withDefaults;\n\n@Configuration\n@EnableWebSecurity\npublic class SecurityConfig {\n\n @Value(\"${okta.oauth2.issuer}\")\n private String issuer;\n @Value(\"${okta.oauth2.client-id}\")\n private String clientId;\n\n @Bean\n public SecurityFilterChain configure(HttpSecurity http) throws Exception {\n http\n .authorizeHttpRequests(authorize -\u003E authorize\n .requestMatchers(\"\u002F\", \"\u002Fimages\u002F**\").permitAll()\n .anyRequest().authenticated()\n )\n .oauth2Login(withDefaults())\n .logout(logout -\u003E logout\n .addLogoutHandler(logoutHandler()));\n return http.build();\n }\n\n private LogoutHandler logoutHandler() {\n return (request, response, authentication) -\u003E {\n try {\n String baseUrl = ServletUriComponentsBuilder.fromCurrentContextPath().build().toUriString();\n response.sendRedirect(issuer + \"v2\u002Flogout?client_id=\" + clientId + \"&returnTo=\" + baseUrl);\n } catch (IOException e) {\n throw new RuntimeException(e);\n }\n };\n }\n}"}],"interactive":true,"downloadBoxDescription":"The Okta Spring Boot Starter makes it easy to add login to your Spring Boot application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-spring-boot-login-samples","path":"mvc-login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-spring-boot-login-samples\u002Ftree\u002Fmaster\u002Fmvc-login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Flogin\u002Foauth2\u002Fcode\u002Fauth0\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002F\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Fwww.oracle.com\u002Ftechnetwork\u002Fjava\u002Fjavase\u002Fdownloads\u002F\"\u003EJava\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\n.\u002Fgradlew clean bootRun\n# In Windows\ngradlew clean bootRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"laravel":{"name":"laravel","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Flaravel","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fphp.png","logo_name":undefined,"logo":"laravel","title":"Laravel","author":{"name":"Evan Sims","email":"evan.sims@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"laravel-auth0","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Flaravel-auth0","logo":"laravel"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Flaravel\u002F01-login","title":"Add Login to a Laravel Application","description":"Auth0's Laravel SDK allows you to quickly add authentication, user profile management, and routing access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Laravel Installation","anchor":"laravel-installation","level":2},{"content":"SDK Installation","anchor":"sdk-installation","level":2},{"content":"SDK Configuration","anchor":"sdk-configuration","level":2},{"content":"Login Routes","anchor":"login-routes","level":2},{"content":"Access Control","anchor":"access-control","level":2},{"content":"User Information","anchor":"user-information","level":2},{"content":"User Management","anchor":"user-management","level":2},{"content":"Run the Application","anchor":"run-the-application","level":2},{"content":"Checkpoint","anchor":"checkpoint","level":3},{"content":"Additional Reading","anchor":"additional-reading","level":3}],"nextSteps":[],"showSteps":true,"requirements":["Laravel 9 \u002F 10","PHP 8.0+","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Flaravel\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"Auth0's Laravel SDK allows you to quickly add authentication, user profile management, and routing access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","githubData":{"branch":"7.x","org":"auth0-samples","repo":"laravel","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Flaravel\u002Ftree\u002F7.x\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003EOpen a shell to the downloaded project directory, and run the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer install\nphp artisan migrate\nphp artisan key:generate\nphp artisan serve\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Flaravel\u002F01-login","title":"Add Login to a Laravel Application","description":"Auth0's Laravel SDK allows you to quickly add authentication, user profile management, and routing access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Laravel Installation","anchor":"laravel-installation","level":2},{"content":"SDK Installation","anchor":"sdk-installation","level":2},{"content":"SDK Configuration","anchor":"sdk-configuration","level":2},{"content":"Login Routes","anchor":"login-routes","level":2},{"content":"Access Control","anchor":"access-control","level":2},{"content":"User Information","anchor":"user-information","level":2},{"content":"User Management","anchor":"user-management","level":2},{"content":"Run the Application","anchor":"run-the-application","level":2},{"content":"Checkpoint","anchor":"checkpoint","level":3},{"content":"Additional Reading","anchor":"additional-reading","level":3}],"nextSteps":[],"showSteps":true,"requirements":["Laravel 9 \u002F 10","PHP 8.0+","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Flaravel\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"Auth0's Laravel SDK allows you to quickly add authentication, user profile management, and routing access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","githubData":{"branch":"7.x","org":"auth0-samples","repo":"laravel","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Flaravel\u002Ftree\u002F7.x\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003EOpen a shell to the downloaded project directory, and run the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer install\nphp artisan migrate\nphp artisan key:generate\nphp artisan serve\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Flaravel\u002Finteractive","title":"Add Login to a Laravel Application","description":"Auth0's Laravel SDK allows you to quickly add authentication, user profile management, and routing access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","canonical":undefined,"budicon":448,"titles":[{"content":"Laravel Installation","anchor":"laravel-installation","level":2},{"content":"SDK Installation","anchor":"sdk-installation","level":2},{"content":"SDK Configuration","anchor":"sdk-configuration","level":2},{"content":"Login Routes","anchor":"login-routes","level":2},{"content":"Access Control","anchor":"access-control","level":2},{"content":"User Information","anchor":"user-information","level":2},{"content":"User Management","anchor":"user-management","level":2},{"content":"Run the Application","anchor":"run-the-application","level":2},{"content":"Additional Reading","anchor":"additional-reading","level":3}],"nextSteps":[],"showSteps":true,"requirements":["Laravel 9 \u002F 10","PHP 8.0+","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Flaravel\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"routes\u002Fweb.php","language":"php","content":"\u003C?php\n\nuse Auth0\\Laravel\\Facade\\Auth0;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::get('\u002Fprivate', function () {\n return response('Welcome! You are logged in.');\n})-\u003Emiddleware('auth');\n\nRoute::get('\u002Fscope', function () {\n return response('You have `read:messages` permission, and can therefore access this resource.');\n})-\u003Emiddleware('auth')-\u003Ecan('read:messages');\n\nRoute::get('\u002F', function () {\n if (! auth()-\u003Echeck()) {\n return response('You are not logged in.');\n }\n\n $user = auth()-\u003Euser();\n $name = $user-\u003Ename ?? 'User';\n $email = $user-\u003Eemail ?? '';\n\n return response(\"Hello {$name}! Your email address is {$email}.\");\n});\n\nRoute::get('\u002Fcolors', function () {\n $endpoint = Auth0::management()-\u003Eusers();\n\n $colors = ['red', 'blue', 'green', 'black', 'white', 'yellow', 'purple', 'orange', 'pink', 'brown'];\n\n $endpoint-\u003Eupdate(\n id: auth()-\u003Eid(),\n body: [\n 'user_metadata' =\u003E [\n 'color' =\u003E $colors[random_int(0, count($colors) - 1)]\n ]\n ]\n );\n\n $metadata = $endpoint-\u003Eget(auth()-\u003Eid()); \u002F\u002F Retrieve the user's metadata.\n $metadata = Auth0::json($metadata); \u002F\u002F Convert the JSON to a PHP array.\n\n $color = $metadata['user_metadata']['color'] ?? 'unknown';\n $name = auth()-\u003Euser()-\u003Ename;\n\n return response(\"Hello {$name}! Your favorite color is {$color}.\");\n})-\u003Emiddleware('auth');"}],"interactive":true,"downloadBoxDescription":"Auth0's Laravel SDK allows you to quickly add authentication, user profile management, and routing access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","githubData":{"branch":"7.x","org":"auth0-samples","repo":"laravel","path":"app"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Flaravel\u002Ftree\u002F7.x\u002Fapp","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003EOpen a shell to the downloaded project directory, and run the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer install\nphp artisan migrate\nphp artisan key:generate\nphp artisan serve\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"nextjs":{"name":"nextjs","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fnextjs","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fnginx-plus.png","logo_name":undefined,"logo":"nextjs","title":"Next.js","author":{"name":"Rita Zerrizuela","email":"rita.zerrizuela@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":true,"sdk":{"name":"nextjs-auth0","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fnextjs-auth0\u002F","logo":"nextjs"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fnextjs\u002F01-login","title":"Login","description":"This guide demonstrates how to integrate Auth0 with any new or existing Next.js application using the Auth0 Next.js SDK.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 Next.js SDK","anchor":"install-the-auth0-next-js-sdk","level":2},{"content":"Configure the SDK","anchor":"configure-the-sdk","level":3},{"content":"Add the dynamic API route handler","anchor":"add-the-dynamic-api-route-handler","level":3},{"content":"Add the UserProvider component","anchor":"add-the-userprovider-component","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2},{"content":"From a Client Component","anchor":"from-a-client-component","level":3},{"content":"From a Server Component","anchor":"from-a-server-component","level":3},{"content":"What's next?","anchor":"what-s-next-","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Next.js 13.4+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fnextjs\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This guide demonstrates how to integrate Auth0 with any new or existing Next.js application using the Auth0 Next.js SDK.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-nextjs-samples","path":"Sample-01"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-nextjs-samples\u002Ftree\u002Fmain\u002FSample-01","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fapi\u002Fauth\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the root directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm run dev\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fnextjs\u002F01-login","title":"Login","description":"This guide demonstrates how to integrate Auth0 with any new or existing Next.js application using the Auth0 Next.js SDK.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 Next.js SDK","anchor":"install-the-auth0-next-js-sdk","level":2},{"content":"Configure the SDK","anchor":"configure-the-sdk","level":3},{"content":"Add the dynamic API route handler","anchor":"add-the-dynamic-api-route-handler","level":3},{"content":"Add the UserProvider component","anchor":"add-the-userprovider-component","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2},{"content":"From a Client Component","anchor":"from-a-client-component","level":3},{"content":"From a Server Component","anchor":"from-a-server-component","level":3},{"content":"What's next?","anchor":"what-s-next-","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Next.js 13.4+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fnextjs\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This guide demonstrates how to integrate Auth0 with any new or existing Next.js application using the Auth0 Next.js SDK.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-nextjs-samples","path":"Sample-01"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-nextjs-samples\u002Ftree\u002Fmain\u002FSample-01","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fapi\u002Fauth\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the root directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm run dev\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fnextjs\u002Finteractive","title":"Add Login to your Next.js application","description":"This guide demonstrates how to integrate Auth0 with any new or existing Next.js application using the Auth0 Next.js SDK.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 Next.js SDK","anchor":"install-the-auth0-next-js-sdk","level":2},{"content":"Configure the SDK","anchor":"configure-the-sdk","level":2},{"content":"Add the dynamic Route Handler","anchor":"add-the-dynamic-route-handler","level":2},{"content":"Add the UserProvider component","anchor":"add-the-userprovider-component","level":2},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information from a Client Component","anchor":"show-user-profile-information-from-a-client-component","level":2},{"content":"Show User Profile Information from a Server Component","anchor":"show-user-profile-information-from-a-server-component","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Next.js 13.4+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fnextjs\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"app\u002Fapi\u002Fauth\u002F[auth0]\u002Froute.js","language":"javascript","content":"import { handleAuth } from '@auth0\u002Fnextjs-auth0';\n\nexport const GET = handleAuth();"},{"filename":".env.local","language":"sh","content":"AUTH0_SECRET='use [openssl rand -hex 32] to generate a 32 bytes value'\nAUTH0_BASE_URL='http:\u002F\u002Flocalhost:3000'\nAUTH0_ISSUER_BASE_URL='https:\u002F\u002F__AUTH0_NAMESPACE__'\nAUTH0_CLIENT_ID='__AUTH0_CLIENT_ID__'\nAUTH0_CLIENT_SECRET='__AUTH0_CLIENT_SECRET__'"},{"filename":"app\u002Flayout.jsx","language":"jsx","content":"import { UserProvider } from '@auth0\u002Fnextjs-auth0\u002Fclient';\n\nexport default function RootLayout({ children }) {\n return (\n \u003Chtml lang=\"en\"\u003E\n \u003CUserProvider\u003E\n \u003Cbody\u003E{children}\u003C\u002Fbody\u003E\n \u003C\u002FUserProvider\u003E\n \u003C\u002Fhtml\u003E\n );\n}"},{"filename":"app\u002Flogin.jsx","language":"jsx","content":"export default function Login() {\n return \u003Ca href=\"\u002Fapi\u002Fauth\u002Flogin\"\u003ELogin\u003C\u002Fa\u003E;\n}"},{"filename":"app\u002Flogout.jsx","language":"jsx","content":"export default function Logout() {\n return \u003Ca href=\"\u002Fapi\u002Fauth\u002Flogout\"\u003ELogout\u003C\u002Fa\u003E;\n}"},{"filename":"app\u002Fprofile-client\u002Fpage.jsx","language":"jsx","content":"'use client';\n\nimport { useUser } from '@auth0\u002Fnextjs-auth0\u002Fclient';\n\nexport default function ProfileClient() {\n const { user, error, isLoading } = useUser();\n\n if (isLoading) return \u003Cdiv\u003ELoading...\u003C\u002Fdiv\u003E;\n if (error) return \u003Cdiv\u003E{error.message}\u003C\u002Fdiv\u003E;\n\n return (\n user && (\n \u003Cdiv\u003E\n \u003Cimg src={user.picture} alt={user.name} \u002F\u003E\n \u003Ch2\u003E{user.name}\u003C\u002Fh2\u003E\n \u003Cp\u003E{user.email}\u003C\u002Fp\u003E\n \u003C\u002Fdiv\u003E\n )\n );\n}"},{"filename":"app\u002Fprofile-server\u002Fpage.jsx","language":"jsx","content":"import { getSession } from '@auth0\u002Fnextjs-auth0';\n\nexport default async function ProfileServer() {\n const { user } = await getSession();\n\n return (\n user && (\n \u003Cdiv\u003E\n \u003Cimg src={user.picture} alt={user.name} \u002F\u003E\n \u003Ch2\u003E{user.name}\u003C\u002Fh2\u003E\n \u003Cp\u003E{user.email}\u003C\u002Fp\u003E\n \u003C\u002Fdiv\u003E\n )\n );\n}"}],"interactive":true,"downloadBoxDescription":"This guide demonstrates how to integrate Auth0 with any new or existing Next.js application using the Auth0 Next.js SDK.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-nextjs-samples","path":"Sample-01"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-nextjs-samples\u002Ftree\u002Fmain\u002FSample-01","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003C!-- markdownlint-disable MD031 MD041 --\u003E\n\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fapi\u002Fauth\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E is installed and execute the following commands in the root directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install && npm run dev\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"nginx-plus":{"name":"nginx-plus","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fnginx-plus","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fnginx-plus.png","logo_name":undefined,"logo":"nginx","title":"NGINX Plus","author":{"name":"Amin Abbaspour","email":"amin.abbaspour@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fnginx-plus\u002F01-login","title":"Login","description":"This tutorial demonstrates how to use the `nginx-openid-connect` module to add authentication and authorization to your NGINX server.","canonical":undefined,"budicon":448,"titles":[{"content":"Install and Enable nginx-plus-module-njs Module","anchor":"install-and-enable-nginx-plus-module-njs-module","level":2},{"content":"Checkout nginx-openid-connect Template Repository","anchor":"checkout-nginx-openid-connect-template-repository","level":2},{"content":"Configure with Your Auth0 Application Information","anchor":"configure-with-your-auth0-application-information","level":2},{"content":"Set Accept-Encoding Type for Token and JWKS Endpoints","anchor":"set-accept-encoding-type-for-token-and-jwks-endpoints","level":2},{"content":"Copy OpenID Connect Config Files to NGINX Server","anchor":"copy-openid-connect-config-files-to-nginx-server","level":2},{"content":"Configuring Auth0 Settings","anchor":"configuring-auth0-settings","level":2},{"content":"Passing Headers to Upstream Application","anchor":"passing-headers-to-upstream-application","level":2}],"nextSteps":[],"showSteps":true,"requirements":undefined,"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fnginx-plus\u002F01-login.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fnginx-plus\u002F01-login","title":"Login","description":"This tutorial demonstrates how to use the `nginx-openid-connect` module to add authentication and authorization to your NGINX server.","canonical":undefined,"budicon":448,"titles":[{"content":"Install and Enable nginx-plus-module-njs Module","anchor":"install-and-enable-nginx-plus-module-njs-module","level":2},{"content":"Checkout nginx-openid-connect Template Repository","anchor":"checkout-nginx-openid-connect-template-repository","level":2},{"content":"Configure with Your Auth0 Application Information","anchor":"configure-with-your-auth0-application-information","level":2},{"content":"Set Accept-Encoding Type for Token and JWKS Endpoints","anchor":"set-accept-encoding-type-for-token-and-jwks-endpoints","level":2},{"content":"Copy OpenID Connect Config Files to NGINX Server","anchor":"copy-openid-connect-config-files-to-nginx-server","level":2},{"content":"Configuring Auth0 Settings","anchor":"configuring-auth0-settings","level":2},{"content":"Passing Headers to Upstream Application","anchor":"passing-headers-to-upstream-application","level":2}],"nextSteps":[],"showSteps":true,"requirements":undefined,"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fnginx-plus\u002F01-login.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined},"hiddenArticles":undefined},"php":{"name":"php","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fphp","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fphp.png","logo_name":undefined,"logo":"php","title":"PHP","author":{"name":"Evan Sims","email":"evan.sims@auth0.com","community":false},"thirdParty":false,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"Auth0-PHP","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-php","logo":"php"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fphp\u002F01-login","title":"Login","description":"This guide demonstrates how to integrate Auth0 with a PHP application using the Auth0 PHP SDK.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate your PHP application","anchor":"integrate-your-php-application","level":2},{"content":"Installing HTTP Client and Messaging Factories","anchor":"installing-http-client-and-messaging-factories","level":3},{"content":"Installing the PHP SDK","anchor":"installing-the-php-sdk","level":3},{"content":"Configuring the SDK","anchor":"configuring-the-sdk","level":3},{"content":"Setting up your application routes","anchor":"setting-up-your-application-routes","level":3},{"content":"Checking for a session","anchor":"checking-for-a-session","level":2},{"content":"Logging in","anchor":"logging-in","level":2},{"content":"Handling authentication callback","anchor":"handling-authentication-callback","level":2},{"content":"Logging out","anchor":"logging-out","level":2},{"content":"Run your app!","anchor":"run-your-app-","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["PHP 7.4+ (8.0 recommended)","Auth0-PHP 8.0","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fphp\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This guide demonstrates how to integrate Auth0 with a PHP application using the Auth0 PHP SDK.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-php-web-app","path":"app"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-php-web-app\u002Ftree\u002Fmain\u002Fapp","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002F127.0.0.1:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002F127.0.0.1:3000\u002Flogout\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Fphp.net\u002Fdownloads.php\"\u003EPHP\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fgetcomposer.org\u002Fdownload\u002F\"\u003EComposer\u003C\u002Fa\u003E are installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run app\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run docker\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fphp\u002F01-login","title":"Login","description":"This guide demonstrates how to integrate Auth0 with a PHP application using the Auth0 PHP SDK.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Integrate your PHP application","anchor":"integrate-your-php-application","level":2},{"content":"Installing HTTP Client and Messaging Factories","anchor":"installing-http-client-and-messaging-factories","level":3},{"content":"Installing the PHP SDK","anchor":"installing-the-php-sdk","level":3},{"content":"Configuring the SDK","anchor":"configuring-the-sdk","level":3},{"content":"Setting up your application routes","anchor":"setting-up-your-application-routes","level":3},{"content":"Checking for a session","anchor":"checking-for-a-session","level":2},{"content":"Logging in","anchor":"logging-in","level":2},{"content":"Handling authentication callback","anchor":"handling-authentication-callback","level":2},{"content":"Logging out","anchor":"logging-out","level":2},{"content":"Run your app!","anchor":"run-your-app-","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["PHP 7.4+ (8.0 recommended)","Auth0-PHP 8.0","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fphp\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This guide demonstrates how to integrate Auth0 with a PHP application using the Auth0 PHP SDK.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-php-web-app","path":"app"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-php-web-app\u002Ftree\u002Fmain\u002Fapp","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002F127.0.0.1:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002F127.0.0.1:3000\u002Flogout\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Fphp.net\u002Fdownloads.php\"\u003EPHP\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fgetcomposer.org\u002Fdownload\u002F\"\u003EComposer\u003C\u002Fa\u003E are installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run app\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run docker\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fphp\u002Finteractive","title":"Add Login to your PHP application","description":"Auth0 allows you to add authentication to your PHP application quickly and to gain access to user profile information. This guide demonstrates how to integrate Auth0 with any new or existing PHP application using the Auth0 PHP SDK.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Install the Auth0 PHP SDK","anchor":"install-the-auth0-php-sdk","level":2},{"content":"Configure the Auth0 SDK","anchor":"configure-the-auth0-sdk","level":3},{"content":"Create routes","anchor":"create-routes","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["PHP 7.4+ (8.0 recommended)","Auth0-PHP 8.0","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fphp\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"index.php","language":"php","content":"\u003C?php\n\n declare(strict_types=1);\n\n require('vendor\u002Fautoload.php');\n\n use Auth0\\SDK\\Auth0;\n use Auth0\\SDK\\Configuration\\SdkConfiguration;\n\n $configuration = new SdkConfiguration(\n domain: '__AUTH0_NAMESPACE__',\n clientId: '__AUTH0_CLIENT_ID__',\n clientSecret: '__AUTH0_CLIENT_SECRET__',\n redirectUri: 'http:\u002F\u002F' . $_SERVER['HTTP_HOST'] . '\u002Fcallback',\n cookieSecret: '4f60eb5de6b5904ad4b8e31d9193e7ea4a3013b476ddb5c259ee9077c05e1457'\n );\n\n $sdk = new Auth0($configuration);\n\n require('router.php');"},{"filename":"login.php","language":"php","content":"\u003C?php\n\n declare(strict_types=1);\n\n \u002F**\n * Prepare application session and redirect to the Auth0 Universal Login page.\n *\n * The user will be redirected to your callback route to complete the authentication flow.\n *\u002F\n\n header(sprintf('Location: %s', $sdk-\u003Elogin()));"},{"filename":"logout.php","language":"php","content":"\u003C?php\n\n declare(strict_types=1);\n\n \u002F**\n * Clear application session and redirect to the Auth0 logout endpoint.\n *\n * The user will be redirected to your index route afterward.\n *\u002F\n\n header(sprintf('Location: %s', $sdk-\u003Elogout()));"},{"filename":"profile.php","language":"php","content":"\u003C?php\n\n declare(strict_types=1);\n\n $session = $sdk-\u003EgetCredentials();\n $authenticated = $session !== null;\n\n $template = [\n 'name' =\u003E $authenticated ? $session-\u003Euser['email'] : 'guest',\n 'picture' =\u003E $authenticated ? $session-\u003Euser['picture'] : null,\n 'session' =\u003E $authenticated ? print_r($session, true) : '',\n 'auth:route' =\u003E $authenticated ? 'logout' : 'login',\n 'auth:text' =\u003E $authenticated ? 'out' : 'in',\n ];\n\n printf('\u003Cp\u003EWelcome, %s.\u003C\u002Fp\u003E', $template['name']);\n printf('\u003Cp\u003E\u003Cpre\u003E%s\u003C\u002Fpre\u003E\u003C\u002Fp\u003E', $template['session']);\n printf('\u003Cp\u003E\u003Ca href=\"\u002F%s\"\u003ELog %s\u003C\u002Fa\u003E\u003C\u002Fp\u003E', $template['auth:route'], $template['auth:text']);"},{"filename":"router.php","language":"php","content":"\u003C?php\n\n declare(strict_types=1);\n\n use Steampixel\\Route;\n\n if ($_SERVER['HTTP_HOST'] !== 'localhost:3000') {\n die('\u003Cp\u003EThis quickstart is configured to be run from \u003Ca href=\"http:\u002F\u002Flocalhost:3000\"\u003Ehttp:\u002F\u002Flocalhost:3000\u003C\u002Fa\u003E.\u003C\u002Fp\u003E');\n }\n\n Route::add('\u002F', function() use ($sdk) {\n require('profile.php');\n });\n\n Route::add('\u002Flogin', function() use ($sdk) {\n require('login.php');\n });\n\n Route::add('\u002Fcallback', function() use ($sdk) {\n require('callback.php');\n });\n\n Route::add('\u002Flogout', function() use ($sdk) {\n require('logout.php');\n });\n\n Route::run();"},{"filename":"callback.php","language":"php","content":"\u003C?php\n\n declare(strict_types=1);\n\n \u002F**\n * Upon returning from the Auth0 Universal Login, we need to perform a code exchange using the `exchange()` method\n * to complete the authentication flow. This process configures the session for use by the application.\n *\n * If successful, the user will be redirected back to the index route.\n *\u002F\n\n $hasAuthenticated = isset($_GET['state']) && isset($_GET['code']);\n $hasAuthenticationFailure = isset($_GET['error']);\n\n \u002F\u002F The end user will be returned with ?state and ?code values in their request, when successful.\n if ($hasAuthenticated) {\n try {\n $sdk-\u003Eexchange();\n } catch (\\Throwable $th) {\n printf('Unable to complete authentication: %s', $th-\u003EgetMessage());\n exit;\n }\n }\n\n \u002F\u002F When authentication was unsuccessful, the end user will be returned with an ?error in their request.\n if ($hasAuthenticationFailure) {\n printf('Authentication failure: %s', htmlspecialchars(strip_tags(filter_input(INPUT_GET, 'error'))));\n exit;\n }\n\n \u002F\u002F Nothing to do: redirect to index route.\n header('Location: \u002F');"}],"interactive":true,"downloadBoxDescription":"Auth0 allows you to add authentication to your PHP application quickly and to gain access to user profile information. This guide demonstrates how to integrate Auth0 with any new or existing PHP application using the Auth0 PHP SDK.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-php-web-app","path":"app"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-php-web-app\u002Ftree\u002Fmain\u002Fapp","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002F127.0.0.1:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002F127.0.0.1:3000\u002Flogout\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Fphp.net\u002Fdownloads.php\"\u003EPHP\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fgetcomposer.org\u002Fdownload\u002F\"\u003EComposer\u003C\u002Fa\u003E are installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run app\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run docker\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"python":{"name":"python","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fpython","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fpython.png","logo_name":undefined,"logo":"python","title":"Python","author":{"name":"Evan Sims","email":"evan.sims@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-python","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-python","logo":"python"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fpython\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Python web Application built with the Flask framework and Authlib OAuth library.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure your .env file","anchor":"configure-your-env-file","level":2},{"content":"Setup your application","anchor":"setup-your-application","level":2},{"content":"Setup your routes","anchor":"setup-your-routes","level":2},{"content":"Triggering authentication with \u002Flogin","anchor":"triggering-authentication-with-login","level":3},{"content":"Finalizing authentication with \u002Fcallback","anchor":"finalizing-authentication-with-callback","level":3},{"content":"Clearing a session with \u002Flogout","anchor":"clearing-a-session-with-logout","level":3},{"content":"There's no place like \u002Fhome","anchor":"there-s-no-place-like-home","level":3},{"content":"Server instantiation","anchor":"server-instantiation","level":3},{"content":"Add templates","anchor":"add-templates","level":2},{"content":"Run your application","anchor":"run-your-application","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Python 3","Authlib 1.0","Flask 2.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fpython\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Python web Application built with the Flask framework and Authlib OAuth library.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-python-web-app","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-python-web-app\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F\"\u003EPython\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epip install -r requirements.txt\npython3 server.py\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fpython\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Python web Application built with the Flask framework and Authlib OAuth library.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure your .env file","anchor":"configure-your-env-file","level":2},{"content":"Setup your application","anchor":"setup-your-application","level":2},{"content":"Setup your routes","anchor":"setup-your-routes","level":2},{"content":"Triggering authentication with \u002Flogin","anchor":"triggering-authentication-with-login","level":3},{"content":"Finalizing authentication with \u002Fcallback","anchor":"finalizing-authentication-with-callback","level":3},{"content":"Clearing a session with \u002Flogout","anchor":"clearing-a-session-with-logout","level":3},{"content":"There's no place like \u002Fhome","anchor":"there-s-no-place-like-home","level":3},{"content":"Server instantiation","anchor":"server-instantiation","level":3},{"content":"Add templates","anchor":"add-templates","level":2},{"content":"Run your application","anchor":"run-your-application","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Python 3","Authlib 1.0","Flask 2.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fpython\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Python web Application built with the Flask framework and Authlib OAuth library.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-python-web-app","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-python-web-app\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F\"\u003EPython\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epip install -r requirements.txt\npython3 server.py\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fpython\u002Finteractive","title":"Add login to your Python Flask app","description":"This tutorial demonstrates how to add user login to a Python web application built with the Flask framework and Authlib OAuth library.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure your .env file","anchor":"configure-your-env-file","level":2},{"content":"Setup your application","anchor":"setup-your-application","level":2},{"content":"Setup your routes","anchor":"setup-your-routes","level":2},{"content":"Add templates","anchor":"add-templates","level":2},{"content":"Run your application","anchor":"run-your-application","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Python 3","Authlib 1.0","Flask 2.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Fpython\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"server.py","language":"python","content":"import json\nfrom os import environ as env\nfrom urllib.parse import quote_plus, urlencode\n\nfrom authlib.integrations.flask_client import OAuth\nfrom dotenv import find_dotenv, load_dotenv\nfrom flask import Flask, redirect, render_template, session, url_for\n\n\nENV_FILE = find_dotenv()\nif ENV_FILE:\n load_dotenv(ENV_FILE)\n \napp = Flask(__name__)\napp.secret_key = env.get(\"APP_SECRET_KEY\")\n\noauth = OAuth(app)\n\noauth.register(\n \"auth0\",\n client_id=env.get(\"AUTH0_CLIENT_ID\"),\n client_secret=env.get(\"AUTH0_CLIENT_SECRET\"),\n client_kwargs={\n \"scope\": \"openid profile email\",\n },\n server_metadata_url=f'https:\u002F\u002F{env.get(\"AUTH0_DOMAIN\")}\u002F.well-known\u002Fopenid-configuration'\n)\n\n\n@app.route(\"\u002Flogin\")\ndef login():\n return oauth.auth0.authorize_redirect(\n redirect_uri=url_for(\"callback\", _external=True)\n )\n\n@app.route(\"\u002Fcallback\", methods=[\"GET\", \"POST\"])\ndef callback():\n token = oauth.auth0.authorize_access_token()\n session[\"user\"] = token\n return redirect(\"\u002F\")\n\n@app.route(\"\u002Flogout\")\ndef logout():\n session.clear()\n return redirect(\n \"https:\u002F\u002F\" + env.get(\"AUTH0_DOMAIN\")\n + \"\u002Fv2\u002Flogout?\"\n + urlencode(\n {\n \"returnTo\": url_for(\"home\", _external=True),\n \"client_id\": env.get(\"AUTH0_CLIENT_ID\"),\n },\n quote_via=quote_plus,\n )\n )\n\n@app.route(\"\u002F\")\ndef home():\n return render_template(\"home.html\", session=session.get('user'), pretty=json.dumps(session.get('user'), indent=4))\n\n\nif __name__ == \"__main__\":\n app.run(host=\"0.0.0.0\", port=env.get(\"PORT\", 3000))"},{"filename":"templates\u002Fhome.html","language":"html","content":"\u003Chtml\u003E\n\u003Chead\u003E\n \u003Cmeta charset=\"utf-8\" \u002F\u003E\n \u003Ctitle\u003EAuth0 Example\u003C\u002Ftitle\u003E\n\u003C\u002Fhead\u003E\n\u003Cbody\u003E\n {% if session %}\n \u003Ch1\u003EWelcome {{session.userinfo.name}}!\u003C\u002Fh1\u003E\n \u003Cp\u003E\u003Ca href=\"\u002Flogout\"\u003ELogout\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n \u003Cdiv\u003E\u003Cpre\u003E{{pretty}}\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\n {% else %}\n \u003Ch1\u003EWelcome Guest\u003C\u002Fh1\u003E\n \u003Cp\u003E\u003Ca href=\"\u002Flogin\"\u003ELogin\u003C\u002Fa\u003E\u003C\u002Fp\u003E\n {% endif %}\n\u003C\u002Fbody\u003E\n\u003C\u002Fhtml\u003E"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Python web application built with the Flask framework and Authlib OAuth library.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-python-web-app","path":"01-Login"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-python-web-app\u002Ftree\u002Fmaster\u002F01-Login","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F\"\u003EPython\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epip install -r requirements.txt\npython3 server.py\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"rails":{"name":"rails","url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Frails","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Frails.png","logo_name":undefined,"logo":"rails","title":"Ruby On Rails","author":{"name":"David Patrick","email":"david.patrick@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"omniauth-auth0","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fomniauth-auth0","logo":"rails"},"articles":[{"name":"01-login","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Frails\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Ruby on Rails application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 SDK","anchor":"install-the-auth0-sdk","level":2},{"content":"Install Dependencies","anchor":"install-dependencies","level":3},{"content":"Initialize Auth0 Configuration","anchor":"initialize-auth0-configuration","level":3},{"content":"Add an Auth0 controller","anchor":"add-an-auth0-controller","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Ruby 2.5.0+ | Rails 6.0+ or Rails 5.0+ or Rails 4.2+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Frails\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Ruby on Rails application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-rubyonrails-sample","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-rubyonrails-sample\u002Ftree\u002Fmaster\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fauth\u002Fauth0\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Finstallrails.com\u002F\"\u003ERails\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ebundle install\nrails s --port 3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true},{"name":"02-troubleshooting","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Frails\u002F02-troubleshooting","title":"Troubleshooting","description":"Troubleshooting tips for using Rails with Auth0.","canonical":undefined,"budicon":448,"titles":[{"content":"Using a reverse proxy","anchor":"using-a-reverse-proxy","level":2},{"content":"ActionController::InvalidAuthenticityToken","anchor":"actioncontroller-invalidauthenticitytoken","level":2},{"content":"ActionDispatch::Cookies::CookieOverflow","anchor":"actiondispatch-cookies-cookieoverflow","level":2},{"content":"SSL Issues","anchor":"ssl-issues","level":2},{"content":"\"failure message=invalid_credentials\"","anchor":"-failure-message-invalid_credentials-","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Ruby 2.5.0+ | Rails 6.0+ or Rails 5.0+ or Rails 4.2+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Frails\u002F02-troubleshooting.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"Troubleshooting tips for using Rails with Auth0.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-rubyonrails-sample","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-rubyonrails-sample\u002Ftree\u002Fmaster\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fauth\u002Fauth0\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Finstallrails.com\u002F\"\u003ERails\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ebundle install\nrails s --port 3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":false}],"versions":undefined,"defaultArticle":{"name":"01-login","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Frails\u002F01-login","title":"Login","description":"This tutorial demonstrates how to add user login to a Ruby on Rails application.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Get Your Application Keys","anchor":"get-your-application-keys","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Install the Auth0 SDK","anchor":"install-the-auth0-sdk","level":2},{"content":"Install Dependencies","anchor":"install-dependencies","level":3},{"content":"Initialize Auth0 Configuration","anchor":"initialize-auth0-configuration","level":3},{"content":"Add an Auth0 controller","anchor":"add-an-auth0-controller","level":3},{"content":"Add Login to Your Application","anchor":"add-login-to-your-application","level":2},{"content":"Add Logout to Your Application","anchor":"add-logout-to-your-application","level":2},{"content":"Show User Profile Information","anchor":"show-user-profile-information","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Ruby 2.5.0+ | Rails 6.0+ or Rails 5.0+ or Rails 4.2+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Frails\u002F01-login.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Ruby on Rails application.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-rubyonrails-sample","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-rubyonrails-sample\u002Ftree\u002Fmaster\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fauth\u002Fauth0\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Finstallrails.com\u002F\"\u003ERails\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ebundle install\nrails s --port 3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Frails\u002Finteractive","title":"Add Login to Your Ruby on Rails Application","description":"This tutorial demonstrates how to add user login to a Ruby on Rails application using OmniAuth.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure Callback URLs","anchor":"configure-callback-urls","level":3},{"content":"Configure Logout URLs","anchor":"configure-logout-urls","level":3},{"content":"Configure Allowed Web Origins","anchor":"configure-allowed-web-origins","level":3},{"content":"Add dependencies","anchor":"add-dependencies","level":2},{"content":"Configure the SDK","anchor":"configure-the-sdk","level":2},{"content":"Configure OmniAuth middleware","anchor":"configure-omniauth-middleware","level":2},{"content":"Add an Auth0 controller","anchor":"add-an-auth0-controller","level":2},{"content":"Configure routes","anchor":"configure-routes","level":2},{"content":"Add login to your application","anchor":"add-login-to-your-application","level":2},{"content":"Add logout to your application","anchor":"add-logout-to-your-application","level":2},{"content":"Show user profile information","anchor":"show-user-profile-information","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Ruby 2.5.0+ | Rails 6.0+ or Rails 5.0+ or Rails 4.2+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fwebapp\u002Frails\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"config\u002Fauth0.yml","language":"yml","content":"development:\n auth0_domain: __AUTH0_NAMESPACE__\n auth0_client_id: __AUTH0_CLIENT_ID__\n auth0_client_secret: \u003CYOUR AUTH0 CLIENT SECRET\u003E"},{"filename":"auth0.rb","language":"ruby","content":"AUTH0_CONFIG = Rails.application.config_for(:auth0)\n\nRails.application.config.middleware.use OmniAuth::Builder do\n provider(\n :auth0,\n AUTH0_CONFIG['auth0_client_id'],\n AUTH0_CONFIG['auth0_client_secret'],\n AUTH0_CONFIG['auth0_domain'],\n callback_path: '\u002Fauth\u002Fauth0\u002Fcallback',\n authorize_params: {\n scope: 'openid profile'\n }\n )\nend"},{"filename":"auth0_controller.rb","language":"ruby","content":"class Auth0Controller \u003C ApplicationController\n def callback\n # OmniAuth stores the informatin returned from\n # Auth0 and the IdP in request.env['omniauth.auth'].\n # In this code, you will pull the raw_info supplied \n # from the id_token and assign it to the session.\n # Refer to https:\u002F\u002Fgithub.com\u002Fauth0\u002Fomniauth-auth0\u002Fblob\u002Fmaster\u002FEXAMPLES.md#example-of-the-resulting-authentication-hash \n # for complete information on 'omniauth.auth' contents.\n auth_info = request.env['omniauth.auth']\n session[:userinfo] = auth_info['extra']['raw_info']\n\n # Redirect to the URL you want after successful auth\n redirect_to '\u002Fdashboard'\n end\n\n def failure\n # Handles failed authentication\n @error_msg = request.params['message']\n end\n\n def logout\n reset_session\n redirect_to logout_url\n end\n\n private\n AUTH0_CONFIG = Rails.application.config_for(:auth0)\n\n def logout_url\n request_params = {\n returnTo: root_url,\n client_id: AUTH0_CONFIG['auth0_client_id']\n }\n\n URI::HTTPS.build(host: AUTH0_CONFIG['auth0_domain'], path: '\u002Fv2\u002Flogout', query: to_query(request_params)).to_s\n end\n\n def to_query(hash)\n hash.map { |k, v| \"#{k}=#{CGI.escape(v)}\" unless v.nil? }.reject(&:nil?).join('&')\n end\nend"},{"filename":"routes.rb","language":"ruby","content":"Rails.application.routes.draw do\n # ..\n get '\u002Fauth\u002Fauth0\u002Fcallback' =\u003E 'auth0#callback'\n get '\u002Fauth\u002Ffailure' =\u003E 'auth0#failure'\n get '\u002Fauth\u002Flogout' =\u003E 'auth0#logout'\nend"},{"filename":"secured.rb","language":"ruby","content":"module Secured\n extend ActiveSupport::Concern\n\n included do\n before_action :logged_in_using_omniauth?\n end\n\n def logged_in_using_omniauth?\n redirect_to '\u002F' unless session[:userinfo].present?\n end\nend"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add user login to a Ruby on Rails application using OmniAuth.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-rubyonrails-sample","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-rubyonrails-sample\u002Ftree\u002Fmaster\u002Fsample","sampleDownloadRequiredData":["client"],"downloadInstructions":"\u003Cp\u003ETo run the sample follow these steps:\u003C\u002Fp\u003E\n\u003Col\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Callback URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\u002Fauth\u002Fauth0\u002Fcallback\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003ESet the \u003Cstrong\u003EAllowed Logout URLs\u003C\u002Fstrong\u003E in the \u003Ca href=\"https:\u002F\u002F__AUTH0_MANAGE_URL__\u002F#\u002Fapplications\u002F__AUTH0_CLIENT_ID__\u002Fsettings\"\u003EApplication Settings\u003C\u002Fa\u003E to:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003Ehttp:\u002F\u002Flocalhost:3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003EMake sure \u003Ca href=\"http:\u002F\u002Finstallrails.com\u002F\"\u003ERails\u003C\u002Fa\u003E is installed and execute the following commands in the sample's directory:\u003C\u002Fli\u003E\n\u003C\u002Fol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ebundle install\nrails s --port 3000\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]}}},"backend":{"title":"Backend\u002FAPI","name":"backend","description":"An API or service protected by Auth0","example":"e.g., Express.js API, ASP.NET API","question":"Select an API or backend platform","budicon":649,"slug":"server-apis","platforms":{"aspnet-core-webapi":{"name":"aspnet-core-webapi","url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Faspnet-core-webapi","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fasp.png","logo_name":undefined,"logo":"dotnet-platform","title":"ASP.NET Core Web API","author":{"name":"Damien Guard","email":"damien.guard@auth0.com","community":false},"thirdParty":false,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-authorization","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Faspnet-core-webapi\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to an ASP.NET Core Web API application using the standard JWT middleware.","canonical":undefined,"budicon":500,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Configure the Sample Project","anchor":"configure-the-sample-project","level":2},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Configure the middleware","anchor":"configure-the-middleware","level":3},{"content":"Validate scopes","anchor":"validate-scopes","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":[".NET 6.0",".NET 7.0",".NET 8.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Faspnet-core-webapi\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to an ASP.NET Core Web API application using the standard JWT middleware.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-aspnetcore-webapi-samples","path":"Quickstart\u002F01-Authorization"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnetcore-webapi-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F01-Authorization","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run the sample you need \u003Ca href=\"https:\u002F\u002Fwww.microsoft.com\u002Fnet\u002Fdownload\"\u003E.NET Core\u003C\u002Fa\u003E installed, and run the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Edotnet restore\ndotnet run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true},{"name":"02-using","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Faspnet-core-webapi\u002F02-using","title":"Using your API","description":"This tutorial will show you how to use your API.","canonical":undefined,"budicon":500,"titles":[{"content":"Calling the API From Your Application","anchor":"calling-the-api-from-your-application","level":2},{"content":"Obtaining an Access Token","anchor":"obtaining-an-access-token","level":2},{"content":"Test Your API","anchor":"test-your-api","level":2}],"nextSteps":[],"showSteps":true,"requirements":[".NET 6.0",".NET 7.0",".NET 8.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Faspnet-core-webapi\u002F02-using.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false},{"name":"03-troubleshooting","number":3,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Faspnet-core-webapi\u002F03-troubleshooting","title":"Troubleshooting","description":"This document will help you troubleshoot your configuration if you get 401 (Unauthorized) response from your API.","canonical":undefined,"budicon":500,"titles":[{"content":"Check the Token Validation","anchor":"check-the-token-validation","level":2},{"content":"Inspect a Token","anchor":"inspect-a-token","level":2},{"content":"Debug Configuration Issues Using Log Files","anchor":"debug-configuration-issues-using-log-files","level":2},{"content":"1. Are you passing the JWT in the Authorization header?","anchor":"1-are-you-passing-the-jwt-in-the-authorization-header-","level":3},{"content":"2. Did you configure the JWT middleware for the correct signing algorithm?","anchor":"2-did-you-configure-the-jwt-middleware-for-the-correct-signing-algorithm-","level":3},{"content":"3. Has your token expired?","anchor":"3-has-your-token-expired-","level":3},{"content":"4. Did you configure the correct issuer?","anchor":"4-did-you-configure-the-correct-issuer-","level":3},{"content":"5. Does the audience match your JWT middleware configuration?","anchor":"5-does-the-audience-match-your-jwt-middleware-configuration-","level":3}],"nextSteps":[],"showSteps":true,"requirements":[".NET 6.0",".NET 7.0",".NET 8.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Faspnet-core-webapi\u002F03-troubleshooting.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false}],"versions":undefined,"defaultArticle":undefined,"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Faspnet-core-webapi\u002Finteractive","title":"Add Authorization to an ASP.NET Core Web API application","description":"This tutorial demonstrates how to add authorization to an ASP.NET Core Web API application using the standard JWT middleware.","canonical":undefined,"budicon":500,"titles":[{"content":"Define permissions","anchor":"define-permissions","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure the middleware","anchor":"configure-the-middleware","level":2},{"content":"Validate scopes","anchor":"validate-scopes","level":2},{"content":"Protect API endpoints","anchor":"protect-api-endpoints","level":2},{"content":"Call your API","anchor":"call-your-api","level":2},{"content":"Get an access token","anchor":"get-an-access-token","level":3},{"content":"Call a secure endpoint","anchor":"call-a-secure-endpoint","level":3}],"nextSteps":[],"showSteps":true,"requirements":[".NET 6.0",".NET 7.0",".NET 8.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Faspnet-core-webapi\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"appsettings.json","language":"json","content":"{\n \"Auth0\": {\n \"Domain\": \"__AUTH0_NAMESPACE__\",\n \"Audience\": \"__AUTH0_API_IDENTIFIER__\"\n }\n}"},{"filename":"Program.cs","language":"csharp","content":"var builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)\n.AddJwtBearer(options =\u003E\n{\n options.Authority = $\"https:\u002F\u002F{builder.Configuration[\"Auth0:Domain\"]}\u002F\";\n options.Audience = builder.Configuration[\"Auth0:Audience\"];\n options.TokenValidationParameters = new TokenValidationParameters\n {\n NameClaimType = ClaimTypes.NameIdentifier\n };\n});\n\n builder.Services\n .AddAuthorization(options =\u003E\n {\n options.AddPolicy(\n \"read:messages\",\n policy =\u003E policy.Requirements.Add(\n new HasScopeRequirement(\"read:messages\", domain)\n )\n );\n });\n\n builder.Services.AddSingleton\u003CIAuthorizationHandler, HasScopeHandler\u003E();\n\nvar app = builder.Build();\napp.UseAuthentication();\napp.UseAuthorization();"},{"filename":"HasScopeHandler.cs","language":"csharp","content":"public class HasScopeHandler : AuthorizationHandler\u003CHasScopeRequirement\u003E\n{\n protected override Task HandleRequirementAsync(\n AuthorizationHandlerContext context,\n HasScopeRequirement requirement\n ) {\n \u002F\u002F If user does not have the scope claim, get out of here\n if (!context.User.HasClaim(c =\u003E c.Type == \"scope\" && c.Issuer == requirement.Issuer))\n return Task.CompletedTask;\n\n \u002F\u002F Split the scopes string into an array\n var scopes = context.User\n .FindFirst(c =\u003E c.Type == \"scope\" && c.Issuer == requirement.Issuer).Value.Split(' ');\n\n \u002F\u002F Succeed if the scope array contains the required scope\n if (scopes.Any(s =\u003E s == requirement.Scope))\n context.Succeed(requirement);\n\n return Task.CompletedTask;\n }\n}"},{"filename":"HasScopeRequirement.cs","language":"csharp","content":"public class HasScopeRequirement : IAuthorizationRequirement\n{\n public string Issuer { get; }\n public string Scope { get; }\n\n public HasScopeRequirement(string scope, string issuer)\n {\n Scope = scope ?? throw new ArgumentNullException(nameof(scope));\n Issuer = issuer ?? throw new ArgumentNullException(nameof(issuer));\n }\n}"},{"filename":"ApiController.cs","language":"csharp","content":"[Route(\"api\")]\npublic class ApiController : Controller\n{\n [HttpGet(\"private\")]\n [Authorize]\n public IActionResult Private()\n {\n return Ok(new\n {\n Message = \"Hello from a private endpoint!\"\n });\n }\n\n [HttpGet(\"private-scoped\")]\n [Authorize(\"read:messages\")]\n public IActionResult Scoped()\n {\n return Ok(new\n {\n Message = \"Hello from a private-scoped endpoint!\"\n });\n }\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to an ASP.NET Core Web API application using the standard JWT middleware.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-aspnetcore-webapi-samples","path":"Quickstart\u002F01-Authorization"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnetcore-webapi-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002F01-Authorization","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run the sample you need \u003Ca href=\"https:\u002F\u002Fwww.microsoft.com\u002Fnet\u002Fdownload\"\u003E.NET Core\u003C\u002Fa\u003E installed, and run the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Edotnet restore\ndotnet run\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"django":{"name":"django","url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fdjango","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fdjango.png","logo_name":undefined,"logo":"django","title":"Django API","author":{"name":"Luciano Balmaceda","email":"luciano.balmaceda@auth0.com","community":false},"thirdParty":false,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-authorization","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fdjango\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to a Django REST Framework API.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Setup the Django Application","anchor":"setup-the-django-application","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Create a Django project","anchor":"create-a-django-project","level":3},{"content":"Add a Django remote user","anchor":"add-a-django-remote-user","level":3},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Validate scopes","anchor":"validate-scopes","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2},{"content":"Add URL mappings","anchor":"add-url-mappings","level":3}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Python 3.5 and up","Django 2.2.*","djangorestframework 3.10.*","drf-jwt 1.13.*"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fdjango\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to a Django REST Framework API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-django-api","path":"01-Authorization"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-django-api\u002Ftree\u002Fmaster\u002F01-Authorization","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run it from the command line:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epip install -r requirements.txt\npython manage.py migrate \npython manage.py runserver 3010\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":false},{"name":"02-using","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fdjango\u002F02-using","title":"Using your API","description":"This tutorial will show you how to use your API.","canonical":undefined,"budicon":500,"titles":[{"content":"Calling the API From Your Application","anchor":"calling-the-api-from-your-application","level":2},{"content":"Obtaining an Access Token","anchor":"obtaining-an-access-token","level":2},{"content":"Test Your API","anchor":"test-your-api","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Python 3.5 and up","Django 2.2.*","djangorestframework 3.10.*","drf-jwt 1.13.*"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fdjango\u002F02-using.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":true},{"name":"03-troubleshooting","number":3,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fdjango\u002F03-troubleshooting","title":"Troubleshooting","description":"This document will help you troubleshoot your configuration if you get unexpected responses from your API.","canonical":undefined,"budicon":500,"titles":[{"content":"How Does a Token Get Validated?","anchor":"how-does-a-token-get-validated-","level":2},{"content":"Inspecting a Token","anchor":"inspecting-a-token","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Python 3.5 and up","Django 2.2.*","djangorestframework 3.10.*","drf-jwt 1.13.*"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fdjango\u002F03-troubleshooting.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false}],"versions":undefined,"defaultArticle":{"name":"01-authorization","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fdjango\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to a Django REST Framework API.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Setup the Django Application","anchor":"setup-the-django-application","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Create a Django project","anchor":"create-a-django-project","level":3},{"content":"Add a Django remote user","anchor":"add-a-django-remote-user","level":3},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Validate scopes","anchor":"validate-scopes","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2},{"content":"Add URL mappings","anchor":"add-url-mappings","level":3}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Python 3.5 and up","Django 2.2.*","djangorestframework 3.10.*","drf-jwt 1.13.*"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fdjango\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to a Django REST Framework API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-django-api","path":"01-Authorization"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-django-api\u002Ftree\u002Fmaster\u002F01-Authorization","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run it from the command line:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epip install -r requirements.txt\npython manage.py migrate \npython manage.py runserver 3010\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fdjango\u002Finteractive","title":"Add Authorization to a Django API Application","description":"This tutorial demonstrates how to add authorization to a Python API built with Django.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Define permissions","anchor":"define-permissions","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Create a Django application","anchor":"create-a-django-application","level":3},{"content":"Create the JWT validator","anchor":"create-the-jwt-validator","level":2},{"content":"Create the API views","anchor":"create-the-api-views","level":2},{"content":"Add URL mappings","anchor":"add-url-mappings","level":2},{"content":"Make a Call to Your API","anchor":"make-a-call-to-your-api","level":3}],"nextSteps":[],"showSteps":true,"requirements":["Python 3.5 and up","Django 2.2.*","djangorestframework 3.10.*","drf-jwt 1.13.*"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fdjango\u002Finteractive.md","showDownloadSample":false,"sampleFiles":[{"filename":"apiexample\u002Fvalidator.py","language":"python","content":"import json\nfrom urllib.request import urlopen\n\nfrom authlib.oauth2.rfc7523 import JWTBearerTokenValidator\nfrom authlib.jose.rfc7517.jwk import JsonWebKey\n\n\nclass Auth0JWTBearerTokenValidator(JWTBearerTokenValidator):\n def __init__(self, domain, audience):\n issuer = f\"https:\u002F\u002F{domain}\u002F\"\n jsonurl = urlopen(f\"{issuer}.well-known\u002Fjwks.json\")\n public_key = JsonWebKey.import_key_set(\n json.loads(jsonurl.read())\n )\n super(Auth0JWTBearerTokenValidator, self).__init__(\n public_key\n )\n self.claims_options = {\n \"exp\": {\"essential\": True},\n \"aud\": {\"essential\": True, \"value\": audience},\n \"iss\": {\"essential\": True, \"value\": issuer},\n }"},{"filename":"apiexample\u002Fviews.py","language":"python","content":"from authlib.integrations.django_oauth2 import ResourceProtector\nfrom django.http import JsonResponse\nfrom . import validator\n\nrequire_auth = ResourceProtector()\nvalidator = validator.Auth0JWTBearerTokenValidator(\n \"__AUTH0_NAMESPACE__\",\n \"__AUTH0_API_IDENTIFIER__\"\n)\nrequire_auth.register_token_validator(validator)\n\n\ndef public(request):\n \"\"\"No access token required to access this route\n \"\"\"\n response = \"Hello from a public endpoint! You don't need to be authenticated to see this.\"\n return JsonResponse(dict(message=response))\n\n\n@require_auth(None)\ndef private(request):\n \"\"\"A valid access token is required to access this route\n \"\"\"\n response = \"Hello from a private endpoint! You need to be authenticated to see this.\"\n return JsonResponse(dict(message=response))\n\n\n@require_auth(\"read:messages\")\ndef private_scoped(request):\n \"\"\"A valid access token and an appropriate scope are required to access this route\n \"\"\"\n response = \"Hello from a private endpoint! You need to be authenticated and have a scope of read:messages to see this.\"\n return JsonResponse(dict(message=response))"},{"filename":"apiexample\u002Furls.py","language":"python","content":"from django.contrib import admin\nfrom django.urls import path\nfrom . import views\n\n\nurlpatterns = [\n path('admin\u002F', admin.site.urls),\n path('api\u002Fpublic', views.public),\n path('api\u002Fprivate', views.private),\n path('api\u002Fprivate-scoped', views.private_scoped)\n]"}],"interactive":true,"hidden":true}]},"golang":{"name":"golang","url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fgolang","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fgolang.png","logo_name":undefined,"logo":"golang","title":"Go API","author":{"name":"Sergiu Ghitea","email":"sergiu.ghitea@auth0.com","community":false},"thirdParty":false,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"go-jwt-middleware","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fgo-jwt-middleware","logo":"golang"},"articles":[{"name":"01-authorization","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fgolang\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to a Go API.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Download dependencies","anchor":"download-dependencies","level":3},{"content":"Configure your application","anchor":"configure-your-application","level":3},{"content":"Create a middleware to validate Access Tokens","anchor":"create-a-middleware-to-validate-access-tokens","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2},{"content":"Validate scopes","anchor":"validate-scopes","level":3}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Go 1.21+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fgolang\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to a Go API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-golang-api-samples","path":"01-Authorization-RS256"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-golang-api-samples\u002Ftree\u002Fmaster\u002F01-Authorization-RS256","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run it from the command line:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ego mod vendor\ngo run main.go\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true},{"name":"02-using","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fgolang\u002F02-using","title":"Using your API","description":"This tutorial will show you how to use your API.","canonical":undefined,"budicon":500,"titles":[{"content":"Calling the API From Your Application","anchor":"calling-the-api-from-your-application","level":2},{"content":"Obtaining an Access Token","anchor":"obtaining-an-access-token","level":2},{"content":"Test Your API","anchor":"test-your-api","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Go 1.21+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fgolang\u002F02-using.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false},{"name":"03-troubleshooting","number":3,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fgolang\u002F03-troubleshooting","title":"Troubleshooting","description":"This document will help you troubleshoot your configuration if you get unexpected responses from your API.","canonical":undefined,"budicon":500,"titles":[{"content":"How Does a Token Get Validated?","anchor":"how-does-a-token-get-validated-","level":2},{"content":"Inspecting a Token","anchor":"inspecting-a-token","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Go 1.21+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fgolang\u002F03-troubleshooting.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false}],"versions":undefined,"defaultArticle":{"name":"01-authorization","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fgolang\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to a Go API.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Download dependencies","anchor":"download-dependencies","level":3},{"content":"Configure your application","anchor":"configure-your-application","level":3},{"content":"Create a middleware to validate Access Tokens","anchor":"create-a-middleware-to-validate-access-tokens","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2},{"content":"Validate scopes","anchor":"validate-scopes","level":3}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Go 1.21+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fgolang\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to a Go API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-golang-api-samples","path":"01-Authorization-RS256"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-golang-api-samples\u002Ftree\u002Fmaster\u002F01-Authorization-RS256","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run it from the command line:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ego mod vendor\ngo run main.go\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fgolang\u002Finteractive","title":"Add authorization to a Go API","description":"This tutorial demonstrates how to add authorization to a Go API.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Define permissions","anchor":"define-permissions","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure your application","anchor":"configure-your-application","level":2},{"content":"Create a middleware to validate access tokens","anchor":"create-a-middleware-to-validate-access-tokens","level":2},{"content":"Protect API endpoints","anchor":"protect-api-endpoints","level":2},{"content":"Make a Call to Your API","anchor":"make-a-call-to-your-api","level":3}],"nextSteps":[],"showSteps":true,"requirements":["Go 1.21+"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fgolang\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"middleware\u002Fjwt.go","language":"go","content":"package middleware\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"net\u002Fhttp\"\n\t\"net\u002Furl\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\tjwtmiddleware \"github.com\u002Fauth0\u002Fgo-jwt-middleware\u002Fv2\"\n\t\"github.com\u002Fauth0\u002Fgo-jwt-middleware\u002Fv2\u002Fjwks\"\n\t\"github.com\u002Fauth0\u002Fgo-jwt-middleware\u002Fv2\u002Fvalidator\"\n)\n\n\u002F\u002F CustomClaims contains custom data we want from the token.\ntype CustomClaims struct {\n\tScope string `json:\"scope\"`\n}\n\n\u002F\u002F Validate does nothing for this example, but we need\n\u002F\u002F it to satisfy validator.CustomClaims interface.\nfunc (c CustomClaims) Validate(ctx context.Context) error {\n\treturn nil\n}\n\n\u002F\u002F EnsureValidToken is a middleware that will check the validity of our JWT.\nfunc EnsureValidToken() func(next http.Handler) http.Handler {\n\tissuerURL, err := url.Parse(\"https:\u002F\u002F\" + os.Getenv(\"AUTH0_DOMAIN\") + \"\u002F\")\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to parse the issuer url: %v\", err)\n\t}\n\n\tprovider := jwks.NewCachingProvider(issuerURL, 5*time.Minute)\n\n\tjwtValidator, err := validator.New(\n\t\tprovider.KeyFunc,\n\t\tvalidator.RS256,\n\t\tissuerURL.String(),\n\t\t[]string{os.Getenv(\"AUTH0_AUDIENCE\")},\n\t\tvalidator.WithCustomClaims(\n\t\t\tfunc() validator.CustomClaims {\n\t\t\t\treturn &CustomClaims{}\n\t\t\t},\n\t\t),\n\t\tvalidator.WithAllowedClockSkew(time.Minute),\n\t)\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to set up the jwt validator\")\n\t}\n\n\terrorHandler := func(w http.ResponseWriter, r *http.Request, err error) {\n\t\tlog.Printf(\"Encountered error while validating JWT: %v\", err)\n\n\t\tw.Header().Set(\"Content-Type\", \"application\u002Fjson\")\n\t\tw.WriteHeader(http.StatusUnauthorized)\n\t\tw.Write([]byte(`{\"message\":\"Failed to validate JWT.\"}`))\n\t}\n\n\tmiddleware := jwtmiddleware.New(\n\t\tjwtValidator.ValidateToken,\n\t\tjwtmiddleware.WithErrorHandler(errorHandler),\n\t)\n\n\treturn func(next http.Handler) http.Handler {\n\t\treturn middleware.CheckJWT(next)\n\t}\n}\n\n\u002F\u002F HasScope checks whether our claims have a specific scope.\nfunc (c CustomClaims) HasScope(expectedScope string) bool {\n\tresult := strings.Split(c.Scope, \" \")\n\tfor i := range result {\n\t\tif result[i] == expectedScope {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}"},{"filename":"main.go","language":"go","content":"package main\n\nimport (\n\t\"01-Authorization-RS256\u002Fmiddleware\"\n\t\"log\"\n\t\"net\u002Fhttp\"\n\n\tjwtmiddleware \"github.com\u002Fauth0\u002Fgo-jwt-middleware\u002Fv2\"\n\t\"github.com\u002Fauth0\u002Fgo-jwt-middleware\u002Fv2\u002Fvalidator\"\n\t\"github.com\u002Fjoho\u002Fgodotenv\"\n)\n\nfunc main() {\n\tif err := godotenv.Load(); err != nil {\n\t\tlog.Fatalf(\"Error loading the .env file: %v\", err)\n\t}\n\n\trouter := http.NewServeMux()\n\n\t\u002F\u002F This route is always accessible.\n\trouter.Handle(\"\u002Fapi\u002Fpublic\", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Header().Set(\"Content-Type\", \"application\u002Fjson\")\n\t\tw.WriteHeader(http.StatusOK)\n\t\tw.Write([]byte(`{\"message\":\"Hello from a public endpoint! You don't need to be authenticated to see this.\"}`))\n\t}))\n\n\t\u002F\u002F This route is only accessible if the user has a valid access_token.\n\trouter.Handle(\"\u002Fapi\u002Fprivate\", middleware.EnsureValidToken()(\n\t\thttp.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Header().Set(\"Content-Type\", \"application\u002Fjson\")\n\t\t\tw.WriteHeader(http.StatusOK)\n\t\t\tw.Write([]byte(`{\"message\":\"Hello from a private endpoint! You need to be authenticated to see this.\"}`))\n\t\t}),\n\t))\n\n\t\u002F\u002F This route is only accessible if the user has a\n\t\u002F\u002F valid access_token with the read:messages scope.\n\trouter.Handle(\"\u002Fapi\u002Fprivate-scoped\", middleware.EnsureValidToken()(\n\t\thttp.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Header().Set(\"Content-Type\", \"application\u002Fjson\")\n\n\t\t\ttoken := r.Context().Value(jwtmiddleware.ContextKey{}).(*validator.ValidatedClaims)\n\n\t\t\tclaims := token.CustomClaims.(*middleware.CustomClaims)\n\t\t\tif !claims.HasScope(\"read:messages\") {\n\t\t\t\tw.WriteHeader(http.StatusForbidden)\n\t\t\t\tw.Write([]byte(`{\"message\":\"Insufficient scope.\"}`))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tw.WriteHeader(http.StatusOK)\n\t\t\tw.Write([]byte(`{\"message\":\"Hello from a private endpoint! You need to be authenticated to see this.\"}`))\n\t\t}),\n\t))\n\n\tlog.Print(\"Server listening on http:\u002F\u002Flocalhost:3010\")\n\tif err := http.ListenAndServe(\"0.0.0.0:3010\", router); err != nil {\n\t\tlog.Fatalf(\"There was an error with the http server: %v\", err)\n\t}\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to a Go API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-golang-api-samples","path":"01-Authorization-RS256"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-golang-api-samples\u002Ftree\u002Fmaster\u002F01-Authorization-RS256","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run it from the command line:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ego mod vendor\ngo run main.go\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"java-spring-security5":{"name":"java-spring-security5","url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fjava.png","logo_name":undefined,"logo":"spring","title":"Spring Boot API","author":{"name":"Jim Anderson","email":"jim.anderson@auth0.com","community":false},"thirdParty":false,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"Okta Spring Boot Starter","url":"https:\u002F\u002Fgithub.com\u002Fokta\u002Fokta-spring-boot\u002F","logo":"spring"},"articles":[{"name":"01-authorization","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to an API using the Okta Spring Boot Starter.","canonical":undefined,"budicon":500,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Configure the Sample Project","anchor":"configure-the-sample-project","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Protect API endpoints","anchor":"protect-api-endpoints","level":2},{"content":"Create the API controller","anchor":"create-the-api-controller","level":3},{"content":"Run the Application","anchor":"run-the-application","level":2}],"nextSteps":[{"text":"Part 2: Using Your API","icon":345,"href":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002F02-using"}],"showSteps":true,"requirements":["Java 17"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to an API using the Okta Spring Boot Starter.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-spring-security5-api-sample","path":"01-Authorization-MVC"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-spring-security5-api-sample\u002Ftree\u002Fmaster\u002F01-Authorization-MVC","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003EThe sample can be run from the command line as follows:\u003C\u002Fp\u003E\n\u003Cp\u003ELinux \u002F macOS:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E.\u002Fgradlew clean bootRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EWindows:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Egradlew.bat clean bootRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe application will be served from \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:3010\u002F\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# Linux \u002F macOs\nsh exec.sh\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# Windows\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe application will be served from \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:3010\u002F\u003C\u002Fcode\u003E, just as if running with Gradle.\u003C\u002Fp\u003E\n","isActiveUrl":true},{"name":"02-using","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002F02-using","title":"Using Your API","description":"This tutorial will show you how to use your API.","canonical":undefined,"budicon":500,"titles":[{"content":"Calling the API From Your Application","anchor":"calling-the-api-from-your-application","level":2},{"content":"Obtaining an Access Token","anchor":"obtaining-an-access-token","level":2},{"content":"Test Your API","anchor":"test-your-api","level":2}],"nextSteps":[{"text":"Part 3: Troubleshooting Your API","icon":345,"href":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002F03-troubleshooting"}],"showSteps":true,"requirements":["Java 17"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002F02-using.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false},{"name":"03-troubleshooting","number":3,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002F03-troubleshooting","title":"Troubleshooting","description":"This document will help you troubleshoot your configuration if you get unexpected responses from your API.","canonical":undefined,"budicon":500,"titles":[{"content":"How Does a Token Get Validated?","anchor":"how-does-a-token-get-validated-","level":2},{"content":"Inspecting a Token","anchor":"inspecting-a-token","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about Role-Based Access Control","icon":345,"href":"\u002Fdocs\u002Fauthorization\u002Fconcepts\u002Frbac"}],"showSteps":true,"requirements":["Java 17"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002F03-troubleshooting.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false}],"versions":undefined,"defaultArticle":{"name":"01-authorization","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to an API using the Okta Spring Boot Starter.","canonical":undefined,"budicon":500,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Configure the Sample Project","anchor":"configure-the-sample-project","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Protect API endpoints","anchor":"protect-api-endpoints","level":2},{"content":"Create the API controller","anchor":"create-the-api-controller","level":3},{"content":"Run the Application","anchor":"run-the-application","level":2}],"nextSteps":[{"text":"Part 2: Using Your API","icon":345,"href":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002F02-using"}],"showSteps":true,"requirements":["Java 17"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to an API using the Okta Spring Boot Starter.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-spring-security5-api-sample","path":"01-Authorization-MVC"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-spring-security5-api-sample\u002Ftree\u002Fmaster\u002F01-Authorization-MVC","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003EThe sample can be run from the command line as follows:\u003C\u002Fp\u003E\n\u003Cp\u003ELinux \u002F macOS:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E.\u002Fgradlew clean bootRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EWindows:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Egradlew.bat clean bootRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe application will be served from \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:3010\u002F\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# Linux \u002F macOs\nsh exec.sh\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# Windows\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe application will be served from \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:3010\u002F\u003C\u002Fcode\u003E, just as if running with Gradle.\u003C\u002Fp\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002Finteractive","title":"Spring Boot API","description":"Secure your API using the Okta Spring Boot Starter","canonical":undefined,"budicon":undefined,"titles":[{"content":"Define permissions","anchor":"define-permissions","level":2},{"content":"Configure the sample project","anchor":"configure-the-sample-project","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure the resource server","anchor":"configure-the-resource-server","level":2},{"content":"Protect API endpoints","anchor":"protect-api-endpoints","level":3},{"content":"Create the Domain Object","anchor":"create-the-domain-object","level":2},{"content":"Create the API controller","anchor":"create-the-api-controller","level":2},{"content":"Run the application","anchor":"run-the-application","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Java 17"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fjava-spring-security5\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"application.yml","language":"yaml","content":"okta:\n oauth2:\n # Replace with the domain of your Auth0 tenant.\n issuer: https:\u002F\u002F__AUTH0_NAMESPACE__\u002F\n # Replace with the API Identifier for your Auth0 API.\n audience: __AUTH0_API_IDENTIFIER__"},{"filename":"SecurityConfig.java","language":"java","content":"package com.auth0.example.security;\n\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity;\nimport org.springframework.security.web.SecurityFilterChain;\n\nimport static org.springframework.security.config.Customizer.withDefaults;\n\n\u002F**\n * Configures our application with Spring Security to restrict access to our API endpoints.\n *\u002F\n@Configuration\npublic class SecurityConfig {\n\n @Bean\n public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {\n \u002F*\n This is where we configure the security required for our endpoints and setup our app to serve as\n an OAuth2 Resource Server, using JWT validation.\n *\u002F\n return http\n .authorizeHttpRequests((authorize) -\u003E authorize\n .requestMatchers(\"\u002Fapi\u002Fpublic\").permitAll()\n .requestMatchers(\"\u002Fapi\u002Fprivate\").authenticated()\n .requestMatchers(\"\u002Fapi\u002Fprivate-scoped\").hasAuthority(\"SCOPE_read:messages\")\n )\n .cors(withDefaults())\n .oauth2ResourceServer(oauth2 -\u003E oauth2\n .jwt(withDefaults())\n )\n .build();\n }\n}"},{"filename":"Message.java","language":"java","content":"\u002F**\n * Simple domain object for our API to return a message.\n *\u002F\npublic record Message(String message) {}"},{"filename":"APIController.java","language":"java","content":"import com.auth0.example.model.Message;\nimport org.springframework.http.MediaType;\nimport org.springframework.web.bind.annotation.CrossOrigin;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\n@RestController\n@RequestMapping(path = \"api\", produces = MediaType.APPLICATION_JSON_VALUE)\n\u002F\u002F For simplicity of this sample, allow all origins. Real applications should configure CORS for their use case.\n@CrossOrigin(origins = \"*\")\npublic class APIController {\n\n @GetMapping(value = \"\u002Fpublic\")\n public Message publicEndpoint() {\n return new Message(\"All good. You DO NOT need to be authenticated to call \u002Fapi\u002Fpublic.\");\n }\n\n @GetMapping(value = \"\u002Fprivate\")\n public Message privateEndpoint() {\n return new Message(\"All good. You can see this because you are Authenticated.\");\n }\n\n @GetMapping(value = \"\u002Fprivate-scoped\")\n public Message privateScopedEndpoint() {\n return new Message(\"All good. You can see this because you are Authenticated with a Token granted the 'read:messages' scope\");\n }\n}"}],"interactive":true,"downloadBoxDescription":"Secure your API using the Okta Spring Boot Starter","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-spring-security5-api-sample","path":"01-Authorization-MVC"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-spring-security5-api-sample\u002Ftree\u002Fmaster\u002F01-Authorization-MVC","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003EThe sample can be run from the command line as follows:\u003C\u002Fp\u003E\n\u003Cp\u003ELinux \u002F macOS:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E.\u002Fgradlew clean bootRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EWindows:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Egradlew.bat clean bootRun\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe application will be served from \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:3010\u002F\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# Linux \u002F macOs\nsh exec.sh\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# Windows\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe application will be served from \u003Ccode\u003Ehttp:\u002F\u002Flocalhost:3010\u002F\u003C\u002Fcode\u003E, just as if running with Gradle.\u003C\u002Fp\u003E\n","hidden":true}]},"laravel":{"name":"laravel","url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Flaravel","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fphp.png","logo_name":undefined,"logo":"laravel","title":"Laravel API","author":{"name":"Evan Sims","email":"evan.sims@auth0.com","community":false},"thirdParty":undefined,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"laravel-auth0","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Flaravel-auth0","logo":"laravel"},"articles":[{"name":"01-authorization","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Flaravel\u002F01-authorization","title":"Add Authorization to a Laravel Application","description":"Auth0's Laravel SDK allows you to quickly add token-based authorization and route access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Laravel Installation","anchor":"laravel-installation","level":2},{"content":"SDK Installation","anchor":"sdk-installation","level":2},{"content":"SDK Configuration","anchor":"sdk-configuration","level":2},{"content":"Access Control","anchor":"access-control","level":2},{"content":"Token Information","anchor":"token-information","level":2},{"content":"Retrieve User Information","anchor":"retrieve-user-information","level":2},{"content":"Run the Application","anchor":"run-the-application","level":2},{"content":"Retrieve a Test Token","anchor":"retrieve-a-test-token","level":2},{"content":"Checkpoint","anchor":"checkpoint","level":2},{"content":"Additional Reading","anchor":"additional-reading","level":3}],"nextSteps":[],"showSteps":true,"requirements":["Laravel 9 \u002F 10","PHP 8.0+","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Flaravel\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"Auth0's Laravel SDK allows you to quickly add token-based authorization and route access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","githubData":{"branch":"7.x","org":"auth0-samples","repo":"laravel","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Flaravel\u002Ftree\u002F7.x\u002Fsample","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003EOpen a shell to the downloaded project directory, and run the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer install\nphp artisan migrate\nphp artisan key:generate\nphp artisan serve\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-authorization","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Flaravel\u002F01-authorization","title":"Add Authorization to a Laravel Application","description":"Auth0's Laravel SDK allows you to quickly add token-based authorization and route access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Laravel Installation","anchor":"laravel-installation","level":2},{"content":"SDK Installation","anchor":"sdk-installation","level":2},{"content":"SDK Configuration","anchor":"sdk-configuration","level":2},{"content":"Access Control","anchor":"access-control","level":2},{"content":"Token Information","anchor":"token-information","level":2},{"content":"Retrieve User Information","anchor":"retrieve-user-information","level":2},{"content":"Run the Application","anchor":"run-the-application","level":2},{"content":"Retrieve a Test Token","anchor":"retrieve-a-test-token","level":2},{"content":"Checkpoint","anchor":"checkpoint","level":2},{"content":"Additional Reading","anchor":"additional-reading","level":3}],"nextSteps":[],"showSteps":true,"requirements":["Laravel 9 \u002F 10","PHP 8.0+","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Flaravel\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"Auth0's Laravel SDK allows you to quickly add token-based authorization and route access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","githubData":{"branch":"7.x","org":"auth0-samples","repo":"laravel","path":"sample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Flaravel\u002Ftree\u002F7.x\u002Fsample","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003EOpen a shell to the downloaded project directory, and run the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer install\nphp artisan migrate\nphp artisan key:generate\nphp artisan serve\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Flaravel\u002Finteractive","title":"Add Authorization to a Laravel Application","description":"Auth0's Laravel SDK allows you to quickly add token-based authorization and route access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Laravel Installation","anchor":"laravel-installation","level":2},{"content":"SDK Installation","anchor":"sdk-installation","level":2},{"content":"SDK Configuration","anchor":"sdk-configuration","level":2},{"content":"Access Control","anchor":"access-control","level":2},{"content":"Token Information","anchor":"token-information","level":2},{"content":"Retrieve User Information","anchor":"retrieve-user-information","level":2},{"content":"Run the Application","anchor":"run-the-application","level":2},{"content":"Retrieve a Test Token","anchor":"retrieve-a-test-token","level":2},{"content":"Additional Reading","anchor":"additional-reading","level":3}],"nextSteps":[],"showSteps":true,"requirements":["Laravel 9 \u002F 10","PHP 8.0+","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Flaravel\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"routes\u002Fapi.php","language":"php","content":"\u003C?php\n\nuse Auth0\\Laravel\\Facade\\Auth0;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::get('\u002Fprivate', function () {\n return response()-\u003Ejson([\n 'message' =\u003E 'Your token is valid; you are authorized.',\n ]);\n})-\u003Emiddleware('auth');\n\nRoute::get('\u002Fscope', function () {\n return response()-\u003Ejson([\n 'message' =\u003E 'Your token is valid and has the `read:messages` permission; you are authorized.',\n ]);\n})-\u003Emiddleware('auth')-\u003Ecan('read:messages');\n\nRoute::get('\u002F', function () {\n if (! auth()-\u003Echeck()) {\n return response()-\u003Ejson([\n 'message' =\u003E 'You did not provide a valid token.',\n ]);\n }\n\n return response()-\u003Ejson([\n 'message' =\u003E 'Your token is valid; you are authorized.',\n 'id' =\u003E auth()-\u003Eid(),\n 'token' =\u003E auth()?-\u003Euser()?-\u003EgetAttributes(),\n ]);\n});\n\nRoute::get('\u002Fme', function () {\n $user = auth()-\u003Eid();\n $profile = cache()-\u003Eget($user);\n\n if (null === $profile) {\n $endpoint = Auth0::management()-\u003Eusers();\n $profile = $endpoint-\u003Eget($user);\n $profile = Auth0::json($profile);\n\n cache()-\u003Eput($user, $profile, 120);\n }\n\n $name = $profile['name'] ?? 'Unknown';\n $email = $profile['email'] ?? 'Unknown';\n\n return response()-\u003Ejson([\n 'name' =\u003E $name,\n 'email' =\u003E $email,\n ]);\n})-\u003Emiddleware('auth');"}],"interactive":true,"downloadBoxDescription":"Auth0's Laravel SDK allows you to quickly add token-based authorization and route access control to your Laravel application. This guide demonstrates how to integrate Auth0 with a new or existing Laravel 9 or 10 application.","githubData":{"branch":"7.x","org":"auth0-samples","repo":"laravel","path":"app"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Flaravel\u002Ftree\u002F7.x\u002Fapp","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003EOpen a shell to the downloaded project directory, and run the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer install\nphp artisan migrate\nphp artisan key:generate\nphp artisan serve\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"nodejs":{"name":"nodejs","url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fnodejs","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fnode.png","logo_name":undefined,"logo":"nodejs","title":"Node (Express) API","author":{"name":"David Patrick","email":"david.patrick@auth0.com","community":false},"thirdParty":false,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"express-oauth2-jwt-bearer","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fnode-oauth2-jwt-bearer\u002Ftree\u002Fmain\u002Fpackages\u002Fexpress-oauth2-jwt-bearer","logo":"nodejs"},"articles":[{"name":"01-authorization","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fnodejs\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to an Express.js API.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Configure the middleware","anchor":"configure-the-middleware","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["express-oauth2-jwt-bearer 1.0.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fnodejs\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to an Express.js API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-express-api-samples","path":"01-Authorization-RS256"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-express-api-samples\u002Ftree\u002Fmaster\u002F01-Authorization-RS256","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run the example you need \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E installed, and to run the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true},{"name":"02-using","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fnodejs\u002F02-using","title":"Using your API","description":"This tutorial will show you how to use your API.","canonical":undefined,"budicon":500,"titles":[{"content":"Calling the API From Your Application","anchor":"calling-the-api-from-your-application","level":2},{"content":"Obtaining an Access Token","anchor":"obtaining-an-access-token","level":2},{"content":"Test Your API","anchor":"test-your-api","level":2}],"nextSteps":[],"showSteps":true,"requirements":["express-oauth2-jwt-bearer 1.0.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fnodejs\u002F02-using.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false},{"name":"03-troubleshooting","number":3,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fnodejs\u002F03-troubleshooting","title":"Troubleshooting","description":"This document will help you troubleshoot your configuration if you get unexpected responses from your API.","canonical":undefined,"budicon":500,"titles":[{"content":"How Does a Token Get Validated?","anchor":"how-does-a-token-get-validated-","level":2},{"content":"Inspecting a Token","anchor":"inspecting-a-token","level":2}],"nextSteps":[],"showSteps":true,"requirements":["express-oauth2-jwt-bearer 1.0.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fnodejs\u002F03-troubleshooting.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false}],"versions":undefined,"defaultArticle":{"name":"01-authorization","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fnodejs\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to an Express.js API.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Configure the middleware","anchor":"configure-the-middleware","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["express-oauth2-jwt-bearer 1.0.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fnodejs\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to an Express.js API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-express-api-samples","path":"01-Authorization-RS256"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-express-api-samples\u002Ftree\u002Fmaster\u002F01-Authorization-RS256","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run the example you need \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E installed, and to run the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fnodejs\u002Finteractive","title":"Add authorization to an Express.js API application","description":"This tutorial demonstrates how to add authorization to an Express.js API.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Define permissions","anchor":"define-permissions","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure the middleware","anchor":"configure-the-middleware","level":2},{"content":"Protect API endpoints","anchor":"protect-api-endpoints","level":2},{"content":"Make a Call to Your API","anchor":"make-a-call-to-your-api","level":3}],"nextSteps":[],"showSteps":true,"requirements":["express-oauth2-jwt-bearer 1.0.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fnodejs\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"server.js","language":"javascript","content":"const express = require('express');\nconst app = express();\nconst { auth, requiredScopes } = require('express-oauth2-jwt-bearer');\n\n\u002F\u002F Authorization middleware. When used, the Access Token must\n\u002F\u002F exist and be verified against the Auth0 JSON Web Key Set.\nconst checkJwt = auth({\n audience: '__AUTH0_API_IDENTIFIER__',\n issuerBaseURL: `https:\u002F\u002F__AUTH0_NAMESPACE__\u002F`,\n});\n\n\u002F\u002F This route doesn't need authentication\napp.get('\u002Fapi\u002Fpublic', function(req, res) {\n res.json({\n message: 'Hello from a public endpoint! You don\\'t need to be authenticated to see this.'\n });\n});\n\n\u002F\u002F This route needs authentication\napp.get('\u002Fapi\u002Fprivate', checkJwt, function(req, res) {\n res.json({\n message: 'Hello from a private endpoint! You need to be authenticated to see this.'\n });\n});\n\nconst checkScopes = requiredScopes('read:messages');\n\napp.get('\u002Fapi\u002Fprivate-scoped', checkJwt, checkScopes, function(req, res) {\n res.json({\n message: 'Hello from a private endpoint! You need to be authenticated and have a scope of read:messages to see this.'\n });\n});\n\napp.listen(3000, function() {\n console.log('Listening on http:\u002F\u002Flocalhost:3000');\n});"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to an Express.js API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-express-api-samples","path":"01-Authorization-RS256"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-express-api-samples\u002Ftree\u002Fmaster\u002F01-Authorization-RS256","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run the example you need \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F\"\u003ENode.JS LTS\u003C\u002Fa\u003E installed, and to run the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Enpm install\nnpm start\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"php":{"name":"php","url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fphp","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fphp.png","logo_name":undefined,"logo":"php","title":"PHP API","author":{"name":"Evan Sims","email":"evan.sims@auth0.com","community":false},"thirdParty":false,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"Auth0-PHP","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-php","logo":"php"},"articles":[{"name":"01-authorization","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fphp\u002F01-authorization","title":"Authorization","description":"This guide demonstrates how to integrate Auth0 with a PHP backend API using the Auth0 PHP SDK.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Integrating your PHP Backend API","anchor":"integrating-your-php-backend-api","level":2},{"content":"Installing HTTP Client and Messaging Factories","anchor":"installing-http-client-and-messaging-factories","level":3},{"content":"Installing the PHP SDK","anchor":"installing-the-php-sdk","level":3},{"content":"Configure the SDK","anchor":"configure-the-sdk","level":3},{"content":"Authenticating the user","anchor":"authenticating-the-user","level":3},{"content":"Authorizing an Access Token","anchor":"authorizing-an-access-token","level":3},{"content":"Caching","anchor":"caching","level":3}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["PHP 7.4+ (8.0 recommended)","Auth0-PHP 8.0","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fphp\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This guide demonstrates how to integrate Auth0 with a PHP backend API using the Auth0 PHP SDK.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-php-api-samples","path":"app"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-php-api-samples\u002Ftree\u002Fmain\u002Fapp","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run the sample, make sure \u003Ca href=\"http:\u002F\u002Fphp.net\u002Fdownloads.php\"\u003EPHP\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fgetcomposer.org\u002Fdownload\u002F\"\u003EComposer\u003C\u002Fa\u003E are installed and execute the following commands in the sample's directory:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run app\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run docker\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true}],"versions":undefined,"defaultArticle":{"name":"01-authorization","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fphp\u002F01-authorization","title":"Authorization","description":"This guide demonstrates how to integrate Auth0 with a PHP backend API using the Auth0 PHP SDK.","canonical":undefined,"budicon":448,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Integrating your PHP Backend API","anchor":"integrating-your-php-backend-api","level":2},{"content":"Installing HTTP Client and Messaging Factories","anchor":"installing-http-client-and-messaging-factories","level":3},{"content":"Installing the PHP SDK","anchor":"installing-the-php-sdk","level":3},{"content":"Configure the SDK","anchor":"configure-the-sdk","level":3},{"content":"Authenticating the user","anchor":"authenticating-the-user","level":3},{"content":"Authorizing an Access Token","anchor":"authorizing-an-access-token","level":3},{"content":"Caching","anchor":"caching","level":3}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["PHP 7.4+ (8.0 recommended)","Auth0-PHP 8.0","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fphp\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This guide demonstrates how to integrate Auth0 with a PHP backend API using the Auth0 PHP SDK.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-php-api-samples","path":"app"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-php-api-samples\u002Ftree\u002Fmain\u002Fapp","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run the sample, make sure \u003Ca href=\"http:\u002F\u002Fphp.net\u002Fdownloads.php\"\u003EPHP\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fgetcomposer.org\u002Fdownload\u002F\"\u003EComposer\u003C\u002Fa\u003E are installed and execute the following commands in the sample's directory:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run app\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run docker\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fphp\u002Finteractive","title":"Add endpoint authorization to your PHP application","description":"Auth0 allows you to add token-based endpoint authorization to your PHP application quickly and to protect your routes. This guide demonstrates how to integrate Auth0 with any new or existing PHP application using the Auth0 PHP SDK.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0","anchor":"configure-auth0","level":2},{"content":"Configure an application","anchor":"configure-an-application","level":3},{"content":"Configure an API","anchor":"configure-an-api","level":3},{"content":"Install the Auth0 PHP SDK","anchor":"install-the-auth0-php-sdk","level":2},{"content":"Configure the Auth0 SDK","anchor":"configure-the-auth0-sdk","level":3},{"content":"Listen for bearer tokens","anchor":"listen-for-bearer-tokens","level":2},{"content":"Create and configure routes","anchor":"create-and-configure-routes","level":2},{"content":"Configue endpoint authorization","anchor":"configue-endpoint-authorization","level":2},{"content":"Authorize with scopes","anchor":"authorize-with-scopes","level":2}],"nextSteps":[],"showSteps":true,"requirements":["PHP 7.4+ (8.0 recommended)","Auth0-PHP 8.0","Composer"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fphp\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"index.php","language":"php","content":"\u003C?php\n\n declare(strict_types=1);\n\n require('vendor\u002Fautoload.php');\n\n use Auth0\\SDK\\Auth0;\n use Auth0\\SDK\\Configuration\\SdkConfiguration;\n\n $configuration = new SdkConfiguration(\n strategy: SdkConfiguration::STRATEGY_API,\n domain: '__AUTH0_NAMESPACE__',\n clientId: '__AUTH0_CLIENT_ID__',\n clientSecret: '__AUTH0_CLIENT_SECRET__',\n audience: ['YOUR_API_IDENTIFIER']\n );\n\n $sdk = new Auth0($configuration);\n\n $token = $sdk-\u003EgetBearerToken(\n get: ['token'],\n server: ['Authorization']\n );\n\n require('router.php');"},{"filename":"router.php","language":"php","content":"\u003C?php\n\n declare(strict_types=1);\n\n use Steampixel\\Route;\n\n function routeResponse(\n array $response\n ) {\n header('Content-Type: application\u002Fjson');\n print(json_encode($response, JSON_PRETTY_PRINT));\n }\n\n Route::add('\u002Fapi\u002Fpublic', function() use ($token) {\n routeResponse([\n 'message' =\u003E 'Hello from a public endpoint! You don\\'t need to be authenticated to see this.',\n 'token' =\u003E $token\n ]);\n });\n\n Route::add('\u002Fapi\u002Fprivate', function() use ($token) {\n if ($token === null) {\n http_response_code(401);\n exit;\n }\n\n routeResponse([\n 'message' =\u003E 'Hello from a private endpoint! You need to be authenticated to see this.',\n 'token' =\u003E $token,\n ]);\n });\n\n Route::add('\u002Fapi\u002Fprivate-scoped', function() use ($token) {\n if ($token === null) {\n http_response_code(401);\n exit;\n }\n\n if (! in_array('read:messages', $token['scopes'], true)) {\n http_response_code(401);\n exit;\n }\n\n routeResponse([\n 'message' =\u003E 'Hello from a private endpoint! You need to be authenticated and have a scope of read:messages to see this.',\n 'token' =\u003E $token,\n ]);\n });\n\n \u002F\u002F The following route is just to avoid confusion.\n \u002F\u002F We're not using an 'index route' in this app, so redirect requests to \u002Fapi\u002Fpublic.\n Route::add('\u002F', function() {\n header('Location: \u002Fapi\u002Fpublic');\n });\n\n Route::run();"}],"interactive":true,"downloadBoxDescription":"Auth0 allows you to add token-based endpoint authorization to your PHP application quickly and to protect your routes. This guide demonstrates how to integrate Auth0 with any new or existing PHP application using the Auth0 PHP SDK.","githubData":{"branch":"main","org":"auth0-samples","repo":"auth0-php-api-samples","path":"app"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-php-api-samples\u002Ftree\u002Fmain\u002Fapp","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run the sample, make sure \u003Ca href=\"http:\u002F\u002Fphp.net\u002Fdownloads.php\"\u003EPHP\u003C\u002Fa\u003E and \u003Ca href=\"https:\u002F\u002Fgetcomposer.org\u002Fdownload\u002F\"\u003EComposer\u003C\u002Fa\u003E are installed and execute the following commands in the sample's directory:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run app\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EYou can also run it from \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E with the following commands:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecomposer run docker\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"}]},"python":{"name":"python","url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fpython","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fpython.png","logo_name":undefined,"logo":"python","title":"Python API","author":{"name":"Luciano Balmaceda","email":"luciano.balmaceda@auth0.com","community":false},"thirdParty":false,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"auth0-python","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-python","logo":"python"},"articles":[{"name":"01-authorization","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fpython\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to a Python API built with Flask.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Create a Flask application","anchor":"create-a-flask-application","level":3},{"content":"Create the JWT validation decorator","anchor":"create-the-jwt-validation-decorator","level":3},{"content":"Validate scopes","anchor":"validate-scopes","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Python 3.6 and up","Flask 2.0","Authlib 1.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fpython\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to a Python API built with Flask.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-python-api-samples","path":"00-Starter-Seed"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-python-api-samples\u002Ftree\u002Fmaster\u002F00-Starter-Seed","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run it from the command line:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epip install -r requirements.txt \npython server.py\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true},{"name":"02-using","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fpython\u002F02-using","title":"Using your API","description":"This tutorial will show you how to use your API.","canonical":undefined,"budicon":500,"titles":[{"content":"Calling the API From Your Application","anchor":"calling-the-api-from-your-application","level":2},{"content":"Obtaining an Access Token","anchor":"obtaining-an-access-token","level":2},{"content":"Test Your API","anchor":"test-your-api","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Python 3.6 and up","Flask 2.0","Authlib 1.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fpython\u002F02-using.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false},{"name":"03-troubleshooting","number":3,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fpython\u002F03-troubleshooting","title":"Troubleshooting","description":"This document will help you troubleshoot your configuration if you get unexpected responses from your API.","canonical":undefined,"budicon":500,"titles":[{"content":"How Does a Token Get Validated?","anchor":"how-does-a-token-get-validated-","level":2},{"content":"Inspecting a Token","anchor":"inspecting-a-token","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Python 3.6 and up","Flask 2.0","Authlib 1.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fpython\u002F03-troubleshooting.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false}],"versions":undefined,"defaultArticle":{"name":"01-authorization","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fpython\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to a Python API built with Flask.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Create a Flask application","anchor":"create-a-flask-application","level":3},{"content":"Create the JWT validation decorator","anchor":"create-the-jwt-validation-decorator","level":3},{"content":"Validate scopes","anchor":"validate-scopes","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Python 3.6 and up","Flask 2.0","Authlib 1.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fpython\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to a Python API built with Flask.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-python-api-samples","path":"00-Starter-Seed"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-python-api-samples\u002Ftree\u002Fmaster\u002F00-Starter-Seed","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run it from the command line:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epip install -r requirements.txt \npython server.py\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fpython\u002Finteractive","title":"Add Authorization to a Flask API application","description":"This tutorial demonstrates how to add authorization to a Python API built with Flask.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Define permissions","anchor":"define-permissions","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Create the JWT validator","anchor":"create-the-jwt-validator","level":2},{"content":"Create a Flask application","anchor":"create-a-flask-application","level":2},{"content":"Make a Call to Your API","anchor":"make-a-call-to-your-api","level":3}],"nextSteps":[],"showSteps":true,"requirements":["Python 3.6 and up","Flask 2.0","Authlib 1.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fpython\u002Finteractive.md","showDownloadSample":false,"sampleFiles":[{"filename":"validator.py","language":"python","content":"import json\nfrom urllib.request import urlopen\n\nfrom authlib.oauth2.rfc7523 import JWTBearerTokenValidator\nfrom authlib.jose.rfc7517.jwk import JsonWebKey\n\n\nclass Auth0JWTBearerTokenValidator(JWTBearerTokenValidator):\n def __init__(self, domain, audience):\n issuer = f\"https:\u002F\u002F{domain}\u002F\"\n jsonurl = urlopen(f\"{issuer}.well-known\u002Fjwks.json\")\n public_key = JsonWebKey.import_key_set(\n json.loads(jsonurl.read())\n )\n super(Auth0JWTBearerTokenValidator, self).__init__(\n public_key\n )\n self.claims_options = {\n \"exp\": {\"essential\": True},\n \"aud\": {\"essential\": True, \"value\": audience},\n \"iss\": {\"essential\": True, \"value\": issuer},\n }"},{"filename":"server.py","language":"python","content":"\"\"\"Python Flask API Auth0 integration example\n\"\"\"\n\nfrom os import environ as env\n\nfrom dotenv import load_dotenv, find_dotenv\nfrom flask import Flask, jsonify\nfrom authlib.integrations.flask_oauth2 import ResourceProtector\nfrom validator import Auth0JWTBearerTokenValidator\n\nrequire_auth = ResourceProtector()\nvalidator = Auth0JWTBearerTokenValidator(\n \"__AUTH0_NAMESPACE__\",\n \"__AUTH0_API_IDENTIFIER__\"\n)\nrequire_auth.register_token_validator(validator)\n\nAPP = Flask(__name__)\n\n\n@APP.route(\"\u002Fapi\u002Fpublic\")\ndef public():\n \"\"\"No access token required.\"\"\"\n response = (\n \"Hello from a public endpoint! You don't need to be\"\n \" authenticated to see this.\"\n )\n return jsonify(message=response)\n\n\n@APP.route(\"\u002Fapi\u002Fprivate\")\n@require_auth(None)\ndef private():\n \"\"\"A valid access token is required.\"\"\"\n response = (\n \"Hello from a private endpoint! You need to be\"\n \" authenticated to see this.\"\n )\n return jsonify(message=response)\n\n\n@APP.route(\"\u002Fapi\u002Fprivate-scoped\")\n@require_auth(\"read:messages\")\ndef private_scoped():\n \"\"\"A valid access token and scope are required.\"\"\"\n response = (\n \"Hello from a private endpoint! You need to be\"\n \" authenticated and have a scope of read:messages to see\"\n \" this.\"\n )\n return jsonify(message=response)"}],"interactive":true,"hidden":true}]},"rails":{"name":"rails","url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Frails","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Frails.png","logo_name":undefined,"logo":"rails","title":"Ruby On Rails API","author":{"name":"Josh Cunningham","email":"josh.cunningham@auth0.com","community":false},"thirdParty":false,"currentVersion":undefined,"beta":false,"showReleases":false,"sdk":{"name":"omniauth-auth0","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fomniauth-auth0","logo":"rails"},"articles":[{"name":"01-authorization","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Frails\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to a Ruby on Rails API.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Create an Auth0Client class","anchor":"create-an-auth0client-class","level":3},{"content":"Define a Secured concern","anchor":"define-a-secured-concern","level":3},{"content":"Validate scopes","anchor":"validate-scopes","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Ruby 2.1.8","Rails 4.2.5"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Frails\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to a Ruby on Rails API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-rubyonrails-api-samples","path":"01-Authentication-RS256"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-rubyonrails-api-samples\u002Ftree\u002Fmaster\u002F01-Authentication-RS256","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run it from the command line:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ebundle install\nrails s --port 3010\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","isActiveUrl":true},{"name":"02-using","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Frails\u002F02-using","title":"Using your API","description":"This tutorial will show you how to use your API.","canonical":undefined,"budicon":500,"titles":[{"content":"Calling the API From Your Application","anchor":"calling-the-api-from-your-application","level":2},{"content":"Obtaining an Access Token","anchor":"obtaining-an-access-token","level":2},{"content":"Test Your API","anchor":"test-your-api","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Ruby 2.1.8","Rails 4.2.5"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Frails\u002F02-using.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false},{"name":"03-troubleshooting","number":3,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Frails\u002F03-troubleshooting","title":"Troubleshooting","description":"This document will help you troubleshoot your configuration if you get unexpected responses from your API.","canonical":undefined,"budicon":500,"titles":[{"content":"How Does a Token Get Validated?","anchor":"how-does-a-token-get-validated-","level":2},{"content":"Inspecting a Token","anchor":"inspecting-a-token","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Ruby 2.1.8","Rails 4.2.5"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Frails\u002F03-troubleshooting.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false}],"versions":undefined,"defaultArticle":{"name":"01-authorization","number":undefined,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Frails\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to a Ruby on Rails API.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Create an Auth0Client class","anchor":"create-an-auth0client-class","level":3},{"content":"Define a Secured concern","anchor":"define-a-secured-concern","level":3},{"content":"Validate scopes","anchor":"validate-scopes","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Ruby 2.1.8","Rails 4.2.5"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Frails\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to a Ruby on Rails API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-rubyonrails-api-samples","path":"01-Authentication-RS256"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-rubyonrails-api-samples\u002Ftree\u002Fmaster\u002F01-Authentication-RS256","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run it from the command line:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ebundle install\nrails s --port 3010\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n"},"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Frails\u002Finteractive","title":"Add authorization to a Ruby on Rails API","description":"This tutorial demonstrates how to add authorization to a Ruby on Rails API.","canonical":undefined,"budicon":undefined,"titles":[{"content":"Define permissions","anchor":"define-permissions","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Create an Auth0Client class","anchor":"create-an-auth0client-class","level":2},{"content":"Define a Secured concern","anchor":"define-a-secured-concern","level":2},{"content":"Include the Secure concern in your ApplicationController","anchor":"include-the-secure-concern-in-your-applicationcontroller","level":2},{"content":"Create the public endpoint","anchor":"create-the-public-endpoint","level":2},{"content":"Create the private endpoints","anchor":"create-the-private-endpoints","level":2},{"content":"Make a Call to Your API","anchor":"make-a-call-to-your-api","level":3}],"nextSteps":[],"showSteps":true,"requirements":["Ruby 2.1.8","Rails 4.2.5"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Frails\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"app\u002Fcontrollers\u002Fapplication_controller.rb","language":"ruby","content":"# frozen_string_literal: true\n\nclass ApplicationController \u003C ActionController::API\n include Secured\nend"},{"filename":"app\u002Flib\u002Fauth0_client.rb","language":"ruby","content":"# frozen_string_literal: true\n\nrequire 'jwt'\nrequire 'net\u002Fhttp'\n\n# Auth0Client class to handle JWT token validation\nclass Auth0Client\n # Auth0 Client Objects \n Error = Struct.new(:message, :status)\n Response = Struct.new(:decoded_token, :error)\n Token = Struct.new(:token) do\n def validate_permissions(permissions)\n required_permissions = Set.new permissions\n scopes = token[0]['scope']\n token_permissions = scopes.present? ? Set.new(scopes.split(\" \")) : Set.new\n required_permissions \u003C= token_permissions\n end\n end\n\n # Helper Functions \n def self.domain_url\n \"https:\u002F\u002F#{Rails.configuration.auth0.domain}\u002F\"\n end\n\n def self.decode_token(token, jwks_hash)\n JWT.decode(token, nil, true, {\n algorithm: 'RS256',\n iss: domain_url,\n verify_iss: true,\n aud: Rails.configuration.auth0.audience,\n verify_aud: true,\n jwks: { keys: jwks_hash[:keys] }\n })\n end\n\n def self.get_jwks\n jwks_uri = URI(\"#{domain_url}.well-known\u002Fjwks.json\")\n Net::HTTP.get_response jwks_uri\n end\n\n # Token Validation \n def self.validate_token(token)\n jwks_response = get_jwks\n\n unless jwks_response.is_a? Net::HTTPSuccess\n error = Error.new(message: 'Unable to verify credentials', status: :internal_server_error)\n return Response.new(nil, error)\n end\n\n jwks_hash = JSON.parse(jwks_response.body).deep_symbolize_keys\n\n decoded_token = decode_token(token, jwks_hash)\n\n Response.new(Token.new(decoded_token), nil)\n rescue JWT::VerificationError, JWT::DecodeError =\u003E e\n error = Error.new('Bad credentials', :unauthorized)\n Response.new(nil, error)\n end\nend"},{"filename":"app\u002Fcontrollers\u002Fconcerns\u002Fsecured.rb","language":"ruby","content":"# frozen_string_literal: true\n\nmodule Secured\n extend ActiveSupport::Concern\n\n REQUIRES_AUTHENTICATION = { message: 'Requires authentication' }.freeze\n BAD_CREDENTIALS = {\n message: 'Bad credentials'\n }.freeze\n MALFORMED_AUTHORIZATION_HEADER = {\n error: 'invalid_request',\n error_description: 'Authorization header value must follow this format: Bearer access-token',\n message: 'Bad credentials'\n }.freeze\n INSUFFICIENT_PERMISSIONS = {\n error: 'insufficient_permissions',\n error_description: 'The access token does not contain the required permissions',\n message: 'Permission denied'\n }.freeze\n\n def authorize\n token = token_from_request\n\n return if performed?\n\n validation_response = Auth0Client.validate_token(token)\n\n @decoded_token = validation_response.decoded_token\n\n return unless (error = validation_response.error)\n\n render json: { message: error.message }, status: error.status\n end\n\n def validate_permissions(permissions)\n raise 'validate_permissions needs to be called with a block' unless block_given?\n return yield if @decoded_token.validate_permissions(permissions)\n\n render json: INSUFFICIENT_PERMISSIONS, status: :forbidden\n end\n\n private\n\n def token_from_request\n authorization_header_elements = request.headers['Authorization']&.split\n\n render json: REQUIRES_AUTHENTICATION, status: :unauthorized and return unless authorization_header_elements\n\n unless authorization_header_elements.length == 2\n render json: MALFORMED_AUTHORIZATION_HEADER,\n status: :unauthorized and return\n end\n\n scheme, token = authorization_header_elements\n\n render json: BAD_CREDENTIALS, status: :unauthorized and return unless scheme.downcase == 'bearer'\n\n token\n end\nend"},{"filename":"app\u002Fcontrollers\u002Fpublic_controller.rb","language":"ruby","content":"# frozen_string_literal: true\nclass PublicController \u003C ApplicationController\n def public\n render json: { message: 'All good. You don\\'t need to be authenticated to call this.' }\n end\nend"},{"filename":"app\u002Fcontrollers\u002Fprivate_controller.rb","language":"ruby","content":"# frozen_string_literal: true\nclass PrivateController \u003C ApplicationController\n before_action :authorize\n\n def private\n render json: { message: 'Hello from a private endpoint! You need to be authenticated to see this.' }\n end\n\n def private_scoped\n validate_permissions ['read:messages'] do\n render json: { message: 'Hello from a private endpoint! You need to be authenticated and have a scope of read:messages to see this.' }\n end\n end\nend"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to a Ruby on Rails API.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-rubyonrails-api-samples","path":"01-Authentication-RS256"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-rubyonrails-api-samples\u002Ftree\u002Fmaster\u002F01-Authentication-RS256","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run it from the command line:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ebundle install\nrails s --port 3010\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EThe sample includes a \u003Ca href=\"https:\u002F\u002Fwww.docker.com\"\u003EDocker\u003C\u002Fa\u003E image ready to run with the following command:\u003C\u002Fp\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# In Linux \u002F macOS\nsh exec.sh\n# In Windows' Powershell\n.\u002Fexec.ps1\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n","hidden":true}]},"webapi-owin":{"name":"webapi-owin","url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fwebapi-owin","image":"https:\u002F\u002Fcdn2.auth0.com\u002Fdocs\u002F1.14124.0\u002Fmedia\u002Fplatforms\u002Fasp.png","logo_name":undefined,"logo":"dotnet","title":"ASP.NET Web API (OWIN)","author":{"name":"Damien Guard","email":"damien.guard@auth0.com","community":false},"thirdParty":false,"currentVersion":undefined,"beta":false,"showReleases":false,"articles":[{"name":"01-authorization","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fwebapi-owin\u002F01-authorization","title":"Authorization","description":"This tutorial demonstrates how to add authorization to an ASP.NET OWIN API using the standard JWT middleware.","canonical":undefined,"budicon":500,"titles":[{"content":"Configure Auth0 APIs","anchor":"configure-auth0-apis","level":2},{"content":"Create an API","anchor":"create-an-api","level":3},{"content":"Define permissions","anchor":"define-permissions","level":3},{"content":"Configure the Sample Project","anchor":"configure-the-sample-project","level":2},{"content":"Validate Access Tokens","anchor":"validate-access-tokens","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":3},{"content":"Verifying the token signature","anchor":"verifying-the-token-signature","level":3},{"content":"Configuration","anchor":"configuration","level":3},{"content":"Validate scopes","anchor":"validate-scopes","level":3},{"content":"Protect API Endpoints","anchor":"protect-api-endpoints","level":2}],"nextSteps":[{"text":"Configure other identity providers","icon":345,"href":"\u002Fdocs\u002Fidentityproviders"},{"text":"Enable multifactor authentication","icon":345,"href":"\u002Fdocs\u002Fmultifactor-authentication"},{"text":"Learn about attack protection","icon":345,"href":"\u002Fdocs\u002Fattack-protection"},{"text":"Learn about rules","icon":345,"href":"\u002Fdocs\u002Frules"}],"showSteps":true,"requirements":["Microsoft Visual Studio 2015 Update 3","System.IdentityModel.Tokens.Jwt NuGet Package v5.2.2","Microsoft.Owin.Security.Jwt NuGet Package V4.0.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fwebapi-owin\u002F01-authorization.md","showDownloadSample":true,"sampleFiles":undefined,"interactive":undefined,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to an ASP.NET OWIN API using the standard JWT middleware.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-aspnet-owin-webapi-samples","path":"Quickstart\u002FSample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnet-owin-webapi-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002FSample","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run the sample, open the solution in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002F\"\u003EVisual Studio\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003Cp\u003EClick the \u003Ccode\u003EStart\u003C\u002Fcode\u003E button or select the menu option \u003Ccode\u003EDebug | Start Debugging\u003C\u002Fcode\u003E or use the keyboard shortcut \u003Ccode\u003EF5\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n","isActiveUrl":true},{"name":"02-using","number":2,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fwebapi-owin\u002F02-using","title":"Using your API","description":"This tutorial will show you how to use your API.","canonical":undefined,"budicon":500,"titles":[{"content":"Calling the API From Your Application","anchor":"calling-the-api-from-your-application","level":2},{"content":"Obtaining an Access Token","anchor":"obtaining-an-access-token","level":2},{"content":"Test Your API","anchor":"test-your-api","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Microsoft Visual Studio 2015 Update 3","System.IdentityModel.Tokens.Jwt NuGet Package v5.2.2","Microsoft.Owin.Security.Jwt NuGet Package V4.0.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fwebapi-owin\u002F02-using.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false},{"name":"03-troubleshooting","number":3,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fwebapi-owin\u002F03-troubleshooting","title":"Troubleshooting","description":"This document will help you troubleshoot your configuration if you get a 401 (Unauthorized) response from your API.","canonical":undefined,"budicon":500,"titles":[{"content":"How does a token get validated?","anchor":"how-does-a-token-get-validated-","level":2},{"content":"Inspecting a token","anchor":"inspecting-a-token","level":2},{"content":"Using the log files to debug configuration issues","anchor":"using-the-log-files-to-debug-configuration-issues","level":2},{"content":"1. Are you actually passing the JWT in the Authorization header?","anchor":"1-are-you-actually-passing-the-jwt-in-the-authorization-header-","level":3},{"content":"2. Did you configure the JWT middleware for the correct signing algorithm?","anchor":"2-did-you-configure-the-jwt-middleware-for-the-correct-signing-algorithm-","level":2},{"content":"3. Has your token expired?","anchor":"3-has-your-token-expired-","level":2},{"content":"4. Did you configure the correct Issuer?","anchor":"4-did-you-configure-the-correct-issuer-","level":2},{"content":"5. Does the audience match?","anchor":"5-does-the-audience-match-","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Microsoft Visual Studio 2015 Update 3","System.IdentityModel.Tokens.Jwt NuGet Package v5.2.2","Microsoft.Owin.Security.Jwt NuGet Package V4.0.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fwebapi-owin\u002F03-troubleshooting.md","showDownloadSample":false,"sampleFiles":undefined,"interactive":undefined,"isActiveUrl":false}],"versions":undefined,"defaultArticle":undefined,"hiddenArticles":[{"name":"interactive","number":1,"url":"\u002Fdocs\u002Fquickstart\u002Fbackend\u002Fwebapi-owin\u002Finteractive","title":"Add Authorization to an ASP.NET Owin Web API application","description":"This tutorial demonstrates how to add authorization to an ASP.NET OWIN API using the standard JWT middleware.","canonical":undefined,"budicon":448,"titles":[{"content":"Define permissions","anchor":"define-permissions","level":2},{"content":"Install dependencies","anchor":"install-dependencies","level":2},{"content":"Configure the middleware","anchor":"configure-the-middleware","level":2},{"content":"Verifying the token signature","anchor":"verifying-the-token-signature","level":2},{"content":"Validate scopes","anchor":"validate-scopes","level":2},{"content":"Protect API endpoints","anchor":"protect-api-endpoints","level":2}],"nextSteps":[],"showSteps":true,"requirements":["Microsoft Visual Studio 2015 Update 3","System.IdentityModel.Tokens.Jwt NuGet Package v5.2.2","Microsoft.Owin.Security.Jwt NuGet Package V4.0.0"],"githubEditLink":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fdocs\u002Fedit\u002Fmaster\u002Farticles\u002Fquickstart\u002Fbackend\u002Fwebapi-owin\u002Finteractive.md","showDownloadSample":true,"sampleFiles":[{"filename":"Startup.cs","language":"csharp","content":"public void Configuration(IAppBuilder app)\n{\n var domain = $\"https:\u002F\u002F{ConfigurationManager.AppSettings[\"Auth0Domain\"]}\u002F\";\n var apiIdentifier = ConfigurationManager.AppSettings[\"Auth0ApiIdentifier\"];\n var keyResolver = new OpenIdConnectSigningKeyResolver(domain);\n\n app.UseJwtBearerAuthentication(\n new JwtBearerAuthenticationOptions\n {\n AuthenticationMode = AuthenticationMode.Active,\n TokenValidationParameters = new TokenValidationParameters()\n {\n ValidAudience = apiIdentifier,\n ValidIssuer = domain,\n IssuerSigningKeyResolver = (token, securityToken, kid, parameters) =\u003E keyResolver.GetSigningKey(kid)\n }\n });\n\n \u002F\u002F Configure Web API\n WebApiConfig.Configure(app);\n}"},{"filename":"OpenIdConnectSigningKeyResolver.cs","language":"csharp","content":"public class OpenIdConnectSigningKeyResolver\n{\n private readonly OpenIdConnectConfiguration openIdConfig;\n\n public OpenIdConnectSigningKeyResolver(string authority)\n {\n var cm = new ConfigurationManager\u003COpenIdConnectConfiguration\u003E($\"{authority.TrimEnd('\u002F')}\u002F.well-known\u002Fopenid-configuration\", new OpenIdConnectConfigurationRetriever());\n openIdConfig = AsyncHelper.RunSync(async () =\u003E await cm.GetConfigurationAsync());\n }\n\n public SecurityKey[] GetSigningKey(string kid)\n {\n return new[] { openIdConfig.JsonWebKeySet.GetSigningKeys().FirstOrDefault(t =\u003E t.KeyId == kid) };\n }\n}"},{"filename":"ScopeAuthorizeAttribute.cs","language":"csharp","content":"public class ScopeAuthorizeAttribute : AuthorizeAttribute\n{\n private readonly string scope;\n\n public ScopeAuthorizeAttribute(string scope)\n {\n this.scope = scope;\n }\n\n public override void OnAuthorization(HttpActionContext actionContext)\n {\n base.OnAuthorization(actionContext);\n\n \u002F\u002F Get the Auth0 domain, in order to validate the issuer\n var domain = $\"https:\u002F\u002F{ConfigurationManager.AppSettings[\"Auth0Domain\"]}\u002F\";\n\n \u002F\u002F Get the claim principal\n ClaimsPrincipal principal = actionContext.ControllerContext.RequestContext.Principal as ClaimsPrincipal;\n\n \u002F\u002F Get the scope clain. Ensure that the issuer is for the correcr Auth0 domain\n var scopeClaim = principal?.Claims.FirstOrDefault(c =\u003E c.Type == \"scope\" && c.Issuer == domain);\n if (scopeClaim != null)\n {\n \u002F\u002F Split scopes\n var scopes = scopeClaim.Value.Split(' ');\n\n \u002F\u002F Succeed if the scope array contains the required scope\n if (scopes.Any(s =\u003E s == scope))\n return;\n }\n\n HandleUnauthorizedRequest(actionContext);\n }\n}"},{"filename":"ApiController.cs","language":"csharp","content":"[RoutePrefix(\"api\")]\npublic class ApiController : ApiController\n{\n [HttpGet]\n [Route(\"public\")]\n public IHttpActionResult Public()\n {\n return Json(new\n {\n Message = \"Hello from a public endpoint!\"\n });\n }\n\n [HttpGet]\n [Route(\"private\")]\n [Authorize]\n public IHttpActionResult Private()\n {\n return Json(new\n {\n Message = \"Hello from a private endpoint! You need to be authenticated to see this.\"\n });\n }\n\n [HttpGet]\n [Route(\"private-scoped\")]\n [ScopeAuthorize(\"read:messages\")]\n public IHttpActionResult Scoped()\n {\n return Json(new\n {\n Message = \"Hello from a private endpoint! You need to be authenticated and have a scope of read:messages to see this.\"\n });\n }\n}"}],"interactive":true,"downloadBoxDescription":"This tutorial demonstrates how to add authorization to an ASP.NET OWIN API using the standard JWT middleware.","githubData":{"branch":"master","org":"auth0-samples","repo":"auth0-aspnet-owin-webapi-samples","path":"Quickstart\u002FSample"},"githubSampleLink":"https:\u002F\u002Fgithub.com\u002Fauth0-samples\u002Fauth0-aspnet-owin-webapi-samples\u002Ftree\u002Fmaster\u002FQuickstart\u002FSample","sampleDownloadRequiredData":["api"],"downloadInstructions":"\u003Cp\u003ETo run the sample, open the solution in \u003Ca href=\"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fvs\u002F\"\u003EVisual Studio\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003Cp\u003EClick the \u003Ccode\u003EStart\u003C\u002Fcode\u003E button or select the menu option \u003Ccode\u003EDebug | Start Debugging\u003C\u002Fcode\u003E or use the keyboard shortcut \u003Ccode\u003EF5\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n","hidden":true}]}}}},"currentQuickstart":undefined,"currentPlatform":undefined,"currentVersion":undefined,"currentArticle":undefined,"sidebarItems":[],"breadcrumbs":[],"sidebarBreadcrumbs":[],"landingPageBreadcrumbs":[{"title":"Docs","url":"\u002Fdocs"},{"title":"Quickstarts","url":"\u002Fdocs\u002Fquickstarts"}],"metadataNextSteps":undefined,"sidebarArticlesNextSteps":undefined,"appChoiceView":undefined,"apiChoiceView":undefined,"appExplorerActiveFile":undefined},"AbStore":{"docExperiments":undefined},"DocumentStore":{"docs":{},"user":{"isAuthenticated":false,"account":{"userName":"","email":undefined,"appName":"{yourAppName}","tenant":"{yourTenant}","namespace":"{yourDomain}","clientId":"{yourClientId}","clientSecret":"{yourClientSecret}","callback":"{https:\u002F\u002FyourApp\u002Fcallback}"},"connectionName":"{yourConnectionName}","apiIdentifier":"{yourApiIdentifier}","manage_url":"https:\u002F\u002Fmanage.auth0.com\u002F#","userResources":{"nonGlobalClients":[],"nonGlobalApis":[],"selectedClientId":"{yourClientId}","selectedApiId":"{yourApiIdentifier}","clientsSortedByType":{}},"profile":{}},"userResources":{"nonGlobalClients":[],"nonGlobalApis":[],"selectedClientId":"{yourClientId}","selectedApiId":"{yourApiIdentifier}","clientsSortedByType":{}},"framedAccount":undefined},"UserStore":{"user":{"isAuthenticated":false,"account":{"userName":"","email":undefined,"appName":"{yourAppName}","tenant":"{yourTenant}","namespace":"{yourDomain}","clientId":"{yourClientId}","clientSecret":"{yourClientSecret}","callback":"{https:\u002F\u002FyourApp\u002Fcallback}"},"connectionName":"{yourConnectionName}","apiIdentifier":"{yourApiIdentifier}","manage_url":"https:\u002F\u002Fmanage.auth0.com\u002F#","userResources":{"nonGlobalClients":[],"nonGlobalApis":[],"selectedClientId":"{yourClientId}","selectedApiId":"{yourApiIdentifier}","clientsSortedByType":{}},"profile":{}},"profile":{},"userResources":{"nonGlobalClients":[],"nonGlobalApis":[],"selectedClientId":"{yourClientId}","selectedApiId":"{yourApiIdentifier}","clientsSortedByType":{}},"framedAccount":undefined},"NavigationStore":{"navigation":{"sections":[{"id":"articles","title":"Articles","url":"\u002Fdocs\u002Farticles","folder":"","default":true},{"id":"quickstarts","title":"Quickstarts","url":"\u002Fdocs\u002Fquickstarts","folder":"quickstart"},{"id":"apis","title":"Auth0 APIs","url":"\u002Fdocs\u002Fapi","folder":"api"},{"id":"libraries","title":"SDKs","url":"\u002Fdocs\u002Flibraries","folder":"libraries"}],"sidebar":{"articles":[{"title":"Get Started","description":"Learn the basics and begin building your authentication solution.","type":"navigationSection","url":"\u002Fdocs\u002Fget-started","icon":"IdenticonGettingStarted","children":[{"title":"Auth0 Onboarding","type":"navigationSubsection","showCards":false,"quickstarts":false,"children":[{"title":"Auth0 Onboarding","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fonboarding","showCards":true,"children":[{"title":"Self-Service Machine-to-Machine","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fonboarding\u002Fself-service-m2m"}]}]},{"title":"Start Building","description":"To get up and running swiftly, choose your application type for a step-by-step quickstart tutorial.","type":"navigationSubsection","showCards":true,"quickstarts":true,"children":[{"title":"Quickstarts","type":"externalLink","url":"https:\u002F\u002Fauth0.com\u002Fdocs\u002Fquickstarts","external":true,"forceFullReload":true}]},{"title":"Learn the Basics","description":"Build your knowledge of IAM technology and Auth0.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Identity Fundamentals","description":"Explore topics related to the fundamentals of identity and access management.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fidentity-fundamentals","showCards":true,"children":[{"title":"Introduction to Identity and Access Management (IAM)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fidentity-fundamentals\u002Fidentity-and-access-management"},{"title":"Introduction to Auth0","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fidentity-fundamentals\u002Fintroduction-to-auth0"},{"title":"Authentication vs. Authorization","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fidentity-fundamentals\u002Fauthentication-and-authorization"},{"title":"Glossary","type":"externalLink","url":"https:\u002F\u002Fauth0.com\u002Fdocs\u002Fglossary","external":false,"forceFullReload":true}]},{"title":"Auth0 Overview","description":"Discover different use cases. Create and connect the building blocks of your IAM solution.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview","showCards":true,"children":[{"title":"Auth0 Dashboard","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fdashboard","showCards":true,"children":[{"title":"About the Activity Page ","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fdashboard\u002Factivity"}]},{"title":"Auth0 Guide","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fauth0-guide"},{"title":"Create Tenants","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-tenants","showCards":true,"children":[{"title":"Create Multiple Tenants","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-tenants\u002Fcreate-multiple-tenants"},{"title":"Link Multiple Tenants to a Single Subscription","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-tenants\u002Fchild-tenants"},{"title":"Set Up Multiple Environments","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-tenants\u002Fset-up-multiple-environments"},{"title":"Multi-Tenant Applications Best Practices","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-tenants\u002Fmulti-tenant-apps-best-practices"}]},{"title":"Create Applications","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications","showCards":true,"children":[{"title":"Register Native Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications\u002Fnative-apps"},{"title":"Register Single-Page Web Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications\u002Fsingle-page-web-apps"},{"title":"Register Regular Web Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications\u002Fregular-web-apps"},{"title":"Register Machine-to-Machine Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications\u002Fmachine-to-machine-apps"},{"title":"Configure an Identity Provider in Access Gateway","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications\u002Fconfigure-an-identity-provider-in-access-gateway"}]},{"title":"Register APIs","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fset-up-apis"}]}]},{"title":"Configure Auth0","description":"Define how Auth0 works with your applications and APIs. Control who can access your Auth0 Dashboard.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Auth0 Teams","description":"Learn about Auth0 Teams, including how to enable Teams, view and manage tenants, and manage tenant members.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams","showCards":true,"children":[{"title":"Tenant Management","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Ftenant-management"},{"title":"Team Member Management","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Fteam-member-management"},{"title":"Tenant Member Management","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Ftenant-member-management"},{"title":"Configure Security Policies","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Fconfigure-security-policies"},{"title":"Troubleshoot Teams","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Ftroubleshoot-teams"},{"title":"Team Activity","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Fteam-activity"},{"title":"About the Quarterly Snapshot","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Fquarterly-snapshot"}]},{"title":"Dashboard Profile","description":"Describes how to configure options in Auth0 Dashboard's profile section.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fdashboard-profile","showCards":true,"children":[{"title":"Auth0 Dashboard Login Session Management","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fdashboard-profile\u002Fauth0-dashboard-login-session-management"},{"title":"Light and Dark themes","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fdashboard-profile\u002Flight-and-dark-themes"}]},{"title":"Tenant Settings","description":"Configure the behavior of your Auth0 tenant.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings","showCards":true,"children":[{"title":"Signing Keys","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fsigning-keys","showCards":true,"children":[{"title":"Rotate Signing Keys","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fsigning-keys\u002Frotate-signing-keys"},{"title":"Revoke Signing Keys","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fsigning-keys\u002Frevoke-signing-keys"},{"title":"View Signing Certificates","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fsigning-keys\u002Fview-signing-certificates"}]},{"title":"Configure Device User Code Settings","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fconfigure-device-user-code-settings"},{"title":"Enable Single Sign-On for Tenants","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fenable-sso-for-legacy-tenants"},{"title":"Find Your Tenant Name or Tenant ID","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Ffind-your-tenant-name-or-tenant-id"}]},{"title":"Applications in Auth0","description":"Control the details of how Auth0 works with your applications.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapplications","showCards":true,"children":[{"title":"Application Settings","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fapplication-settings"},{"title":"Credential Settings","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fcredentials"},{"title":"Subdomain URL Placeholders","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fwildcards-for-subdomains"},{"title":"Confidential and Public Applications","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications","showCards":true,"children":[{"title":"Check if Application is Confidential or Public","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Fview-application-type"},{"title":"First-Party and Third-Party Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Ffirst-party-and-third-party-applications"},{"title":"View Application Ownership","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Fview-application-ownership"},{"title":"Update Application Ownership","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Fupdate-application-ownership"},{"title":"Enable Third-Party Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Fenable-third-party-applications"},{"title":"User Consent and Third-Party Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Fuser-consent-and-third-party-applications"}]},{"title":"Dynamic Application Registration","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fdynamic-client-registration"},{"title":"Set Up Database Connections","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fset-up-database-connections"},{"title":"Test Database Connections","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Ftest-database-connections"},{"title":"Application Grant Types","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fapplication-grant-types"},{"title":"Update Grant Types","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fupdate-grant-types"},{"title":"Revoke Access to APIs Using Application Grants","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Frevoke-api-access"},{"title":"Signing Algorithms","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fsigning-algorithms"},{"title":"Change Application Signing Algorithms","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fchange-application-signing-algorithms"},{"title":"Configure Application Metadata","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-application-metadata"},{"title":"Update Application Connections","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fupdate-application-connections"},{"title":"Rotate Credentials","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Frotate-credentials"},{"title":"Rotate Client Secrets","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Frotate-client-secret"},{"title":"Enable Android App Links Support","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fenable-android-app-links-support"},{"title":"Enable Universal Links Support in Apple Xcode","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fenable-universal-links-support-in-apple-xcode"},{"title":"Configure Cross-Origin Resource Sharing","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fset-up-cors"},{"title":"Configure Applications with OIDC Discovery","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-applications-with-oidc-discovery"},{"title":"Configure WS-Fed Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-ws-fed-applications"},{"title":"Configure FAPI Compliance","description":"Learn how to configure FAPI compliance for an Auth0 tenant.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-fapi-compliance","showCards":true,"children":[{"title":"Configure Auth0 to pass OpenID FAPI Certification Tests","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-fapi-compliance\u002Fconfigure-auth0-to-pass-openid-fapi-certification-tests"}]},{"title":"Configure Pushed Authorization Requests (PAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-par"},{"title":"Configure JWT-secured Authorization Requests (JAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-jar"},{"title":"Configure mTLS Authentication","description":"Learn how to configure mTLS authentication for Auth0.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-mtls","showCards":true,"children":[{"title":"Set up the Customer Edge","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-mtls\u002Fset-up-the-customer-edge"},{"title":"Configure mTLS Authentication for a Tenant","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-mtls\u002Fconfigure-mtls-for-a-tenant"},{"title":"Configure mTLS Authentication for a Client","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-mtls\u002Fconfigure-mtls-for-a-client"}]},{"title":"Configure Private Key JWT Authentication","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-private-key-jwt"},{"title":"Configure Sender Constraining ","description":"Learn how to configure sender constraining for your Auth0 tenant. ","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-sender-constraining","showCards":true,"children":[{"title":"Configure Client for Sender Constraining ","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-sender-constraining\u002Fconfigure-client-for-sender-constraining"},{"title":"Configure Resource Server for Sender Constraining","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-sender-constraining\u002Fconfigure-resource-server-for-sender-constraining"}]},{"title":"Remove Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fremove-applications"},{"title":"Test Applications Locally","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fwork-with-auth0-locally"},{"title":"Enable Single Sign-On Integrations for Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fenable-sso-for-applications"}]},{"title":"APIs","description":"Manage access for resource requests made to your APIs.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapis","showCards":true,"children":[{"title":"API Settings","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fapi-settings"},{"title":"Add API Permissions","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fadd-api-permissions"},{"title":"Delete API Permissions","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fdelete-api-permissions"},{"title":"Scopes","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fscopes","showCards":true,"children":[{"title":"API Scopes","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fscopes\u002Fapi-scopes"},{"title":"OpenID Connect Scopes","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fscopes\u002Fopenid-connect-scopes"},{"title":"Sample Use Cases: Scopes and Claims","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fscopes\u002Fsample-use-cases-scopes-and-claims"}]},{"title":"Configure Access Token Profile","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fconfigure-access-token-profile"},{"title":"Configure JSON Web Encryption (JWE)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fconfigure-json-web-encryption"},{"title":"Configure Logical API for Multiple APIs","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fset-logical-api"},{"title":"Configure Rich Authorization Requests (RAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fconfigure-rich-authorization-requests"},{"title":"Create Machine-to-Machine Applications for Testing","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fcreate-m2m-app-test"},{"title":"Enable Role-Based Access Control for APIs","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fenable-role-based-access-control-for-apis"}]},{"title":"Manage Dashboard Access","description":"Administer your team members’ access to your Auth0 Dashboard.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access","showCards":true,"children":[{"title":"Dashboard Access by Role","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Ffeature-access-by-role"},{"title":"Add Tenant Members","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fadd-dashboard-users"},{"title":"Edit Tenant Members","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fedit-dashboard-users"},{"title":"Remove Tenant Members","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fremove-dashboard-users"},{"title":"Update Dashboard User Email Addresses","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fupdate-dashboard-user-email"},{"title":"Multi-factor Authentication for Dashboard Users","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fadd-change-remove-mfa","showCards":true,"children":[{"title":"Add Multi-Factor Authentication for Auth0 Dashboard Access","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fadd-change-remove-mfa\u002Fadd-mfa"},{"title":"Remove or Change Dashboard Multi-Factor Authentication","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fadd-change-remove-mfa\u002Fremove-or-change-dashboard-multi-factor-authentication"}]},{"title":"Configure Single Sign-on for Auth0 Dashboard","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fconfigure-single-sign-on-for-auth0-dashboard"}]}]},{"title":"Plan and Design","description":"Learn about Auth0 flows and architecture so you can make informed decisions about your Auth0 implementation.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Authentication and Authorization Flows","description":"Explore the different flows of information that drive authentication and authorization.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow","showCards":true,"children":[{"title":"Which OAuth 2.0 Flow Should I Use?","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fwhich-oauth-2-0-flow-should-i-use"},{"title":"Authorization Code Flow","description":"Describes the Authorization Code Grant from OAuth 2.0","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow","showCards":true,"children":[{"title":"Add Login Using the Authorization Code Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fadd-login-auth-code-flow"},{"title":"Call Your API Using the Authorization Code Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fcall-your-api-using-the-authorization-code-flow"},{"title":"Authorization Code Flow with Rich Authorization Requests (RAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fauthorization-code-flow-with-rar"},{"title":"Authorization Code Flow with Pushed Authorization Requests (PAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fauthorization-code-flow-with-par"},{"title":"Authorization Code Flow with JWT-Secured Authorization Requests (JAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fauthorization-code-flow-with-jar"},{"title":"Authorization Code Flow with PAR and JAR","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fauthorization-code-flow-with-par-and-jar"}]},{"title":"Authorization Code Flow with Proof Key for Code Exchange","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow-with-pkce","showCards":true,"children":[{"title":"Add Login Using the Authorization Code Flow with PKCE","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow-with-pkce\u002Fadd-login-using-the-authorization-code-flow-with-pkce"},{"title":"Call Your API Using the Authorization Code Flow with PKCE","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow-with-pkce\u002Fcall-your-api-using-the-authorization-code-flow-with-pkce"}]},{"title":"Client Credentials Flow","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fclient-credentials-flow","showCards":true,"children":[{"title":"Call Your API Using the Client Credentials Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fclient-credentials-flow\u002Fcall-your-api-using-the-client-credentials-flow"},{"title":"Customize Tokens Using Hooks with Client Credentials Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fclient-credentials-flow\u002Fcustomize-tokens-using-hooks-with-client-credentials-flow"}]},{"title":"Device Authorization Flow","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fdevice-authorization-flow","showCards":true,"children":[{"title":"Call Your API Using the Device Authorization Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fdevice-authorization-flow\u002Fcall-your-api-using-the-device-authorization-flow"},{"title":"Mobile Device Login Flow Best Practices","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fdevice-authorization-flow\u002Fmobile-device-login-flow-best-practices"}]},{"title":"Implicit Flow with Form Post","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fimplicit-flow-with-form-post","showCards":true,"children":[{"title":"Mitigate Replay Attacks When Using the Implicit Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fimplicit-flow-with-form-post\u002Fmitigate-replay-attacks-when-using-the-implicit-flow"},{"title":"Add Login Using the Implicit Flow with Form Post","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fimplicit-flow-with-form-post\u002Fadd-login-using-the-implicit-flow-with-form-post"}]},{"title":"Hybrid Flow","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fhybrid-flow","showCards":true,"children":[{"title":"Call Your API Using the Hybrid Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fhybrid-flow\u002Fcall-api-hybrid-flow"}]},{"title":"Resource Owner Password Flow","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fresource-owner-password-flow","showCards":true,"children":[{"title":"Call Your API Using Resource Owner Password Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fresource-owner-password-flow\u002Fcall-your-api-using-resource-owner-password-flow"},{"title":"Avoid Common Issues with Resource Owner Password Flow and Attack Protection","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fresource-owner-password-flow\u002Favoid-common-issues-with-resource-owner-password-flow-and-attack-protection"}]},{"title":"Authenticate with Private Key JWT","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthenticate-with-private-key-jwt"},{"title":"Authenticate with mTLS","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthenticate-with-mtls"},{"title":"Client Credentials Exchange","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fclient-credentials-exchange"}]},{"title":"Architecture Scenarios","description":"Read about real-world customer implementations of Auth0.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios","showCards":true,"children":[{"title":"Business to Consumer","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer","showCards":true,"children":[{"title":"Architecture (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Farchitecture"},{"title":"Provisioning (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fprovisioning"},{"title":"Authentication (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fauthentication"},{"title":"Branding (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fbranding"},{"title":"Deployment Automation (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fdeployment"},{"title":"Quality Assurance (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fquality-assurance"},{"title":"Profile Management (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fprofile-management"},{"title":"Authorization (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fauthorization"},{"title":"Logout (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flogout"},{"title":"Operations (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Foperations"},{"title":"Launch Preparation","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch","showCards":true,"children":[{"title":"Tenant Check (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Ftenant-check"},{"title":"Testing Complete (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Ftesting"},{"title":"Operations Readiness (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Foperations-readiness"},{"title":"Compliance Readiness (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Fcompliance-readiness"},{"title":"Support Readiness (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Fsupport-readiness"},{"title":"Launch Day Preparation (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Flaunch-day"}]}]},{"title":"Business to Business","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business","showCards":true,"children":[{"title":"Architecture (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Farchitecture"},{"title":"Provisioning (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fprovisioning"},{"title":"Authentication (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fauthentication"},{"title":"Branding (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fbranding"},{"title":"Deployment Automation (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fdeployment"},{"title":"Quality Assurance (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fquality-assurance"},{"title":"Profile Management (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fprofile-management"},{"title":"Authorization (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fauthorization"},{"title":"Logout (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flogout"},{"title":"Operations (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Foperations"},{"title":"Launch Preparation (B2B)","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch","showCards":true,"children":[{"title":"Tenant Check (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Ftenant-check"},{"title":"Testing Complete (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Ftesting"},{"title":"Operations Readiness (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Foperations-readiness"},{"title":"Compliance Readiness (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Fcompliance-readiness"},{"title":"Support Readiness (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Fsupport-readiness"},{"title":"Launch Day Preparation (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Flaunch-day"}]}]},{"title":"Business to Employees","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fb2e"},{"title":"Multiple Organization Architecture","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture","showCards":true,"children":[{"title":"Single Identity Provider Organizations","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations","showCards":true,"children":[{"title":"Single Identity Provider: Provisioning","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Fprovisioning"},{"title":"Single Identity Provider: Authentication","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Fauthentication"},{"title":"Single Identity Provider: Branding","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Fbranding"},{"title":"Single Identity Provider: Authorization","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Fauthorization"},{"title":"Single Identity Provider: Profile Management","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Fprofile-management"},{"title":"Single Identity Provider: Logout","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Flogout"}]},{"title":"Multiple Identity Provider Organizations","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fmultiple-idp-orgs"}]},{"title":"SSO for Regular Web Apps","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps","showCards":true,"children":[{"title":"Solution Overview (Web Apps + SSO)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps\u002Fpart-1"},{"title":"Auth0 Configuration (Web Apps + SSO)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps\u002Fpart-2"},{"title":"Application Implementation (Web Apps + SSO)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps\u002Fpart-3"},{"title":"ASP.NET Core Implementation (Web Apps + SSO)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps\u002Fimplementation-aspnetcore"},{"title":"Conclusion (Web Apps + SSO)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps\u002Fpart-4"}]},{"title":"Server Application + API","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api","showCards":true,"children":[{"title":"Solution Overview (Server Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fpart-1"},{"title":"Auth0 Configuration (Server Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fpart-2"},{"title":"Application Implementation (Server Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fpart-3"},{"title":"Server Apps + API: Node.js Implementation for the API","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fapi-implementation-nodejs"},{"title":"Server Apps + API: Python Implementation for the Cron Job","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fcron-implementation-python"},{"title":"Conclusion (Server Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fpart-4"}]},{"title":"SPA + API","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api","showCards":true,"children":[{"title":"Solution Overview (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fpart-1"},{"title":"Auth0 Configuration (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fpart-2"},{"title":"API and SPA Configuration (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fpart-3"},{"title":"SPA Angular 2 Implementation (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fspa-implementation-angular2"},{"title":"Node.js API Implementation (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fapi-implementation-nodejs"},{"title":"Conclusion (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fpart-4"}]},{"title":"Mobile + API","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api","showCards":true,"children":[{"title":"Solution Overview (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fpart-1"},{"title":"Auth0 Configuration (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fpart-2"},{"title":"API and Mobile Configuration (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fpart-3"},{"title":"Android Mobile Application Implementation (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fmobile-implementation-android"},{"title":"Node.js API Implementation (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fapi-implementation-nodejs"},{"title":"Conclusion (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fpart-4"}]},{"title":"Implementation Planning Checklists","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fchecklists"},{"title":"Implementation Resources","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fimplementation-resources"}]},{"title":"Professional Services","description":"Get personalized help deploying and maintaining solutions from Auth0 specialists.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fprofessional-services","showCards":true,"children":[{"title":"Professional Services: Discover and Design","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fprofessional-services\u002Fdiscover-design"},{"title":"Professional Services: Implement","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fprofessional-services\u002Fimplement"},{"title":"Professional Services: Maintain and Improve","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fprofessional-services\u002Fmaintain-improve"}]}]}]},{"title":"Authenticate","description":"Define how your applications and APIs verify the identity of a user or device.","type":"navigationSection","url":"\u002Fdocs\u002Fauthenticate","icon":"IdenticonAuthenticationA","children":[{"title":"Add Login","description":"Implement Auth0 Universal Login (or an alternative) to control access to your applications.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Login","description":"Choose from a variety of user login options.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin","showCards":true,"children":[{"title":"Auth0 Universal Login","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login","showCards":true,"children":[{"title":"Universal Login vs. Classic Login","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Funiversal-login-vs-classic-login","showCards":true,"children":[{"title":"Universal Login Experience","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Funiversal-login-vs-classic-login\u002Funiversal-experience"},{"title":"Classic Login Experience","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Funiversal-login-vs-classic-login\u002Fclassic-experience"}]},{"title":"Passwordless Login","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Fpasswordless-login","showCards":true,"children":[{"title":"Configure WebAuthn with Device Biometrics for Passwordless Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Fpasswordless-login\u002Fwebauthn-device-biometrics"},{"title":"Configure Email or SMS for Passwordless Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Fpasswordless-login\u002Femail-or-sms"}]},{"title":"Configure Identifier First Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Fidentifier-first"},{"title":"Configure Default Login Routes","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Fconfigure-default-login-routes"},{"title":"Default Auth0 Error Page","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Ferror-pages"}]},{"title":"Centralized Universal Login vs. Embedded Login","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Funiversal-vs-embedded-login"},{"title":"Embedded Login","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fembedded-login"},{"title":"Native Login","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fnative-login"},{"title":"Cross-Origin Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fcross-origin-authentication"},{"title":"Configure Silent Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fconfigure-silent-authentication"},{"title":"Redirect Users","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fredirect-users-after-login"},{"title":"Force Reauthentication in OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fmax-age-reauthentication"},{"title":"Logout","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout","showCards":true,"children":[{"title":"Back-Channel Logout","description":"Describes OIDC back-channel logout workflow and how to configure for your Auth0 services.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Fback-channel-logout","showCards":true,"children":[{"title":"Configure OIDC Back-Channel Logout","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Fback-channel-logout\u002Fconfigure-back-channel-logout"},{"title":"OIDC Back-Channel Logout Initiators","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Fback-channel-logout\u002Foidc-back-channel-logout-initiators"}]},{"title":"Log Users Out of Applications","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Flog-users-out-of-applications"},{"title":"Log Users Out of Auth0 with OIDC Endpoint","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Flog-users-out-of-auth0"},{"title":"Log Users Out of Identity Providers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Flog-users-out-of-idps"},{"title":"Log Users Out of SAML Identity Providers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Flog-users-out-of-saml-idps"},{"title":"Redirect Users with Alternative Logout","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Fredirect-users-after-logout"}]},{"title":"OIDC-Conformant Authentication","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication","showCards":true,"children":[{"title":"Access Tokens with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-access-tokens"},{"title":"Authorization Code Flow with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-auth-code-flow"},{"title":"Client Credentials Flow with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-client-credentials-flow"},{"title":"Delegation with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-delegation"},{"title":"External APIs with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-apis"},{"title":"Implicit Flow with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-implicit-flow"},{"title":"Refresh Tokens with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-refresh-tokens"},{"title":"Resource Owner Password Flow with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-rop-flow"},{"title":"Single Sign-On with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-sso"}]}]},{"title":"Single Sign-On","description":"Enable users to log in to one application and automatically authenticate in other applications.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on","showCards":true,"children":[{"title":"Service-Provider-Initiated Single Sign-On","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Finbound-single-sign-on"},{"title":"Identity-Provider-Initiated Single Sign-On","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on","showCards":false,"children":[{"title":"Configure Auth0 as SAML Identity Provider","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider","showCards":false,"children":[{"title":"Configure Amazon Web Services as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-saml2-web-app-addon-for-aws"},{"title":"Configure Atlassian as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-atlassian"},{"title":"Configure Cisco WebEx as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-cisco-webex"},{"title":"Configure Datadog as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-datadog"},{"title":"Configure Egencia as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-egencia"},{"title":"Configure Freshdesk as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-freshdesk"},{"title":"Configure GitHub Enterprise Cloud as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-saml2-web-app-addon-for-github-enterprise-cloud"},{"title":"Configure GitHub Enterprise Server as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-saml2-web-app-addon-for-github-enterprise-server"},{"title":"Configure Google Workspace as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-idp-for-google-g-suite"},{"title":"Configure Heroku as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-saml2-web-app-addon-for-heroku"},{"title":"Configure Hosted Graphite as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-hosted-graphite"},{"title":"Configure Litmos as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-litmos"},{"title":"Configure Oracle Eloqua Marketing Cloud as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-saml2-addon-eloqua"},{"title":"Configure Pluralsight as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-pluralsight"},{"title":"Configure Sprout Video as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-sprout-video"},{"title":"Configure Tableau Online as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-tableau-online"},{"title":"Configure Tableau Server as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-tableau-server"},{"title":"Configure Workday as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-workday"},{"title":"Configure Workpath as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-workpath"}]}]},{"title":"API Endpoints for Single Sign-On","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Fapi-endpoints-for-single-sign-on"},{"title":"Okta Access Gateway","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Fokta-access-gateway"}]},{"title":"Passwordless","description":"Let users enter mobile phone numbers or email addresses and receive a one-time code or link to log in without a password.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless","showCards":true,"children":[{"title":"Authentication Methods","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fauthentication-methods","showCards":true,"children":[{"title":"Passwordless Authentication with Email","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fauthentication-methods\u002Femail-otp"},{"title":"Passwordless Authentication with Magic Links","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fauthentication-methods\u002Femail-magic-link"},{"title":"Passwordless Authentication with SMS","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fauthentication-methods\u002Fsms-otp"},{"title":"Set Up Custom SMS Gateway for Passwordless Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fauthentication-methods\u002Fuse-sms-gateway-passwordless"}]},{"title":"Implement Login","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login","showCards":true,"children":[{"title":"Passwordless Authentication with Universal Login","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Funiversal-login"},{"title":"Embedded Login","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Fembedded-login","showCards":true,"children":[{"title":"Using Passwordless APIs","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Fembedded-login\u002Frelevant-api-endpoints"},{"title":"Embedded Passwordless Authentication for SPAs","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Fembedded-login\u002Fspa"},{"title":"Embedded Passwordless Login in Native Applications","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Fembedded-login\u002Fnative"},{"title":"Embedded Passwordless Login in Regular Web Applications","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Fembedded-login\u002Fwebapps"}]}]},{"title":"Passwordless with Universal Login","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fpasswordless-with-universal-login"},{"title":"Passwordless Connection Limitations","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fpasswordless-connection-limitations"},{"title":"Passwordless Connections Best Practices","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fbest-practices"},{"title":"Sample Use Cases - Rules with Passwordless Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fsample-use-cases-rules"}]}]},{"title":"Provision Users","description":"Source users from social identity providers (such as Facebook or SalesForce), enterprise user stores (such as Active Directory or Google Workspace), a custom database, and more.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Identity Providers","description":"Set up sources of user accounts to authenticate your applications and APIs.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers","showCards":true,"children":[{"title":"Social Identity Providers","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers","showCards":true,"children":[{"title":"Connect Apps to Generic OAuth2 Authorization Servers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Foauth2"},{"title":"Add Sign In with Apple to Native iOS Apps","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Fapple-native"},{"title":"Add Facebook Login to Native Apps","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Ffacebook-native"},{"title":"Handle Declined Authorization Permissions","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Freprompt-permissions"},{"title":"Test Social Connections with Auth0 Developer Keys","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Fdevkeys"},{"title":"Create a Custom Social Connection with TikTok","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Ftiktok"}]},{"title":"Enterprise Identity Providers","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers","showCards":true,"children":[{"title":"Connect Your App to Active Directory using LDAP","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap","showCards":true,"children":[{"title":"AD\u002FLDAP Connector","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector","showCards":true,"children":[{"title":"AD\u002FLDAP Connector System Requirements","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-connector-requirements"},{"title":"Install and Configure AD\u002FLDAP Connector","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Finstall-configure-ad-ldap-connector"},{"title":"Configure AD\u002FLDAP Connector Authentication with Client Certificates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fconfigure-ad-ldap-connector-client-certificates"},{"title":"Configure AD\u002FLDAP Connector Authentication with Kerberos","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fconfigure-ad-ldap-connector-with-kerberos"},{"title":"AD\u002FLDAP Connector Configuration File Schema","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-connector-config-file-schema"},{"title":"Import and Export AD\u002FLDAP Connector Configurations","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fimport-export-ad-ldap-connector-configs"},{"title":"Map AD\u002FLDAP Profile Attributes to Auth0 User Profile","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fmap-ad-ldap-profile-attributes-to-auth0"},{"title":"Point AD\u002FLDAP Connector to Auth0 Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-connector-to-auth0"},{"title":"Update AD\u002FLDAP Connectors","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fupdate-ad-ldap-connectors"},{"title":"Disable AD\u002FLDAP Connection Credential Caching","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fdisable-credential-caching"},{"title":"Deploy AD\u002FLDAP Connectors for High Availability Environments","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-high-availability"},{"title":"Set Up AD\u002FLDAP Connector Test Environment","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-connector-test-environment"},{"title":"Monitor AD\u002FLDAP Connector with System Center Operations Manager","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-connector-scom"}]}]},{"title":"Connect Your App to ADFS","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fadfs"},{"title":"Connect Your Native App to Microsoft Azure Active Directory Using Resource Owner Flow","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fazure-active-directory-native"},{"title":"Connect Your App to Google Workspace","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fgoogle-apps"},{"title":"Connect to OpenID Connect Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Foidc"},{"title":"Connect Your Auth0 Application with Okta Workforce Enterprise Connection","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fokta"},{"title":"Configure PKCE and Claim Mapping for OIDC Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fconfigure-pkce-claim-mapping-for-oidc"},{"title":"Connect Your PingFederate Server to Auth0","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fping-federate"},{"title":"Connect Your App to SAML Identity Providers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fsaml"},{"title":"Connect Your App to Microsoft Azure Active Directory","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fazure-active-directory\u002Fv2"},{"title":"Choose a Connection Type for Azure AD","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fchoose-a-connection-type-for-azure-ad"},{"title":"Email Verification for Azure AD and ADFS","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fazuread-adfs-email-verification"},{"title":"Enable Enterprise Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fenable-enterprise-connections"},{"title":"Test Enterprise Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Ftest-enterprise-connections"}]},{"title":"Legal Identity Providers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Flegal"},{"title":"View Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fview-connections"},{"title":"Test Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Ftest-connections"},{"title":"Locate the Connection ID or Name","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Flocate-the-connection-id"},{"title":"Retrieve Connection Options","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fretrieve-connection-options"},{"title":"Pass Parameters to Identity Providers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fpass-parameters-to-idps"},{"title":"Promote Connections to Domain Level","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fpromote-connections-to-domain-level"},{"title":"Call an Identity Provider API","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fcalling-an-external-idp-api"},{"title":"Add Scopes\u002FPermissions to Call Identity Provider APIs","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fadding-scopes-for-an-external-idp"}]},{"title":"Database Connections","description":"Authenticate users with an email\u002Fusername and password and save their credentials in an Auth0-provided user store or in your own database.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections","showCards":true,"children":[{"title":"Auth0 User Store","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fauth0-user-store"},{"title":"Your User Store","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db","showCards":true,"children":[{"title":"Authenticate with Your Own User Store","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Foverview-custom-db-connections"},{"title":"Create Custom Database Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcreate-db-connection"},{"title":"Test Custom Database Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftest-custom-database-connections"},{"title":"Troubleshoot Custom Databases","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ferror-handling"},{"title":"Action Script Templates","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates","showCards":true,"children":[{"title":"Change Password Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fchange-password"},{"title":"Create Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fcreate"},{"title":"Delete Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fdelete"},{"title":"Get User Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fget-user"},{"title":"Login Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Flogin"},{"title":"Verify Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fverify"},{"title":"Change Email Script Template","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fchange-email"}]},{"title":"Custom Database and Action Script Best Practices","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcustom-database-connections-scripts","showCards":true,"children":[{"title":"Custom Database Connection Anatomy Best Practices","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcustom-database-connections-scripts\u002Fanatomy"},{"title":"Custom Database Action Script Environment Best Practices","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcustom-database-connections-scripts\u002Fenvironment"},{"title":"Custom Database Action Script Execution Best Practices","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcustom-database-connections-scripts\u002Fexecution"},{"title":"Custom Database Connection Security Best Practices","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcustom-database-connections-scripts\u002Fconnection-security"}]}]},{"title":"Passkeys","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpasskeys","showCards":true,"children":[{"title":"Configure Passkey Policy","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpasskeys\u002Fconfigure-passkey-policy"},{"title":"Monitor Passkey Events in Tenant Logs","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpasskeys\u002Fmonitor-passkey-events-in-tenant-logs"}]},{"title":"Password Options in Auth0 Database Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpassword-options"},{"title":"Password Strength in Auth0 Database Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpassword-strength"},{"title":"Change Users' Passwords","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpassword-change"},{"title":"Adding Username for Database Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Frequire-username"},{"title":"Login Script for IBM DB2","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fdb2-script"},{"title":"Activate and Configure Attributes for Flexible Identifiers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Factivate-and-configure-attributes-for-flexible-identifiers"},{"title":"Flexible Identifiers and Attributes","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fflexible-identifiers-and-attributes"}]},{"title":"Enterprise Connections","description":"Authenticate users with external, federated identity providers such as Azure AD, Google Workspace, and PingFederate.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fenterprise-connections","showCards":true,"children":[{"title":"Self-Service Single Sign-On","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fenterprise-connections\u002Fself-service-SSO"}]},{"title":"Protocols","description":"Easily implement open industry-standard protocols like OAuth 2.0, SAML, and LDAP for authentication and authorization.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols","showCards":true,"children":[{"title":"SAML","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml","showCards":true,"children":[{"title":"SAML Identity Provider Configuration Settings","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-identity-provider-configuration-settings"},{"title":"SAML Configuration","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-configuration","showCards":true,"children":[{"title":"Customize SAML Assertions","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-configuration\u002Fcustomize-saml-assertions"},{"title":"Deprovision Users in SAML Integrations","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-configuration\u002Fdeprovision-users-in-saml-integrations"},{"title":"Test SAML SSO with Auth0 as Service Provider and Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-configuration\u002Fconfigure-auth0-as-service-and-identity-provider"},{"title":"Map SAML Attributes with Auth0 as IdP\u002FSAML Add-on","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-configuration\u002Fsaml-attribute-mapping-examples"}]},{"title":"SAML Single Sign-On Integrations","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations","showCards":true,"children":[{"title":"Configure SAML Identity Provider-Initiated Single Sign-On","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fidentity-provider-initiated-single-sign-on"},{"title":"Configure IdP-Initiated SAML Sign-on to OIDC Apps","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-idp-initiated-saml-sign-on-to-oidc-apps"},{"title":"Configure Auth0 as SAML Service Provider","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider","showCards":true,"children":[{"title":"Configure ADFS as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-adfs-saml-connections"},{"title":"Configure Okta as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-okta-as-saml-identity-provider"},{"title":"Configure OneLogin as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-onelogin-as-saml-identity-provider"},{"title":"Configure PingFederate as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-pingfederate-as-saml-identity-provider"},{"title":"Configure Salesforce as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-salesforce-as-saml-identity-provider"},{"title":"Configure SiteMinder as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-siteminder-as-saml-identity-provider"},{"title":"Configure SSOCircle as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-ssocircle-as-saml-identity-provider"}]},{"title":"Enable SAML2 Web App Addon","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fenable-saml2-web-app-addon"},{"title":"Sign and Encrypt SAML Requests","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fsign-and-encrypt-saml-requests"},{"title":"Work with Certificates and Keys as Strings","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fwork-with-certificates-and-keys-as-strings"}]}]},{"title":"OpenID Connect Protocol","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fopenid-connect-protocol"},{"title":"OAuth 2.0 Authorization Framework","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Foauth"},{"title":"Web Services Federation Protocol","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fws-fed-protocol"},{"title":"Lightweight Directory Access Protocol","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fldap-protocol"},{"title":"System for Cross-domain Identity Management (SCIM)","description":"Articles associated with System for Cross-domain Identity Management (SCIM)","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim","showCards":true,"children":[{"title":"Configure Inbound SCIM","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Fconfigure-inbound-scim"},{"title":"Inbound SCIM for Azure AD SAML Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Finbound-scim-for-azure-ad-saml-connections"},{"title":"Inbound SCIM for Older Azure AD Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Finbound-scim-for-older-azure-ad-connections"},{"title":"Inbound SCIM for New Azure AD Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Finbound-scim-for-new-azure-ad-connections"},{"title":"Inbound SCIM for Okta Workforce Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Finbound-scim-for-okta-workforce-connections"},{"title":"Configure Inbound SCIM for Identity Providers using SAML or OpenID","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Fconfigure-inbound-scim-for-identity-providers-using-saml-or-openid"},{"title":"Inbound SCIM for Okta Workforce SAML Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Finbound-scim-for-okta-workforce-saml-connections"},{"title":"Manage an Inbound SCIM Deployment with the Management API","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Fmanage-an-inbound-scim-deployment-with-the-management-api"}]}]},{"title":"Connection Settings Best Practices","description":"Review best practices when configuring social and database connections.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fconnection-settings-best-practices","showCards":true}]}]},{"title":"Manage Users","description":"Store and manage custom details about your users.","type":"navigationSection","url":"\u002Fdocs\u002Fmanage-users","icon":"IdenticonUserManagement","children":[{"title":"Manage Users","description":"Import, group, and administer users and control their access.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"User Accounts","description":"Migrate, find, organize, and administer user accounts and user data.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts","showCards":true,"children":[{"title":"Manage Users Using the Dashboard","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmanage-users-using-the-dashboard"},{"title":"Manage Users Using the Management API","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmanage-users-using-the-management-api"},{"title":"User Profiles","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles","showCards":true,"children":[{"title":"User Profile Structure","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fuser-profile-structure"},{"title":"Sample User Profiles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fsample-user-profiles"},{"title":"Normalized User Profiles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fnormalized-user-profiles"},{"title":"Normalized User Profile Schema","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fnormalized-user-profile-schema"},{"title":"Understand How Progressive Profiling Works","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fprogressive-profiling"},{"title":"Root Attributes","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Froot-attributes","showCards":true,"children":[{"title":"Set Root Attributes During User Import","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Froot-attributes\u002Fset-root-attributes-during-user-import"},{"title":"Set Root Attributes During User Signup","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Froot-attributes\u002Fset-root-attributes-during-user-sign-up"},{"title":"Update Root Attributes for Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Froot-attributes\u002Fupdate-root-attributes-for-users"}]},{"title":"Use Verified Email in User Profiles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fverified-email-usage"},{"title":"Configure Identity Provider Connection for User Profile Updates","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fconfigure-connection-sync-with-auth0"},{"title":"Update User Profiles Using Your Database","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fupdate-user-profiles-using-your-database"}]},{"title":"Metadata","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata","showCards":true,"children":[{"title":"Metadata Field Names and Data Types","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fmetadata-fields-data"},{"title":"Manage Metadata Using the Management API","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fmanage-metadata-api"},{"title":"Manage Metadata with Rules","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fmanage-metadata-rules"},{"title":"Manage Metadata with Lock","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fmanage-metadata-lock"},{"title":"Configure Application Metadata","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fconfigure-application-metadata"},{"title":"Manage User Metadata with the post-login Action Trigger","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fmanage-user-metadata"}]},{"title":"Verify Emails using Auth0","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fverify-emails"},{"title":"User Account Linking","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-account-linking","showCards":true,"children":[{"title":"Link User Accounts","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-account-linking\u002Flink-user-accounts"},{"title":"Unlink User Accounts","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-account-linking\u002Funlink-user-accounts"},{"title":"User-Initiated Account Linking: Client-Side Implementation","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-account-linking\u002Fuser-initiated-account-linking-client-side-implementation"},{"title":"User Account Linking: Server-Side Implementation","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-account-linking\u002Fsuggested-account-linking-server-side-implementation"}]},{"title":"Create Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fcreate-users"},{"title":"Identify Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fidentify-users"},{"title":"View User Details","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fview-user-details"},{"title":"Change User Pictures","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fchange-user-picture"},{"title":"Manage User Access to Applications","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmanage-user-access-to-applications"},{"title":"Deny User Access to an API with Rules","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fdeny-api-access"},{"title":"Block and Unblock Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fblock-and-unblock-users"},{"title":"Unlink Devices from Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Funlink-devices-from-users"},{"title":"Delete Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fdelete-users"},{"title":"Get User Information on Unbounce Landing Pages","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fget-user-information-on-unbounce-landing-pages"},{"title":"Resend Verification Emails","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fresend-verification-emails"}]},{"title":"User Migration","description":"Import users from external applications using custom database connections, the Auth0 Management API, or the User Import\u002FExport extension.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration","showCards":true,"children":[{"title":"Configure Automatic Migration from Your Database","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fconfigure-automatic-migration-from-your-database"},{"title":"Bulk User Imports","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fbulk-user-imports"},{"title":"Bulk User Import Database Schema and Examples","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fbulk-user-import-database-schema-and-examples"},{"title":"Bulk User Exports","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fbulk-user-exports"},{"title":"User Import \u002F Export Extension","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fuser-import-export-extension"},{"title":"User Migration Scenarios","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fuser-migration-scenarios"}]},{"title":"User Search","description":"Retrieve user profile details using the Auth0 Management API.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search","showCards":true,"children":[{"title":"Retrieve Users with the Get Users Endpoint","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fretrieve-users-with-get-users-endpoint"},{"title":"Retrieve Users with Get Users by Email Endpoint","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fretrieve-users-with-get-users-by-email-endpoint"},{"title":"Retrieve Users with the Get Users by ID Endpoint","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fretrieve-users-with-get-users-by-id-endpoint"},{"title":"Sort Search Results","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fsort-search-results"},{"title":"View Search Results by Page","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fview-search-results-by-page"},{"title":"User Search Query Syntax","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fuser-search-query-syntax"},{"title":"User Search Best Practices","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fuser-search-best-practices"}]},{"title":"Organizations","description":"Manage your partners and customers and control the ways that end-users access your applications.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations","showCards":true,"children":[{"title":"Understand How Auth0 Organizations Work","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-overview"},{"title":"Create Your First Organization","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fcreate-first-organization"},{"title":"Login Flows for Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Flogin-flows-for-organizations"},{"title":"Custom Development with Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fcustom-development"},{"title":"Work with Tokens and Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fusing-tokens"},{"title":"Configure Organizations","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations","showCards":true,"children":[{"title":"Create Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fcreate-organizations"},{"title":"Delete Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fdelete-organizations"},{"title":"Use Organization Names in Authentication API","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fuse-org-name-authentication-api"},{"title":"Define Organization Behavior","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fdefine-organization-behavior"},{"title":"Enable Organization Connections","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fenable-connections"},{"title":"Disable Organization Connections","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fdisable-connections"},{"title":"Invite Organization Members","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Finvite-members"},{"title":"Send Organization Membership Invitations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fsend-membership-invitations"},{"title":"Grant Just-In-Time Membership to an Organization Connection","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fgrant-just-in-time-membership"},{"title":"Assign Members to an Organization","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fassign-members"},{"title":"Remove Members From Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fremove-members"},{"title":"Add Roles to Organization Members","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fadd-member-roles"},{"title":"Remove Roles from Organization Members","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fremove-member-roles"},{"title":"Retrieve Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fretrieve-organizations"},{"title":"Search for Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fsearch-for-organizations"},{"title":"Retrieve Organization Connections","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fretrieve-connections"},{"title":"Retrieve Organization Members","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fretrieve-members"},{"title":"Search Organization Members","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fsearch-organization-members"},{"title":"Retrieve User's Organization Memberships","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fretrieve-user-membership"},{"title":"Retrieve Member Roles for an Organization","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fretrieve-member-roles"}]},{"title":"Machine-to-Machine (M2M) Access for Organizations","description":"Learn how to set up machine-to-machine access for Organizations. ","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-for-m2m-applications","showCards":false,"children":[{"title":"Configure Your Application For M2M Access","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-for-m2m-applications\u002Fconfigure-your-application-for-m2m-access"},{"title":"Authorize M2M Access","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-for-m2m-applications\u002Fauthorize-m2m-access"},{"title":"Revoke M2M Access","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-for-m2m-applications\u002Frevoke-m2m-access"},{"title":"Audit M2M Access","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-for-m2m-applications\u002Faudit-m2m-access"}]}]}]},{"title":"Manage Access","description":"Control who can interact within your applications.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Access Control","description":"Control users’ access to applications and information based on roles.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control","showCards":true,"children":[{"title":"Role-Based Access Control","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Frbac"},{"title":"Authorization Policies","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fauthorization-policies"},{"title":"Rules for Authorization Policies","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Frules-for-authorization-policies"},{"title":"Sample Use Cases: Role-Based Access Control","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fsample-use-cases-role-based-access-control"},{"title":"Sample Use Cases: Actions with Authorization","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fsample-use-cases-actions-with-authorization"},{"title":"Sample Use Cases: Rules with Authorization","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fsample-use-cases-rules-with-authorization"},{"title":"Authorization Core vs. Authorization Extension","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fauthorization-core-vs-authorization-extension"},{"title":"Configure Core RBAC","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac","showCards":true,"children":[{"title":"Manage Role-Based Access Control Roles","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles","showCards":true,"children":[{"title":"View Users Assigned to Roles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fview-users-assigned-to-roles"},{"title":"View Role Permissions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fview-role-permissions"},{"title":"Remove Permissions from Roles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fremove-permissions-from-roles"},{"title":"Edit Role Definitions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fedit-role-definitions"},{"title":"Delete Roles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fdelete-roles"},{"title":"Create Roles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fcreate-roles"},{"title":"Add Permissions to Roles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fadd-permissions-to-roles"}]},{"title":"Manage Role-Based Access Control Users","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users","showCards":true,"children":[{"title":"View Roles Assigned to Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fview-user-roles"},{"title":"View User Permissions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fview-user-permissions"},{"title":"Remove Roles from Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fremove-roles-from-users"},{"title":"Remove Permissions from Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fremove-permissions-from-users"},{"title":"Assign Roles to Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fassign-roles-to-users"},{"title":"Assign Permissions to Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fassign-permissions-to-users"}]},{"title":"Manage Role-Based Access Control Permissions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Fmanage-permissions"},{"title":"Enable Role-Based Access Control for APIs","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Fenable-role-based-access-control-for-apis"}]}]},{"title":"Sessions","description":"Define groups of interactions (such as page views, events, social interactions, and e-commerce transactions) between a user and an application that take place within a given timeframe.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions","showCards":true,"children":[{"title":"Session Layers","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fsession-layers"},{"title":"Session Lifetime Limits","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fsession-lifetime-limits"},{"title":"Configure Session Lifetime Settings","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fconfigure-session-lifetime-settings"},{"title":"Non-Persistent Sessions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fnon-persistent-sessions"},{"title":"Sessions with Actions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fmanage-sessions-actions"},{"title":"Manage Multi-Site Sessions with Auth0 SDK","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fmanage-multi-site-sessions"},{"title":"Manage User Sessions with Auth0 Management API","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fmanage-user-sessions-with-auth0-management-api"}]},{"title":"Cookies","description":"Control how cookies work with your applications.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fcookies","showCards":true,"children":[{"title":"Authentication API Cookies","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fcookies\u002Fauthentication-api-cookies"},{"title":"Authenticate Single-Page Apps With Cookies","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fcookies\u002Fspa-authenticate-with-cookies"},{"title":"SameSite Cookie Attribute Changes","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fcookies\u002Fsamesite-cookie-attribute-changes"}]}]}]},{"title":"Customize","description":"Customize Auth0 using your own branding and extend our functionality to solve your unique identity needs.","type":"navigationSection","url":"\u002Fdocs\u002Fcustomize","icon":"IdenticonCustomize","children":[{"title":"Brand Customization","description":"Seamlessly integrate Auth0 with your own brand and localize the experience for international users.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Customize Login Pages","description":"Customize the Universal Login and Classic Login experiences","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages","showCards":true,"children":[{"title":"Customize Universal Login ","description":"Learn how to customize Universal Login pages","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Funiversal-login","showCards":true,"children":[{"title":"Customize Universal Login Page Themes","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Funiversal-login\u002Fcustomize-themes"},{"title":"Customize Universal Login Page Templates","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Funiversal-login\u002Fcustomize-templates"},{"title":"Customize Universal Login Text Elements","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Funiversal-login\u002Fcustomize-text-elements"},{"title":"Customize Signup and Login Prompts","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Funiversal-login\u002Fcustomize-signup-and-login-prompts"}]},{"title":"Customize Classic Login","description":"Learn how to customize the Classic Login experience","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login","showCards":true,"children":[{"title":"Customize Classic Login Pages","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login\u002Fcustomization-classic"},{"title":"Customize Classic Login Pages with Lock or SDK","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login\u002Fcustomize-with-lock-sdk"},{"title":"Customize Lock Error Messages","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login\u002Fcustomize-lock-error-messages"},{"title":"Customize Classic Password Reset Page","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login\u002Fcustomize-password-reset-page"},{"title":"Classic Login Page Version Control","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login\u002Fversion-control"}]},{"title":"Customize Consent Prompts","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fcustomize-consent-prompts"},{"title":"Customize Error Pages","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fcustom-error-pages"}]},{"title":"Custom Domains","description":"Unify the login experience with your own brand and products.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains","showCards":true,"children":[{"title":"Configure Custom Domains with Auth0-Managed Certificates","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fauth0-managed-certificates"},{"title":"Self-Managed Certificates","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates","showCards":true,"children":[{"title":"Configure Google Cloud Platform with Load Balancing as Reverse Proxy","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Fconfigure-gcp-as-reverse-proxy"},{"title":"Configure Cloudflare as Reverse Proxy","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Fconfigure-cloudflare-for-use-as-reverse-proxy"},{"title":"Configure AWS CloudFront as Reverse Proxy","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Fconfigure-aws-cloudfront-for-use-as-reverse-proxy"},{"title":"Configure Azure CDN as Reverse Proxy","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Fconfigure-azure-cdn-for-use-as-reverse-proxy"},{"title":"Configure Akamai as Reverse Proxy","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Fconfigure-akamai-for-use-as-reverse-proxy"},{"title":"TLS (SSL) Versions and Ciphers","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Ftls-ssl"}]},{"title":"Configure Features to Use Custom Domains","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fconfigure-features-to-use-custom-domains"}]},{"title":"Customize Emails","description":"Brand and modify the content and flow of email to end users.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Femail","showCards":true,"children":[{"title":"Customize Email Handling","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fmanage-email-flow"},{"title":"Email Templates","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Femail-templates","showCards":true,"children":[{"title":"Use Liquid Syntax in Email Templates","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Femail-templates\u002Fuse-liquid-syntax-in-email-templates"},{"title":"Email Template Descriptions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Femail-templates\u002Femail-template-descriptions"}]},{"title":"Configure a Custom Email Provider","description":"Learn how to configure a custom email provider. ","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fconfigure-a-custom-email-provider","showCards":false,"children":[{"title":"Action Triggers: custom-email-provider Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fconfigure-a-custom-email-provider\u002Faction-triggers-custom-email-provider-event-object"},{"title":"Action Triggers: custom-email-provider API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fconfigure-a-custom-email-provider\u002Faction-triggers-custom-email-provider-api-object"}]},{"title":"Customize Blocked Account Emails","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fcustomize-blocked-account-emails"},{"title":"Send Email Invitations for Application Signup","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsend-email-invitations-for-application-signup"},{"title":"SMTP Email Providers","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers","showCards":true,"children":[{"title":"Configure Amazon SES as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-amazon-ses-as-external-smtp-email-provider"},{"title":"Configure Azure Communication Services as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-azure-comm-service-as-smtp-email-provider"},{"title":"Configure Mandrill as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-mandrill-as-external-smtp-email-provider"},{"title":"Configure Microsoft 365 Exchange Online as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-365-exchange-as-smtp-email-provider"},{"title":"Configure SendGrid as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-sendgrid-as-external-smtp-email-provider"},{"title":"Configure SparkPost as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-sparkpost-as-external-smtp-email-provider"},{"title":"Configure Mailgun as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-mailgun-as-external-smtp-email-provider"},{"title":"Configure Custom External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-custom-external-smtp-email-provider"}]},{"title":"Configure Test SMTP Email Server","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fconfigure-test-smtp-email-servers"},{"title":"Troubleshoot Custom Email Provider Delivery Issues","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Ftroubleshoot-custom-email-provider-delivery-issues"}]},{"title":"Customize Phone Messages","description":"Learn how to customize your phone message flows in the Auth0 Dashboard. ","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages","showCards":false,"children":[{"title":"Configure Phone Messaging Providers","description":"Learn how to configure a phone messaging provider. ","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fconfigure-phone-messaging-providers","showCards":true,"children":[{"title":"Configure Twilio as a Phone Messaging Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fconfigure-phone-messaging-providers\u002Fconfigure-twilio-as-a-phone-messaging-provider"},{"title":"Configure a Custom Phone Provider ","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fconfigure-phone-messaging-providers\u002Fconfigure-a-custom-phone-provider"},{"title":"Actions Triggers: custom-phone-provider Event Object ","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fconfigure-phone-messaging-providers\u002Factions-triggers-custom-phone-provider-event-object"},{"title":"Action Triggers: custom-phone-provider API Object ","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fconfigure-phone-messaging-providers\u002Faction-triggers-custom-phone-provider-api-object"}]},{"title":"Customize Phone Templates","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fcustomize-phone-templates"}]},{"title":"Customize Multi-factor Authentication SMS and Voice Messages","description":"Learn how to customize SMS and voice messages sent by Auth0 during enrollment and verification.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fcustomize-sms-or-voice-messages","showCards":true},{"title":"Internationalization and Localization","description":"Learn how to handle different languages within your Auth0 applications.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization","showCards":true,"children":[{"title":"Universal Login Internationalization","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization\u002Funiversal-login-internationalization"},{"title":"Lock Internationalization","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization\u002Flock-internationalization"},{"title":"Lock.swift Internationalization","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization\u002Flock-swift-internationalization"},{"title":"Lock.Android Internationalization","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization\u002Flock-android-internationalization"},{"title":"Customize Translation of Lock Password Options","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization\u002Fpassword-options-translation"}]}]},{"title":"Code Customization","description":"Create Actions to customize and extend Auth0’s capabilities with custom logic. Or maintain legacy Rules and Hooks. ","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Actions","description":"Customize Auth0 capabilities with secure, tenant-specific, versioned functions that execute at certain points during the Auth0 runtime.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions","showCards":true,"children":[{"title":"Understand How Auth0 Actions Work","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Factions-overview"},{"title":"Write Your First Action","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fwrite-your-first-action"},{"title":"Explore Triggers","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers","showCards":true,"children":[{"title":"Signup and Login Triggers","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers","showCards":true,"children":[{"title":"Login Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Flogin-trigger","showCards":true,"children":[{"title":"Actions Triggers: post-login - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Flogin-trigger\u002Fpost-login-event-object"},{"title":"Actions Triggers: post-login - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Flogin-trigger\u002Fpost-login-api-object"},{"title":"Redirect with Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Flogin-trigger\u002Fredirect-with-actions"},{"title":"Releases","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Flogin-trigger\u002Freleases"}]},{"title":"Pre-user Registration Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpre-user-registration-trigger","showCards":true,"children":[{"title":"Actions Triggers: pre-user-registration - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpre-user-registration-trigger\u002Fpre-user-registration-event-object"},{"title":"Actions Triggers: pre-user-registration - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpre-user-registration-trigger\u002Fpre-user-registration-api-object"}]},{"title":"Post-user Registration Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpost-user-registration-trigger","showCards":true,"children":[{"title":"Actions Triggers: post-user-registration - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpost-user-registration-trigger\u002Fpost-user-registration-event-object"},{"title":"Actions - Triggers - post-user-registration - API object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpost-user-registration-trigger\u002Fpost-user-registration-api-object"}]}]},{"title":"MFA Notifications Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmfa-notifications-trigger","showCards":true,"children":[{"title":"Actions Triggers: send-phone-message - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmfa-notifications-trigger\u002Fsend-phone-message-event-object"},{"title":"Actions Triggers: send-phone-message - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmfa-notifications-trigger\u002Fsend-phone-message-api-object"}]},{"title":"Password Reset Triggers","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers","showCards":true,"children":[{"title":"Post-challenge Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-challenge-trigger","showCards":true,"children":[{"title":"Actions Triggers: post-challenge - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-challenge-trigger\u002Fpost-challenge-event-object"},{"title":"Actions Triggers: post-challenge - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-challenge-trigger\u002Fpost-challenge-api-object"}]},{"title":"Post Change Password Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-change-password-trigger","showCards":true,"children":[{"title":"Actions Triggers: post-change-password - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-change-password-trigger\u002Fpost-change-password-event-object"},{"title":"Actions Triggers: post-change-password - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-change-password-trigger\u002Fpost-change-password-api-object"}]}]},{"title":"Machine to Machine Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmachine-to-machine-trigger","showCards":true,"children":[{"title":"Actions Triggers: credentials-exchange - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmachine-to-machine-trigger\u002Fcredentials-exchange-event-object"},{"title":"Actions Triggers: credentials-exchange - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmachine-to-machine-trigger\u002Fcredentials-exchange-api-object"}]}]},{"title":"Action Use Cases","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fuse-cases"},{"title":"Action Coding Guidelines","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Faction-coding-guidelines"},{"title":"Actions Limitations","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Flimitations"},{"title":"Manage Dependencies","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmanage-dependencies"},{"title":"Manage Versions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmanage-versions"},{"title":"Test Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Ftest-actions"},{"title":"Releases","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Freleases"},{"title":"Migrate to Actions","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate","showCards":true,"children":[{"title":"Migrate from Rules to Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate\u002Fmigrate-from-rules-to-actions"},{"title":"Migration tooling","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate\u002Fmigrate-a-rule-to-an-action"},{"title":"Migrate from Hooks to Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate\u002Fmigrate-from-hooks-to-actions"},{"title":"Migrate from Actions Beta to Final","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate\u002Fmigrate-from-actions-beta-to-final"},{"title":"Actions Migration Limitations","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate\u002Factions-migration-limitations"}]},{"title":"Templates for Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Factions-templates"}]},{"title":"Forms","description":"Extend your identity flows with additional steps and custom logic with Forms.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fforms","showCards":true,"children":[{"title":"Nodes and components","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fnodes-and-components"},{"title":"Flows","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows","showCards":true,"children":[{"title":"Integrations","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations","showCards":true,"children":[{"title":"Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fauth0"},{"title":"Data verification","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fdata-verification"},{"title":"HTTP Request","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fhttp-request"},{"title":"JSON","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fjson"},{"title":"JSON Web Token","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fjson-web-token"},{"title":"Logic","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Flogic"},{"title":"Mailjet","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fmailjet"},{"title":"SendGrid","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fsendgrid"},{"title":"Telegram","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Ftelegram"},{"title":"Twilio","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Ftwilio"},{"title":"WhatsApp","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fwhatsapp"},{"title":"XML","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fxml"}]},{"title":"Execution and Debugger","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fflow-execution-and-debugger"}]},{"title":"Variables and helper functions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fvariables"},{"title":"Routers","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Frouters"},{"title":"Custom Field Components","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fcustom-field-components"},{"title":"Render Forms using Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Frender"},{"title":"Vault","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fvault"},{"title":"Custom Messages and Translation","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fcustom-messages-and-translation"},{"title":"Resources: Templates","type":"externalLink","url":"https:\u002F\u002Fdeveloper.auth0.com\u002Fresources\u002Ftemplates\u002Fforms","external":true,"forceFullReload":true},{"title":"Use Cases: Configure a progressive profile form using Forms","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fconfigure-progressive-profile-form"},{"title":"Use Cases: Configure an update policy form using Forms","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fconfigure-update-policy-form"},{"title":"Use Cases: Configure additional signup steps using Forms","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fconfigure-additional-signup-steps"}]},{"title":"Rules","description":"Maintain legacy rules that your applications use in the authentication pipeline.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Frules","showCards":true,"children":[{"title":"Create Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fcreate-rules"},{"title":"Configure Global Variables for Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fconfigure-global-variables-for-rules"},{"title":"Store Rule Configurations","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fconfiguration"},{"title":"Cache Expensive Resources in Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fcache-resources"},{"title":"Debug Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fdebug-rules"},{"title":"Use the Management API from within Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fuse-management-api"},{"title":"Redirect Users from Within Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fredirect-users"},{"title":"User Object Properties in Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fuser-object-in-rules"},{"title":"Context Object Properties in Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fcontext-object"},{"title":"Raise Errors from Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fraise-errors-from-rules"}]},{"title":"Hooks","description":"Maintain legacy hooks for selected extensibility points of the Auth0 platform.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fhooks","showCards":true,"children":[{"title":"Create Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fcreate-hooks"},{"title":"Update Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fupdate-hooks"},{"title":"Delete Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fdelete-hooks"},{"title":"Enable\u002FDisable Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fenable-disable-hooks"},{"title":"View Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fview-hooks"},{"title":"View Logs for Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fview-logs-for-hooks"},{"title":"Hook Secrets","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fhook-secrets","showCards":true,"children":[{"title":"Create Hook Secrets","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fhook-secrets\u002Fcreate-hook-secrets"},{"title":"Update Hook Secrets","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fhook-secrets\u002Fupdate-hook-secrets"},{"title":"Delete Hook Secrets","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fhook-secrets\u002Fdelete-hook-secrets"},{"title":"View Hook Secrets","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fhook-secrets\u002Fview-hook-secrets"}]}]}]},{"title":"Third-Party Customization","description":"Take advantage of third-party integrations and Auth0 extensions to expand what Auth0 can do for your systems.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Extensions","description":"Use Auth0 Extensions to install applications or run commands\u002Fscripts that extend the capabilities of the Auth0 base product.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fextensions","showCards":true,"children":[{"title":"Authorization Extension","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension","showCards":true,"children":[{"title":"Install Authorization Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Finstall-authorization-extension"},{"title":"Configure Authorization Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fconfigure-authorization-extension"},{"title":"Set Up Users in Authorization Extension Dashboard","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fset-up-authorization-extension-users"},{"title":"Enable API Access to Authorization Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fenable-api-access-to-authorization-extension"},{"title":"Import and Export Authorization Extension Data","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fimport-and-export-authorization-extension-data"},{"title":"Use Rules with the Authorization Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fuse-rules-with-the-authorization-extension"},{"title":"Migrate to Authorization Extension v2","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fmigrate-to-authorization-extension-v2"}]},{"title":"Delegated Administration Extension","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension","showCards":true,"children":[{"title":"Install Delegated Admin Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Finstall-delegated-admin-extension"},{"title":"Create Delegated Admin Applications","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fcreate-delegated-admin-applications"},{"title":"Delegated Administration Extension Hooks","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks","showCards":true,"children":[{"title":"Delegated Administration: Access Hook","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks\u002Fdelegated-administration-access-hook"},{"title":"Delegated Administration: Filter Hook","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks\u002Fdelegated-administration-filter-hook"},{"title":"Delegated Administration: Memberships Query Hook","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks\u002Fdelegated-administration-memberships-query-hook"},{"title":"Delegated Administration: Settings Query Hook","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks\u002Fdelegated-administration-settings-query-hook"},{"title":"Delegated Administration: Write Hook","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks\u002Fdelegated-administration-write-hook"}]},{"title":"Delegated Administration: Manage Users","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-manage-users"}]},{"title":"Single Sign-On Dashboard Extension","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fsingle-sign-on-dashboard-extension","showCards":true,"children":[{"title":"Install Single Sign-On Dashboard Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fsingle-sign-on-dashboard-extension\u002Finstall-sso-dashboard-extension"},{"title":"Create Single Sign-on (SSO) Dashboard Application","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fsingle-sign-on-dashboard-extension\u002Fcreate-sso-dashboard-application"},{"title":"Add Applications to Single Sign-On Dashboard","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fsingle-sign-on-dashboard-extension\u002Fadd-applications-to-the-sso-dashboard"},{"title":"Update Applications in the SSO Dashboard","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fsingle-sign-on-dashboard-extension\u002Fupdate-applications-on-the-sso-dashboard"}]},{"title":"Authentication API Debugger Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthentication-api-debugger-extension"},{"title":"Auth0 AD\u002FLDAP Connector Health Monitor Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fad-ldap-connector-health-monitor"},{"title":"Real-time Webtask Logs Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Freal-time-webtask-logs"},{"title":"Account Link Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Faccount-link-extension"},{"title":"User Import \u002F Export Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fuser-import-export-extension"}]},{"title":"Integrations ","description":"Reduce implementation time with Auth0-reviewed integrations you can trust.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations","showCards":true,"children":[{"title":"Integrate with Amazon Web Services and Products","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws","showCards":true,"children":[{"title":"Configure Amazon Web Services for Delegated Authentication","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Fhow-to-set-up-aws-for-delegated-authentication"},{"title":"Configure Amazon Web Services for Single Sign-On","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Fconfigure-amazon-web-services-for-sso"},{"title":"Secure AWS API Gateway Endpoints Using Custom Authorizers","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-custom-authorizers"},{"title":"Use Amazon Web Services Session Tags for Role-Based Access Control","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Fsession-tags"},{"title":"Serverless Apps with API Gateway and Lambda","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation","showCards":true,"children":[{"title":"AWS API Gateway Tutorial Step 1","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation\u002Faws-api-gateway-delegation-1"},{"title":"AWS API Gateway Tutorial Step 2","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation\u002Faws-api-gateway-delegation-2"},{"title":"AWS API Gateway Tutorial Step 3","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation\u002Faws-api-gateway-delegation-3"},{"title":"AWS API Gateway Tutorial Step 4","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation\u002Faws-api-gateway-delegation-4"},{"title":"AWS API Gateway Tutorial Step 5","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation\u002Faws-api-gateway-delegation-5"}]},{"title":"Integrate with Amazon Cognito","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Famazon-cognito"},{"title":"Secure AWS API Gateway Using Cognito","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-cognito"}]},{"title":"Integrate with Azure API Management","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fazure-api-management"},{"title":"Secure Google Cloud Endpoints with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fgoogle-cloud-endpoints"},{"title":"Secure a CLI with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fsecure-a-cli-with-auth0"},{"title":"Secure Apigee with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fapigee"},{"title":"Single Sign-On Integrations","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fsso-integrations"},{"title":"Marketing Tool Integrations","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations","showCards":true,"children":[{"title":"Export User Data to Adobe Campaign","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fadobe-campaign"},{"title":"Export User Data to Alterian","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Falterian"},{"title":"Export User Data to Constant Contact","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fconstant-contact"},{"title":"Export User Data to Oracle Eloqua","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Feloqua"},{"title":"Export User Data to MailChimp","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fmailchimp"},{"title":"Export User Data to Marketo","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fmarketo"},{"title":"Export User Data to Sailthru","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fsailthru"},{"title":"Export User Data to Salesforce","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fexport-user-data-salesforce"},{"title":"Export User Data to Salesforce Marketing Cloud","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fsalesforce-marketing-cloud"},{"title":"Export User Data to Watson Campaign Automation","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fwatson-campaign-automation"}]},{"title":"Marketplace Partners","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners","showCards":true,"children":[{"title":"Introduction to Integrating with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fintroduction-to-integrating-with-auth0"},{"title":"Defining an Integration Use Case","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fdefining-an-integration-use-case"},{"title":"Actions Integrations for Partners","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Factions-integrations-for-partners"},{"title":"Redirect Actions for Partners","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fredirect-actions-for-partners"},{"title":"Social Connections for Partners","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fsocial-connections-for-partners"},{"title":"SSO Integrations for Partners","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fsso-integrations-for-partners"},{"title":"Writing Tips for Installation Guides","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fwriting-tips-for-installation-guides"}]},{"title":"Integrate with SharePoint 2010\u002F2013","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fsharepoint-2010-2013"},{"title":"Integrate with Vercel","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fintegrate-with-vercel"},{"title":"Connect Provider Hosted Apps to SharePoint Online","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fconnecting-provider-hosted-apps-to-sharepoint-online"},{"title":"CMS Identity Plugins","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms","showCards":true,"children":[{"title":"Login by Auth0 Wordpress Plugin","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin","showCards":true,"children":[{"title":"Integrate with WordPress","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Fintegrate-with-wordpress"},{"title":"Install Login by Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Finstall-login-by-auth0"},{"title":"Configure Login by Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Fconfigure-login-by-auth0"},{"title":"User Migration in Login by Auth0 WordPress Plugin","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Fuser-migration-in-login-by-auth0"},{"title":"Extend Login by Auth0 WordPress Plugin","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Fextend-login-by-auth0"},{"title":"Troubleshoot Login by Auth0 WordPress Plugin","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Ftroubleshoot-login-by-auth0"},{"title":"Troubleshoot WordPress Plugin Invalid State Errors","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Ftroubleshoot-wordpress-plugin-invalid-state-errors"}]}]},{"title":"Authenticating & Authorizing a Tessel device with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fauthenticating-and-authorizing-a-tessel-device-with-auth0"},{"title":"Authenticating & Authorizing Devices using MQTT with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fauthenticate-devices-using-mqtt"},{"title":"Migrate Office365 Connections to Windows Azure AD","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmigrate-office365-connections-to-windows-azure-ad"},{"title":"Office 365 Custom Provisioning","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Foffice-365-custom-provisioning"}]},{"title":"Log Streams","description":"Monitor and respond to events such as changed passwords or new registrations with your own business logic.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams","showCards":true,"children":[{"title":"Integrated Log Streaming Services","type":"externalLink","url":"https:\u002F\u002Fmarketplace.auth0.com\u002Ffeatures\u002Flog-streaming","external":true,"forceFullReload":true},{"title":"Create Custom Log Streams Using Webhooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fcustom-log-streams"},{"title":"Check Log Stream Health","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fcheck-log-stream-health"},{"title":"Log Stream Filters","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fevent-filters"},{"title":"Use Auth0 App for Splunk","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fsplunk-dashboard"},{"title":"Use Auth0 App for Sumo Logic","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fsumo-logic-dashboard"},{"title":"Use Auth0 Dashboard Templates with Datadog","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fdatadog-dashboard-templates"}]},{"title":"Auth0 Marketplace","type":"externalLink","url":"https:\u002F\u002Fmarketplace.auth0.com\u002F","external":true,"forceFullReload":true}]}]},{"title":"Secure","description":"Add multi-factor authentication and defend your application from bots, suspicious IPs, and password breaches.","type":"navigationSection","url":"\u002Fdocs\u002Fsecure","icon":"IdenticonSecurity","children":[{"title":"Protect Your Application","description":"Make sure only the right people can access your applications. ","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Application Credentials","description":"This section contains information about credentials for your application to authenticate.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fapplication-credentials","showCards":true,"children":[{"title":"Generate RSA Key Pair","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fapplication-credentials\u002Fgenerate-rsa-key-pair"}]},{"title":"Attack Protection","description":"Detect attacks and stop malicious attempts to access your applications.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection","showCards":true,"children":[{"title":"Bot Detection","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection","showCards":true,"children":[{"title":"Add Bot Detection to Native Applications","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection\u002Fbot-detection-native-apps"},{"title":"Add Bot Detection to Passwordless Flows","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection\u002Fbot-detection-passwordless-flows"},{"title":"Add Bot Detection to Custom Login Pages","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection\u002Fbot-detection-custom-login-pages"},{"title":"Configure Third-Party CAPTCHA Provider Integrations","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection\u002Fconfigure-captcha"}]},{"title":"Breached Password Detection","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbreached-password-detection"},{"title":"Brute-Force Protection","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbrute-force-protection"},{"title":"Suspicious IP Throttling","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fsuspicious-ip-throttling"},{"title":"View Attack Protection Log Events","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fview-attack-protection-events"},{"title":"Prevent Attacks and Redirect Users with OAuth 2.0 State Parameters","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fstate-parameters"}]},{"title":"Continuous Session Protection","description":"Enhance security and tailor the user experience through customizable session and refresh token management. ","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fcontinuous-session-protection","showCards":true},{"title":"Highly Regulated Identity","description":"Highly Regulated Identity is Auth0's Financial-Grade Identity ","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fhighly-regulated-identity","showCards":false,"children":[{"title":"Transactional Authorization with Contextual Strong Customer Authentication","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fhighly-regulated-identity\u002Ftransactional-authorization-with-contextual-sca"},{"title":"Customer Managed Keys","description":"Learn about how to manage your Auth0 keys","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fhighly-regulated-identity\u002Fcustomer-managed-keys","showCards":true,"children":[{"title":"Configure Customer Managed Keys with the Dashboard","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fhighly-regulated-identity\u002Fcustomer-managed-keys\u002Fcustomer-managed-keys-dashboard"},{"title":"Configure Customer Managed Keys with the Management API","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fhighly-regulated-identity\u002Fcustomer-managed-keys\u002Fcustomer-managed-keys-management-api"}]}]},{"title":"Multi-Factor Authentication","description":"Add additional checks to ensure passwords match up with the identity of the user or device accessing your applications.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication","showCards":true,"children":[{"title":"Enable Multi-Factor Authentication","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fenable-mfa"},{"title":"Multi-Factor Authentication Factors","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-factors","showCards":true,"children":[{"title":"Configure Push Notifications for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-factors\u002Fconfigure-push-notifications-for-mfa"},{"title":"Configure OTP Notifications for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-factors\u002Fconfigure-otp-notifications-for-mfa"},{"title":"Configure Email Notifications for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-factors\u002Fconfigure-email-notifications-for-mfa"},{"title":"Configure SMS and Voice Notifications for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-factors\u002Fconfigure-sms-voice-notifications-mfa"}]},{"title":"WebAuthn as Multi-Factor Authentication","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fwebauthn-as-mfa"},{"title":"Configure Cisco Duo Security for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fconfigure-cisco-duo-for-mfa"},{"title":"FIDO Authentication with WebAuthn","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Ffido-authentication-with-webauthn","showCards":true,"children":[{"title":"Configure WebAuthn with Security Keys for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Ffido-authentication-with-webauthn\u002Fconfigure-webauthn-security-keys-for-mfa"},{"title":"Configure WebAuthn with Device Biometrics for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Ffido-authentication-with-webauthn\u002Fconfigure-webauthn-device-biometrics-for-mfa"}]},{"title":"Adaptive MFA","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fadaptive-mfa","showCards":true,"children":[{"title":"Enable Adaptive MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fadaptive-mfa\u002Fenable-adaptive-mfa"},{"title":"Customize Adaptive MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fadaptive-mfa\u002Fcustomize-adaptive-mfa"},{"title":"Adaptive MFA Log Events","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fadaptive-mfa\u002Fadaptive-mfa-log-events"}]},{"title":"Auth0 Guardian","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauth0-guardian","showCards":true,"children":[{"title":"Guardian.swift iOS SDK","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauth0-guardian\u002Fguardian-for-ios-sdk"},{"title":"Guardian for Android SDK","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauth0-guardian\u002Fguardian-for-android-sdk"}]},{"title":"Customize MFA","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa","showCards":true,"children":[{"title":"Customize MFA Selection for Universal Login","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa\u002Fcustomize-mfa-selection-universal-login"},{"title":"Customize MFA Enrollments for Universal Login","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa\u002Fcustomize-mfa-enrollments-universal-login"},{"title":"Customize MFA for Classic Login","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa\u002Fcustomize-mfa-classic-login"},{"title":"MFA Theme Language Dictionary","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa\u002Fmfa-theme-language-dictionary"},{"title":"MFA Widget Theme Options","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa\u002Fmfa-widget-theme-options"}]},{"title":"Authenticate Using ROPG Flow with MFA","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa","showCards":true,"children":[{"title":"Enroll and Challenge SMS and Voice Authenticators","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fenroll-challenge-sms-voice-authenticators"},{"title":"Enroll and Challenge OTP Authenticators","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fenroll-and-challenge-otp-authenticators"},{"title":"Enroll and Challenge Push Authenticators","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fenroll-and-challenge-push-authenticators"},{"title":"Enroll and Challenge Email Authenticators","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fenroll-and-challenge-email-authenticators"},{"title":"Import User MFA Authenticator Enrollments","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fimport-user-mfa-authenticator-enrollments"},{"title":"Challenge with Recovery Codes","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fchallenge-with-recovery-codes"}]},{"title":"Step-Up Authentication","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fstep-up-authentication","showCards":true,"children":[{"title":"Configure Step-up Authentication for APIs","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fstep-up-authentication\u002Fconfigure-step-up-authentication-for-apis"},{"title":"Configure Step-up Authentication for Web Apps","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fstep-up-authentication\u002Fconfigure-step-up-authentication-for-web-apps"}]},{"title":"Configure Recovery Codes for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fconfigure-recovery-codes-for-mfa"},{"title":"Manage Authentication Factors with APIs","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmanage-mfa-auth0-apis","showCards":true,"children":[{"title":"Manage Authentication Methods with Management API","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmanage-mfa-auth0-apis\u002Fmanage-authentication-methods-with-management-api"},{"title":"Manage Authentication Factors with Authentication API","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmanage-mfa-auth0-apis\u002Fmanage-authenticator-factors-mfa-api"}]},{"title":"Reset User Multi-Factor Authentication and Recovery Codes","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Freset-user-mfa"},{"title":"Multi-factor Authentication Developer Resources","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-developer-resources","showCards":true,"children":[{"title":"Auth0 MFA API","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-developer-resources\u002Fmfa-api"},{"title":"Create Custom Enrollment Tickets","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-developer-resources\u002Fcreate-custom-enrollment-tickets"},{"title":"Install Guardian SDK","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-developer-resources\u002Finstall-guardian-sdk"},{"title":"Guardian Error Code Reference","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-developer-resources\u002Fguardian-error-code-reference"},{"title":"Auth0 MFA Client Library","type":"externalLink","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-guardian.js","external":true,"forceFullReload":true},{"title":"Create Custom MFA Widget","type":"externalLink","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-guardian.js\u002Ftree\u002Fmaster\u002Fexample","external":true,"forceFullReload":true}]}]},{"title":"Security Center","description":"Observe potential attack trends and quickly respond to them in real-time.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-center","showCards":true,"children":[{"title":"Metrics","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-center\u002Fmetrics"},{"title":"Prioritized Log Streams","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-center\u002Fprioritized-log-streams"},{"title":"Configure Security Monitoring Alerts","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-center\u002Fsecurity-alerts"}]},{"title":"Security Guidance","description":"View security bulletins and learn basic tips to secure data and accounts.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance","showCards":true,"children":[{"title":"General Security Tips","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Ftips"},{"title":"Security Bulletins","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins","showCards":true,"children":[{"title":"CVE-2022-23539, CVE-2022-23541, CVE-2022-23540: Security Update for jsonwebtoken","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002F2022-12-21-jsonwebtoken"},{"title":"CVE-2022-23505: Security Update for passport-wsfed-saml2 Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2022-23505"},{"title":"CVE-2022-24794: Security Update for Express OpenID Connect Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2022-24794"},{"title":"CVE-2021-43812: Security Update for Next.js Auth0 Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2021-43812"},{"title":"CVE-2021-41246: Security Update for Express OpenID Connect Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2021-41246"},{"title":"CVE-2021-32702: Security Update for Auth0 Next.js Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2021-32702"},{"title":"CVE-2021-32641: Security Update for Auth0 Lock Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2021-32641"},{"title":"CVE 2020-15259: Security Update for ad-ldap-connector","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-15259"},{"title":"CVE-2020-15240: Security Update for omniauth-auth0 JWT Validation","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-15240"},{"title":"CVE-2020-15125: Security Update for node-auth0 Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-15125"},{"title":"CVE-2020-15119: Security Update for Auth0 Lock Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-15119"},{"title":"CVE-2020-15084: Security Update for express-jwt Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-15084"},{"title":"CVE-2020-5391, CVE-2020-5392, CVE-2020-6753, CVE-2020-7948, CVE-2020-7947: Security Update for WordPress Plugin for Auth0","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002F2020-03-31-wpauth0"},{"title":"CVE-2020-5263: Security Update for auth0.js Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-5263"},{"title":"CVE-2019-20174: Security Update for Auth0 Lock Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2019-20174"},{"title":"CVE-2019-16929: Security Vulnerability in auth0.net","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2019-16929"},{"title":"CVE-2019-13483: Security Vulnerability in Passport-SharePoint","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2019-13483"},{"title":"CVE-2019-7644: Security Vulnerability in Auth0-WCF-Service-JWT","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2019-7644"},{"title":"CVE-2019-20173: Security Update for WordPress Plugin for Auth0 wp-auth0","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2019-20173"},{"title":"CVE-2018-15121: Security Vulnerability in auth0-aspnet and auth0-aspnet-owin","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2018-15121"},{"title":"CVE-2018-11537: Security Update for angular-jwt Allow List Bypass","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2018-11537"},{"title":"CVE-2018-7307: Security Vulnerability for auth0.js \u003C 9.3","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2018-7307"},{"title":"CVE-2018-6874: Security Vulnerability in the Auth0 Authentication Service","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2018-6874"},{"title":"CVE-2018-6873: Security Vulnerability in the Auth0 Authentication Service","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2018-6873"},{"title":"CVE-2017-17068: Security Update for auth0.js Popup Callback Vulnerability","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2017-17068"},{"title":"CVE-2017-16897: Security Update for passport-wsfed-saml2 Passport Strategy Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2017-16897"},{"title":"Auth0 Security Bulletin for Rules","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002F2019-01-10-rules"},{"title":"Auth0 Security Bulletin for Assigning Scopes Based on Email Address","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002F2019-09-05-scopes"}]},{"title":"Data Security","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fdata-security","showCards":true,"children":[{"title":"Auth0 IP Addresses for Allow Lists ","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fdata-security\u002Fallowlist"},{"title":"Add User Attributes to Deny List","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fdata-security\u002Fdenylist"},{"title":"User Data Storage","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fdata-security\u002Fuser-data-storage"},{"title":"Token Storage","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fdata-security\u002Ftoken-storage"}]},{"title":"Prevent Common Cybersecurity Threats","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fprevent-threats"},{"title":"Incident Response: Using Logs","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fincident-response-using-logs"}]},{"title":"Tokens","description":"Explore the types of tokens related to identity and authentication and how they are used by Auth0.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens","showCards":true,"children":[{"title":"JSON Web Tokens","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens","showCards":true,"children":[{"title":"JSON Web Token Structure","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fjson-web-token-structure"},{"title":"JSON Web Token Claims","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fjson-web-token-claims"},{"title":"Create Custom Claims","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fcreate-custom-claims"},{"title":"Validate JSON Web Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fvalidate-json-web-tokens"},{"title":"JSON Web Key Sets","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fjson-web-key-sets"},{"title":"JSON Web Key Set Properties","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fjson-web-key-set-properties"},{"title":"Locate JSON Web Key Sets","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Flocate-json-web-key-sets"}]},{"title":"ID Tokens","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens","showCards":true,"children":[{"title":"Validate ID Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens\u002Fvalidate-id-tokens"},{"title":"Get ID Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens\u002Fget-id-tokens"},{"title":"ID Token Structure","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens\u002Fid-token-structure"},{"title":"Update ID Token Lifetime","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens\u002Fupdate-id-token-lifetime"}]},{"title":"Access Tokens","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens","showCards":true,"children":[{"title":"Access Token Profiles","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Faccess-token-profiles"},{"title":"Get Access Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fget-access-tokens"},{"title":"Use Access Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fuse-access-tokens"},{"title":"Validate Access Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fvalidate-access-tokens"},{"title":"Update Access Token Lifetime","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fupdate-access-token-lifetime"},{"title":"Identity Provider Access Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fidentity-provider-access-tokens"},{"title":"Management API Access Tokens","description":"Learn about Auth0 Management APIv2 Access Tokens and how to use them.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fmanagement-api-access-tokens","showCards":false,"children":[{"title":"Get Management API Access Tokens for Testing","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fmanagement-api-access-tokens\u002Fget-management-api-access-tokens-for-testing"},{"title":"Get Management API Access Tokens for Production","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fmanagement-api-access-tokens\u002Fget-management-api-access-tokens-for-production"},{"title":"Get Management API Access Tokens for Single-Page Applications","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fmanagement-api-access-tokens\u002Fget-management-api-tokens-for-single-page-applications"},{"title":"Changes in Auth0 Management APIv2 Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fmanagement-api-access-tokens\u002Fchanges-in-auth0-management-apiv2-tokens"}]},{"title":"JSON Web Encryption","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fjson-web-encryption"}]},{"title":"Delegation Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fdelegation-tokens"},{"title":"Refresh Tokens","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens","showCards":true,"children":[{"title":"Get Refresh Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fget-refresh-tokens"},{"title":"Use Refresh Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fuse-refresh-tokens"},{"title":"Configure Refresh Token Expiration","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fconfigure-refresh-token-expiration"},{"title":"Refresh Token Rotation","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Frefresh-token-rotation"},{"title":"Configure Refresh Token Rotation","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fconfigure-refresh-token-rotation"},{"title":"Use Refresh Token Rotation","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fuse-refresh-token-rotation"},{"title":"Disable Refresh Token Rotation","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fdisable-refresh-token-rotation"},{"title":"Revoke Refresh Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Frevoke-refresh-tokens"},{"title":"Refresh Tokens with Actions","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fmanage-refresh-tokens-actions"}]},{"title":"Revoke Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frevoke-tokens"},{"title":"Manage Refresh Tokens with Auth0 Management API","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fmanage-refresh-tokens-with-auth0-management-api"},{"title":"Token Best Practices","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Ftoken-best-practices"}]}]},{"title":"Compliance","description":"Learn how Auth0 meets requirements for multiple compliance frameworks and certifications, including GDPR and HIPAA.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Data Privacy and Compliance","description":"Read about Auth0’s compliance qualifications and data processing.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance","showCards":true,"children":[{"title":"GDPR","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr","showCards":true,"children":[{"title":"GDPR: Conditions for Consent","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-conditions-for-consent"},{"title":"GDPR: Track Consent with Custom UI","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-track-consent-with-custom-ui"},{"title":"GDPR: Track Consent with Lock","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-track-consent-with-lock"},{"title":"GDPR: Right to Access, Correct, and Erase Data","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-right-to-access-correct-and-erase-data"},{"title":"GDPR: Data Minimization","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-data-minimization"},{"title":"GDPR: Data Portability","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-data-portability"},{"title":"GDPR: Protect and Secure User Data","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-protect-and-secure-user-data"}]},{"title":"Auth0 Data Processing","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fdata-processing"}]}]}]},{"title":"Deploy and Monitor","description":"Deploy Auth0 for your applications and monitor system health and events.","type":"navigationSection","url":"\u002Fdocs\u002Fdeploy-monitor","icon":"IdenticonMonitoring","children":[{"title":"Deployment","description":"Plan, check, and execute your Auth0 deployment.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Deployment Options","description":"Evaluate whether to deploy to the public cloud or to a private cloud.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeployment-options","showCards":true},{"title":"Private Cloud Deployments","description":"Explore the capabilities and limitations of different AWS and Azure private cloud options.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-private-cloud","showCards":true,"children":[{"title":"Private Cloud on AWS","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-private-cloud\u002Fprivate-cloud-on-aws"},{"title":"Private Cloud on Azure","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-private-cloud\u002Fprivate-cloud-on-azure"},{"title":"Private Cloud Add-on Features","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-private-cloud\u002Fprivate-cloud-add-on-features"}]},{"title":"Pre-Deployment Checks","description":"Run checks to ensure that your applications are ready for production.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks","showCards":true,"children":[{"title":"Run Production Readiness Checks","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fhow-to-run-production-checks"},{"title":"Production Readiness Checks: Critical Fixes","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fproduction-check-required-fixes"},{"title":"Production Readiness Checks: Non-Critical Fixes","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fproduction-check-recommended-fixes"},{"title":"Production Readiness Checks: Best Practices","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fproduction-checks-best-practices"},{"title":"Run Pre-Deployment Tests","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fpredeployment-tests"},{"title":"Pre-Launch Tips","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fpre-launch-tips"}]},{"title":"Deployment Checklist","description":"Explore the Auth0-provided general deployment checklist for Auth0 implementations.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-checklist","showCards":true},{"title":"Deploy CLI Tool","description":"Learn how Auth0 supports continuous integration and deployment using the Deploy CLI tool.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool","showCards":true,"children":[{"title":"Use as a CLI","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fuse-as-a-cli"},{"title":"Use as a Node Module","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fuse-as-a-node-module"},{"title":"Configure the Deploy CLI","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fconfigure-the-deploy-cli"},{"title":"Authenticate with your Tenant","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fauthenticate-with-your-tenant"},{"title":"Keyword Replacement","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fkeyword-replacement"},{"title":"Incorporate into Multi-environment Workflows","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fincorporate-into-multi-environment-workflows"},{"title":"Exclude Resources From Management","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fexclude-resources-from-management"},{"title":"Resource-specific Documentation","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fresource-specific-documentation"},{"title":"Available Resource Configuration Formats","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Favailable-resource-configuration-formats"}]},{"title":"Auth0 Terraform Provider","description":"Learn about the Auth0 Terraform Provider and how to use it to manage deployment of your Auth0 instances.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fauth0-terraform-provider","showCards":false},{"title":"Deployment Best Practices","description":"Explore best practices for deploying Auth0 implementations.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeployment-best-practices","showCards":true}]},{"title":"Monitoring","description":"Monitor events and service status and work with tenant log event data.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Monitor","description":"Monitor your Auth0 implementation and Auth0 status and services.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fmonitor","showCards":true,"children":[{"title":"Check Auth0 Status","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fmonitor\u002Fcheck-auth0-status"},{"title":"Check External Services Status","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fmonitor\u002Fcheck-external-services-status"},{"title":"Monitor Applications","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fmonitor\u002Fmonitor-applications"},{"title":"Monitor Auth0 Using System Center Operations Manager","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fmonitor\u002Fmonitor-using-scom"}]},{"title":"Logs","description":"Manage event logs for business analysis and insights. ","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs","showCards":true,"children":[{"title":"Personally Identifiable Information in Auth0 Logs","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Fpii-in-logs"},{"title":"Log Data Retention","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Flog-data-retention"},{"title":"View Log Events","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Fview-log-events"},{"title":"Filter Log Events","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Flog-event-filters"},{"title":"Prompt Details in Tenant Logs","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Fprompt-details-in-tenant-logs"},{"title":"Retrieve Log Events Using the Management API","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Fretrieve-log-events-using-mgmt-api"},{"title":"Log Event Type Codes","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Flog-event-type-codes"},{"title":"Log Search Query Syntax","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Flog-search-query-syntax"},{"title":"Export Log Events with Rules","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Fexport-log-events-with-rules"}]}]}]},{"title":"Troubleshoot","description":"Troubleshoot challenges, learn about Auth0’s different levels of support, and get help.","type":"navigationSection","url":"\u002Fdocs\u002Ftroubleshoot","icon":"IdenticonTroubleshoot","children":[{"title":"Get Support","description":"Learn about Auth0’s support plans and procedures, service agreements, and community.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Customer Support","description":"Learn about the different levels of support at Auth0.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support","showCards":true,"children":[{"title":"Premier Success Plans","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fsupport-plans"},{"title":" Support Channels","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fsupport-channels"},{"title":"Self Service Support","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fself-service-support"},{"title":"Product Support Matrix","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fproduct-support-matrix"},{"title":"Service Levels","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fservices-level-descriptions"},{"title":"Open and Manage Support Tickets","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fopen-and-manage-support-tickets"},{"title":"Manage Subscriptions","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fmanage-subscriptions","showCards":true,"children":[{"title":"Downgrade or Cancel Auth0 Subscriptions","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fmanage-subscriptions\u002Fdowngrade-or-cancel-subscriptions"},{"title":"Delete or Reset Tenants","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fmanage-subscriptions\u002Fdelete-or-reset-tenant"},{"title":"Export Data","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fmanage-subscriptions\u002Fexport-data"},{"title":"Monitor Subscription Usage","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fmanage-subscriptions\u002Fmonitor-subscription-usage"}]},{"title":"Reset Account Passwords","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Freset-account-passwords"},{"title":"Software Updates","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fsoftware-updates"},{"title":"Auth0 Versioning Strategy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fversioning-strategy"},{"title":"Operational Policies","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies","showCards":true,"children":[{"title":"Billing Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fbilling-policy"},{"title":"Auth0 Public Cloud Service Endpoints","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fpublic-cloud-service-endpoints"},{"title":"Data Export and Transfer Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fdata-export-and-transfer-policy"},{"title":"Change Freeze Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fchange-freeze-policy"},{"title":"Load Testing Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fload-testing-policy"},{"title":"Penetration Testing Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fpenetration-testing-policy"},{"title":"Rate Limit Policy","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy","showCards":true,"children":[{"title":"Rate Limit Use Cases","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-use-cases"},{"title":"Rate Limit Configurations","description":"Rate limit configurations for each subscription type","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations","showCards":true,"children":[{"title":"Free","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ffree-public"},{"title":"Self Service","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Fself-service-public"},{"title":"Enterprise","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Fenterprise-public"},{"title":"Tier Dev Private Cloud","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-20-development-private-cloud"},{"title":"Private Cloud Basic 100 RPS (1x)","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-100-rps-private-cloud"},{"title":"Private Cloud Performance 500 RPS (5x)","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-500-rps-private-cloud"},{"title":"Private Cloud Performance 1500 RPS (15x)","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-1500-rps-private-cloud"},{"title":"Private Cloud Performance 3000 RPS (30x) and 3000 RPS (30x) Burst","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-3000-rps-private-cloud"},{"title":"Private Cloud Performance 6000 RPS (60x) and 6000 RPS (60x) Burst","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-6000-rps-private-cloud"}]}]},{"title":"Entity Limit Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fentity-limit-policy"}]},{"title":"Auth0 Changelog","type":"externalLink","url":"https:\u002F\u002Fauth0.com\u002Fchangelog","external":true,"forceFullReload":true},{"title":"Responsible Disclosure Program Security Support Tickets","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fresponsible-disclosure-program-security-support-tickets"},{"title":"Auth0 Enterprise and Premier Support","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fauth0-enterprise-and-premier-support"},{"title":"Update Billing Information","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fupdate-billing-information"}]}]},{"title":"Troubleshoot","description":"Explore solutions to common challenges.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Commonplace Issues","description":"Learn fundamental troubleshooting tactics.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues","showCards":true,"children":[{"title":"Verify Platform","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fverify-platform"},{"title":"Verify Connections","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fverify-connections"},{"title":"Verify Domain","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fverify-domain"},{"title":"Verify Rules","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fverify-rules"},{"title":"Check Error Messages","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fcheck-error-messages"},{"title":"Troubleshoot Invalid Token Errors","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Finvalid-token-errors"},{"title":"Check for Deprecation Errors","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fsearch-logs-for-deprecation-errors"},{"title":"Deprecation Errors","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fcheck-deprecation-errors"},{"title":"Recover Administrative Access to a Tenant","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Frecover-administrative-access-to-a-tenant"}]},{"title":"Authentication Issues","description":"Troubleshoot login and other authentication issues.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues","showCards":true,"children":[{"title":"Check API Calls","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Fcheck-api-calls"},{"title":"Check Login and Logout Issues","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Fcheck-login-and-logout-issues"},{"title":"Check User Profiles","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Fcheck-user-profiles"},{"title":"Troubleshoot Role-Based Access Control and Authorization","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Ftroubleshoot-rbac-authorization"},{"title":"Troubleshoot Multi-Factor Authentication Issues","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Ftroubleshoot-mfa-issues"},{"title":"Troubleshoot SAML Configurations","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Ftroubleshoot-saml-configurations"},{"title":"Troubleshoot SAML Errors","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Fsaml-errors"},{"title":"Self Change Password Errors","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Fself-change-password-errors"},{"title":"Troubleshoot Authorization Extension","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Ftroubleshoot-authorization-extension"},{"title":"Troubleshoot Renew Tokens When Using Safari","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Frenew-tokens-when-using-safari"}]},{"title":"Integration and Extensibility Issues","description":"Troubleshoot issues integrating with third-party solutions.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fintegration-extensibility-issues","showCards":true,"children":[{"title":"Troubleshoot Custom Domains","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fintegration-extensibility-issues\u002Ftroubleshoot-custom-domains"},{"title":"Troubleshoot AD\u002FLDAP Connector","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fintegration-extensibility-issues\u002Ftroubleshoot-ad-ldap-connector"},{"title":"Troubleshoot Extensions","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fintegration-extensibility-issues\u002Ftroubleshoot-extensions"},{"title":"Troubleshoot Deploy CLI Tool","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fintegration-extensibility-issues\u002Ftroubleshoot-the-deploy-cli-tool"}]},{"title":"Troubleshooting Tools","description":"Learn how to generate and analyze HAR files, debug, and inspect tokens.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Ftroubleshooting-tools","showCards":true,"children":[{"title":"Generate and Analyze HAR Files","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Ftroubleshooting-tools\u002Fgenerate-and-analyze-har-files"},{"title":"Sanitize HTTP Traces","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Ftroubleshooting-tools\u002Fsanitize-http-traces"},{"title":"JSON Web Token Inspector","type":"externalLink","url":"https:\u002F\u002Fjwt.io","external":true,"forceFullReload":true}]},{"title":"Debugging Best Practices","description":"Explore best practices for debugging your Auth0 implementation.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fdebugging-best-practices","showCards":true},{"title":"Error Handling Best Practices","description":"Explore best practices for handling error conditions.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Ferror-handling-best-practices","showCards":true},{"title":"Performance Best Practices","description":"Learn about best practices for performance.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fperformance-best-practices","showCards":true},{"title":"General Usage and Operations Best Practices","description":"Explore best practices for general Auth0 usage and operation.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fgeneral-usage-and-operations-best-practices","showCards":true}]},{"title":"Auth0 Product Lifecycle","description":"Discover our iterative approach to product delivery.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Product Lifecycle","description":"Learn how we’re constantly improving.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle","showCards":true,"children":[{"title":"Product Release Stages","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},{"title":"Migration Process","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fmigration-process"},{"title":"Deprecations and Migrations","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fdeprecations-and-migrations","showCards":true,"children":[{"title":"Migrate from Node 12 and 16 to Node 18","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fdeprecations-and-migrations\u002Fmigrate-nodejs-16-to-nodejs-18"}]},{"title":"Past Migrations","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations","showCards":true,"children":[{"title":"Migrate from edge.js extensibility features","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-from-edge-js-extensibility-features"},{"title":"Migrate from oracledb extensibility features","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-from-oracledb-extensibility-features"},{"title":"Migrate Custom Claims","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fcustom-claims-migration"},{"title":"Migrate from Log Extensions","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-from-log-extensions"},{"title":"Migrate Tenant Hostname Validation","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Ftenant-hostname-migration"},{"title":"Migrate to Node.js 16","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-nodejs-16"},{"title":"Migrate from Node.js 8 to Node.js 12","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-nodejs-12"},{"title":"Migrate to Management API v2 Endpoint Paginated Queries","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-paginated-queries"},{"title":"Migrate to New Tenant Member Roles","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-tenant-member-roles"},{"title":"Migrate from Search v2 to v3","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-v2-v3"},{"title":"Migrate to Passwordless Endpoint from Confidential Applications","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-passwordless"},{"title":"Clickjacking Protection for Universal Login Change","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fclickjacking-protection-for-universal-login"},{"title":"Migrate to Management API Endpoints with Access Tokens","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-calling-api-with-access-tokens"},{"title":"Migrate to Access Tokens for Account Linking","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Flink-user-accounts-with-access-tokens-migration"},{"title":"Migrate Your Resource Owner Passwordless Credentials Exchange","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fresource-owner-passwordless-credentials-exchange"},{"title":"Migrate Your Resource Owner Password Flow","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigration-oauthro-oauthtoken"},{"title":"Instagram Connection Deprecation","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Finstagram-connection-deprecation"},{"title":"Yahoo API Changes","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fyahoo-api-changes"},{"title":"Migrate from Google to Firebase Cloud Messaging","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fgoogle-firebase-migration"},{"title":"Facebook Social Context Field Deprecation","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Ffacebook-social-context-field-deprecation"},{"title":"Facebook Graph API Changes","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Ffacebook-graph-api-changes"},{"title":"Migrate from Embedded Login to Universal Login","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-from-embedded-login-to-universal-login"},{"title":"Migrate from Legacy Authentication Flows","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-from-legacy-auth-flows"},{"title":"Migrate to Tenant Log Search v3","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-tenant-log-search-v3"},{"title":"Migrate to 1-Hour Login Flows Expiration","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-1-hour-expiration"}]}]}]},{"title":"Auth0 Community","type":"externalLink","url":"https:\u002F\u002Fcommunity.auth0.com\u002F","external":true,"forceFullReload":true},{"title":"Auth0 Blog","type":"externalLink","url":"https:\u002F\u002Fauth0.com\u002Fblog\u002F","external":true,"forceFullReload":true}]}],"apis":[{"title":"Overview","url":"\u002Fdocs\u002Fapi"},{"title":"Testing with Postman","url":"\u002Fdocs\u002Fapi\u002Fuse-auth0-apis-with-postman-collections","hidden":true},{"title":"Authentication API","url":"\u002Fdocs\u002Fapi\u002Fauthentication","external":true,"forceFullReload":true},{"title":"Changes in Management API v2","url":"\u002Fdocs\u002Fapi\u002Fmanagement-api-changes-v1-to-v2","forceFullReload":true,"hidden":true},{"title":"Management API Explorer","url":"\u002Fdocs\u002Fapi\u002Fmanagement\u002Fv2\u002F","forceFullReload":true,"external":true}],"libraries":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries"},{"title":"Auth0 Single Page App SDK","url":"\u002Fdocs\u002Flibraries\u002Fauth0-single-page-app-sdk","children":[{"title":"Migrate from auth0.js","url":"\u002Fdocs\u002Flibraries\u002Fauth0-single-page-app-sdk\u002Fmigrate-from-auth0-js-to-the-auth0-single-page-app-sdk","hidden":true}]},{"title":"Auth0 React SDK","url":"\u002Fdocs\u002Flibraries\u002Fauth0-react"},{"title":"Auth0 Angular SPA SDK","url":"\u002Fdocs\u002Flibraries\u002Fauth0-angular-spa"},{"title":"Lock for Web","url":"\u002Fdocs\u002Flibraries\u002Flock","children":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries\u002Flock"},{"title":"Configuration Options","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Flock-configuration"},{"title":"API Reference","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Flock-api-reference"},{"title":"UI Customization","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Flock-ui-customization"},{"title":"Internationalization","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Flock-internationalization"},{"title":"Customizing Errors","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Fcustomize-lock-error-messages"},{"title":"Authentication Modes","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Flock-authentication-modes"}]},{"title":"Lock for iOS","url":"\u002Fdocs\u002Flibraries\u002Flock-swift","children":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries\u002Flock-swift"},{"title":"Styles Customization","url":"\u002Fdocs\u002Flibraries\u002Flock-swift\u002Flock-swift-customization"},{"title":"Behavior Configuration","url":"\u002Fdocs\u002Flibraries\u002Flock-swift\u002Flock-swift-configuration-options"},{"title":"Custom Fields","url":"\u002Fdocs\u002Flibraries\u002Flock-swift\u002Flock-swift-custom-fields-at-signup"},{"title":"Internationalization","url":"\u002Fdocs\u002Flibraries\u002Flock-swift\u002Flock-swift-internationalization"}]},{"title":"Lock for Android","url":"\u002Fdocs\u002Flibraries\u002Flock-android","children":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries\u002Flock-android"},{"title":"Configuration Options","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-configuration"},{"title":"Custom Auth Providers","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-custom-authentication-providers"},{"title":"Android Dev Keystores","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fandroid-development-keystores-hashes"},{"title":"Custom Signup Fields","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-custom-fields-at-signup"},{"title":"Custom Theming","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-custom-theming"},{"title":"Internationalization","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-internationalization"},{"title":"Passwordless","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-passwordless"},{"title":"Passwordless with Magic Link","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-passwordless-with-magic-link"}]},{"title":"Lock vs. Custom UI","url":"\u002Fdocs\u002Funiversal-login\u002Funiversal-login-page-customization"},{"title":"Auth0 SDK for Web","url":"\u002Fdocs\u002Flibraries\u002Fauth0js-v9-reference"},{"title":"Auth0 SDK for iOS","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift","children":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift"},{"title":"Database Authentication","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift\u002Fauth0-swift-database-connections"},{"title":"User Management","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift\u002Fauth0-swift-user-management"},{"title":"Refresh Tokens","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift\u002Fauth0-swift-save-and-renew-tokens"},{"title":"Touch ID \u002F Face ID","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift\u002Fauth0-swift-touchid-faceid"}]},{"title":"Auth0 SDK for Android","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android","children":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android"},{"title":"Login, Logout, and User Profiles","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-login-logout-and-user-profiles"},{"title":"Configuration","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-configuration"},{"title":"Database Authentication","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-database-authentication"},{"title":"Passwordless Authentication","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-passwordless"},{"title":"User Management","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-user-management"},{"title":"Refresh Tokens","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-save-and-renew-tokens"},{"title":"Custom Networking Client","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-custom-networking-client"},{"title":"V2 Migration Guide","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-v2-migration-guide"}]}],"videos":[{"title":"Learn Identity","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series","children":[{"title":"Introduction to Identity","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fintroduction-to-identity"},{"title":"OpenID Connect and OAuth2","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fopenid-connect-and-oauth2"},{"title":"Web Sign-In","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fweb-sign-in"},{"title":"Calling an API","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fcalling-an-api"},{"title":"Desktop and Mobile Apps","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fdesktop-and-mobile-apps"},{"title":"Single Page Apps","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fsingle-page-apps"}]},{"title":"Get Started","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series","children":[{"title":"Architect: Your Tenant","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Farchitect-your-tenant"},{"title":"Provision: User Stores","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fprovision-user-stores"},{"title":"Provision: Import Users","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fprovision-import-users"},{"title":"Authenticate: How It Works","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fauthenticate-how-it-works"},{"title":"Authenticate: SPA Example","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fauthenticate-spa-example"},{"title":"Authorize: ID Tokens and Access Control","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fauthorize-id-tokens-and-access-control"},{"title":"Authorize: Get and Validate ID Tokens","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fauthorize-get-and-validate-id-tokens"},{"title":"User Profiles","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Flearn-user-profiles"},{"title":"Brand: How It Works","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fbrand-how-it-works"},{"title":"Brand: Sign Up and Login Pages","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fbrand-signup-and-login-pages"},{"title":"Brand: Emails and Error Pages","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fbrand-emails-and-error-pages"},{"title":"Logout","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Flearn-logout"}]}],"identity-labs":[{"title":"Digital Identity Labs","url":"\u002Fdocs\u002Fidentity-labs","children":[{"title":"Lab 1: Web Sign-In","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-1-web-sign-in","children":[{"title":"Exercise 1","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-1-web-sign-in\u002Fidentity-lab-1-exercise-1"},{"title":"Exercise 2","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-1-web-sign-in\u002Fidentity-lab-1-exercise-2"}]},{"title":"Lab 2: Calling an API","url":"\u002Fdocs\u002Fidentity-labs\u002Fidentity-lab-2-calling-api","children":[{"title":"Exercise 1","url":"\u002Fdocs\u002Fidentity-labs\u002Fidentity-lab-2-calling-api\u002Fidentity-lab-2-exercise-1"},{"title":"Exercise 2","url":"\u002Fdocs\u002Fidentity-labs\u002Fidentity-lab-2-calling-api\u002Fidentity-lab-2-exercise-2"},{"title":"Exercise 3","url":"\u002Fdocs\u002Fidentity-labs\u002Fidentity-lab-2-calling-api\u002Fidentity-lab-2-exercise-3"}]},{"title":"Lab 3: Mobile Native App","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-3-mobile-native-app","children":[{"title":"Exercise 1","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-3-mobile-native-app\u002Fidentity-lab-3-exercise-1"},{"title":"Exercise 2","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-3-mobile-native-app\u002Fidentity-lab-3-exercise-2"},{"title":"Exercise 3","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-3-mobile-native-app\u002Fidentity-lab-3-exercise-3"}]},{"title":"Lab 4: Single Page App","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-4-single-page-app","children":[{"title":"Exercise 1","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-4-single-page-app\u002Fidentity-lab-4-exercise-1"},{"title":"Exercise 2","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-4-single-page-app\u002Fidentity-lab-4-exercise-2"}]}]}]},"unmarkedSidebar":{"articles":[{"title":"Get Started","description":"Learn the basics and begin building your authentication solution.","type":"navigationSection","url":"\u002Fdocs\u002Fget-started","icon":"IdenticonGettingStarted","children":[{"title":"Auth0 Onboarding","type":"navigationSubsection","showCards":false,"quickstarts":false,"children":[{"title":"Auth0 Onboarding","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fonboarding","showCards":true,"children":[{"title":"Self-Service Machine-to-Machine","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fonboarding\u002Fself-service-m2m"}]}]},{"title":"Start Building","description":"To get up and running swiftly, choose your application type for a step-by-step quickstart tutorial.","type":"navigationSubsection","showCards":true,"quickstarts":true,"children":[{"title":"Quickstarts","type":"externalLink","url":"https:\u002F\u002Fauth0.com\u002Fdocs\u002Fquickstarts","external":true,"forceFullReload":true}]},{"title":"Learn the Basics","description":"Build your knowledge of IAM technology and Auth0.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Identity Fundamentals","description":"Explore topics related to the fundamentals of identity and access management.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fidentity-fundamentals","showCards":true,"children":[{"title":"Introduction to Identity and Access Management (IAM)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fidentity-fundamentals\u002Fidentity-and-access-management"},{"title":"Introduction to Auth0","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fidentity-fundamentals\u002Fintroduction-to-auth0"},{"title":"Authentication vs. Authorization","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fidentity-fundamentals\u002Fauthentication-and-authorization"},{"title":"Glossary","type":"externalLink","url":"https:\u002F\u002Fauth0.com\u002Fdocs\u002Fglossary","external":false,"forceFullReload":true}]},{"title":"Auth0 Overview","description":"Discover different use cases. Create and connect the building blocks of your IAM solution.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview","showCards":true,"children":[{"title":"Auth0 Dashboard","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fdashboard","showCards":true,"children":[{"title":"About the Activity Page ","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fdashboard\u002Factivity"}]},{"title":"Auth0 Guide","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fauth0-guide"},{"title":"Create Tenants","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-tenants","showCards":true,"children":[{"title":"Create Multiple Tenants","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-tenants\u002Fcreate-multiple-tenants"},{"title":"Link Multiple Tenants to a Single Subscription","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-tenants\u002Fchild-tenants"},{"title":"Set Up Multiple Environments","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-tenants\u002Fset-up-multiple-environments"},{"title":"Multi-Tenant Applications Best Practices","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-tenants\u002Fmulti-tenant-apps-best-practices"}]},{"title":"Create Applications","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications","showCards":true,"children":[{"title":"Register Native Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications\u002Fnative-apps"},{"title":"Register Single-Page Web Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications\u002Fsingle-page-web-apps"},{"title":"Register Regular Web Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications\u002Fregular-web-apps"},{"title":"Register Machine-to-Machine Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications\u002Fmachine-to-machine-apps"},{"title":"Configure an Identity Provider in Access Gateway","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fcreate-applications\u002Fconfigure-an-identity-provider-in-access-gateway"}]},{"title":"Register APIs","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-overview\u002Fset-up-apis"}]}]},{"title":"Configure Auth0","description":"Define how Auth0 works with your applications and APIs. Control who can access your Auth0 Dashboard.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Auth0 Teams","description":"Learn about Auth0 Teams, including how to enable Teams, view and manage tenants, and manage tenant members.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams","showCards":true,"children":[{"title":"Tenant Management","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Ftenant-management"},{"title":"Team Member Management","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Fteam-member-management"},{"title":"Tenant Member Management","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Ftenant-member-management"},{"title":"Configure Security Policies","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Fconfigure-security-policies"},{"title":"Troubleshoot Teams","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Ftroubleshoot-teams"},{"title":"Team Activity","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Fteam-activity"},{"title":"About the Quarterly Snapshot","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauth0-teams\u002Fquarterly-snapshot"}]},{"title":"Dashboard Profile","description":"Describes how to configure options in Auth0 Dashboard's profile section.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fdashboard-profile","showCards":true,"children":[{"title":"Auth0 Dashboard Login Session Management","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fdashboard-profile\u002Fauth0-dashboard-login-session-management"},{"title":"Light and Dark themes","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fdashboard-profile\u002Flight-and-dark-themes"}]},{"title":"Tenant Settings","description":"Configure the behavior of your Auth0 tenant.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings","showCards":true,"children":[{"title":"Signing Keys","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fsigning-keys","showCards":true,"children":[{"title":"Rotate Signing Keys","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fsigning-keys\u002Frotate-signing-keys"},{"title":"Revoke Signing Keys","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fsigning-keys\u002Frevoke-signing-keys"},{"title":"View Signing Certificates","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fsigning-keys\u002Fview-signing-certificates"}]},{"title":"Configure Device User Code Settings","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fconfigure-device-user-code-settings"},{"title":"Enable Single Sign-On for Tenants","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Fenable-sso-for-legacy-tenants"},{"title":"Find Your Tenant Name or Tenant ID","type":"article","url":"\u002Fdocs\u002Fget-started\u002Ftenant-settings\u002Ffind-your-tenant-name-or-tenant-id"}]},{"title":"Applications in Auth0","description":"Control the details of how Auth0 works with your applications.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapplications","showCards":true,"children":[{"title":"Application Settings","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fapplication-settings"},{"title":"Credential Settings","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fcredentials"},{"title":"Subdomain URL Placeholders","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fwildcards-for-subdomains"},{"title":"Confidential and Public Applications","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications","showCards":true,"children":[{"title":"Check if Application is Confidential or Public","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Fview-application-type"},{"title":"First-Party and Third-Party Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Ffirst-party-and-third-party-applications"},{"title":"View Application Ownership","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Fview-application-ownership"},{"title":"Update Application Ownership","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Fupdate-application-ownership"},{"title":"Enable Third-Party Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Fenable-third-party-applications"},{"title":"User Consent and Third-Party Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications\u002Fuser-consent-and-third-party-applications"}]},{"title":"Dynamic Application Registration","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fdynamic-client-registration"},{"title":"Set Up Database Connections","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fset-up-database-connections"},{"title":"Test Database Connections","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Ftest-database-connections"},{"title":"Application Grant Types","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fapplication-grant-types"},{"title":"Update Grant Types","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fupdate-grant-types"},{"title":"Revoke Access to APIs Using Application Grants","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Frevoke-api-access"},{"title":"Signing Algorithms","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fsigning-algorithms"},{"title":"Change Application Signing Algorithms","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fchange-application-signing-algorithms"},{"title":"Configure Application Metadata","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-application-metadata"},{"title":"Update Application Connections","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fupdate-application-connections"},{"title":"Rotate Credentials","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Frotate-credentials"},{"title":"Rotate Client Secrets","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Frotate-client-secret"},{"title":"Enable Android App Links Support","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fenable-android-app-links-support"},{"title":"Enable Universal Links Support in Apple Xcode","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fenable-universal-links-support-in-apple-xcode"},{"title":"Configure Cross-Origin Resource Sharing","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fset-up-cors"},{"title":"Configure Applications with OIDC Discovery","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-applications-with-oidc-discovery"},{"title":"Configure WS-Fed Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-ws-fed-applications"},{"title":"Configure FAPI Compliance","description":"Learn how to configure FAPI compliance for an Auth0 tenant.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-fapi-compliance","showCards":true,"children":[{"title":"Configure Auth0 to pass OpenID FAPI Certification Tests","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-fapi-compliance\u002Fconfigure-auth0-to-pass-openid-fapi-certification-tests"}]},{"title":"Configure Pushed Authorization Requests (PAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-par"},{"title":"Configure JWT-secured Authorization Requests (JAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-jar"},{"title":"Configure mTLS Authentication","description":"Learn how to configure mTLS authentication for Auth0.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-mtls","showCards":true,"children":[{"title":"Set up the Customer Edge","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-mtls\u002Fset-up-the-customer-edge"},{"title":"Configure mTLS Authentication for a Tenant","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-mtls\u002Fconfigure-mtls-for-a-tenant"},{"title":"Configure mTLS Authentication for a Client","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-mtls\u002Fconfigure-mtls-for-a-client"}]},{"title":"Configure Private Key JWT Authentication","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-private-key-jwt"},{"title":"Configure Sender Constraining ","description":"Learn how to configure sender constraining for your Auth0 tenant. ","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-sender-constraining","showCards":true,"children":[{"title":"Configure Client for Sender Constraining ","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-sender-constraining\u002Fconfigure-client-for-sender-constraining"},{"title":"Configure Resource Server for Sender Constraining","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfigure-sender-constraining\u002Fconfigure-resource-server-for-sender-constraining"}]},{"title":"Remove Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fremove-applications"},{"title":"Test Applications Locally","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fwork-with-auth0-locally"},{"title":"Enable Single Sign-On Integrations for Applications","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fenable-sso-for-applications"}]},{"title":"APIs","description":"Manage access for resource requests made to your APIs.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapis","showCards":true,"children":[{"title":"API Settings","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fapi-settings"},{"title":"Add API Permissions","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fadd-api-permissions"},{"title":"Delete API Permissions","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fdelete-api-permissions"},{"title":"Scopes","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fscopes","showCards":true,"children":[{"title":"API Scopes","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fscopes\u002Fapi-scopes"},{"title":"OpenID Connect Scopes","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fscopes\u002Fopenid-connect-scopes"},{"title":"Sample Use Cases: Scopes and Claims","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fscopes\u002Fsample-use-cases-scopes-and-claims"}]},{"title":"Configure Access Token Profile","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fconfigure-access-token-profile"},{"title":"Configure JSON Web Encryption (JWE)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fconfigure-json-web-encryption"},{"title":"Configure Logical API for Multiple APIs","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fset-logical-api"},{"title":"Configure Rich Authorization Requests (RAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fconfigure-rich-authorization-requests"},{"title":"Create Machine-to-Machine Applications for Testing","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fcreate-m2m-app-test"},{"title":"Enable Role-Based Access Control for APIs","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fenable-role-based-access-control-for-apis"}]},{"title":"Manage Dashboard Access","description":"Administer your team members’ access to your Auth0 Dashboard.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access","showCards":true,"children":[{"title":"Dashboard Access by Role","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Ffeature-access-by-role"},{"title":"Add Tenant Members","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fadd-dashboard-users"},{"title":"Edit Tenant Members","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fedit-dashboard-users"},{"title":"Remove Tenant Members","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fremove-dashboard-users"},{"title":"Update Dashboard User Email Addresses","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fupdate-dashboard-user-email"},{"title":"Multi-factor Authentication for Dashboard Users","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fadd-change-remove-mfa","showCards":true,"children":[{"title":"Add Multi-Factor Authentication for Auth0 Dashboard Access","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fadd-change-remove-mfa\u002Fadd-mfa"},{"title":"Remove or Change Dashboard Multi-Factor Authentication","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fadd-change-remove-mfa\u002Fremove-or-change-dashboard-multi-factor-authentication"}]},{"title":"Configure Single Sign-on for Auth0 Dashboard","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fmanage-dashboard-access\u002Fconfigure-single-sign-on-for-auth0-dashboard"}]}]},{"title":"Plan and Design","description":"Learn about Auth0 flows and architecture so you can make informed decisions about your Auth0 implementation.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Authentication and Authorization Flows","description":"Explore the different flows of information that drive authentication and authorization.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow","showCards":true,"children":[{"title":"Which OAuth 2.0 Flow Should I Use?","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fwhich-oauth-2-0-flow-should-i-use"},{"title":"Authorization Code Flow","description":"Describes the Authorization Code Grant from OAuth 2.0","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow","showCards":true,"children":[{"title":"Add Login Using the Authorization Code Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fadd-login-auth-code-flow"},{"title":"Call Your API Using the Authorization Code Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fcall-your-api-using-the-authorization-code-flow"},{"title":"Authorization Code Flow with Rich Authorization Requests (RAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fauthorization-code-flow-with-rar"},{"title":"Authorization Code Flow with Pushed Authorization Requests (PAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fauthorization-code-flow-with-par"},{"title":"Authorization Code Flow with JWT-Secured Authorization Requests (JAR)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fauthorization-code-flow-with-jar"},{"title":"Authorization Code Flow with PAR and JAR","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow\u002Fauthorization-code-flow-with-par-and-jar"}]},{"title":"Authorization Code Flow with Proof Key for Code Exchange","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow-with-pkce","showCards":true,"children":[{"title":"Add Login Using the Authorization Code Flow with PKCE","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow-with-pkce\u002Fadd-login-using-the-authorization-code-flow-with-pkce"},{"title":"Call Your API Using the Authorization Code Flow with PKCE","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthorization-code-flow-with-pkce\u002Fcall-your-api-using-the-authorization-code-flow-with-pkce"}]},{"title":"Client Credentials Flow","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fclient-credentials-flow","showCards":true,"children":[{"title":"Call Your API Using the Client Credentials Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fclient-credentials-flow\u002Fcall-your-api-using-the-client-credentials-flow"},{"title":"Customize Tokens Using Hooks with Client Credentials Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fclient-credentials-flow\u002Fcustomize-tokens-using-hooks-with-client-credentials-flow"}]},{"title":"Device Authorization Flow","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fdevice-authorization-flow","showCards":true,"children":[{"title":"Call Your API Using the Device Authorization Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fdevice-authorization-flow\u002Fcall-your-api-using-the-device-authorization-flow"},{"title":"Mobile Device Login Flow Best Practices","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fdevice-authorization-flow\u002Fmobile-device-login-flow-best-practices"}]},{"title":"Implicit Flow with Form Post","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fimplicit-flow-with-form-post","showCards":true,"children":[{"title":"Mitigate Replay Attacks When Using the Implicit Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fimplicit-flow-with-form-post\u002Fmitigate-replay-attacks-when-using-the-implicit-flow"},{"title":"Add Login Using the Implicit Flow with Form Post","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fimplicit-flow-with-form-post\u002Fadd-login-using-the-implicit-flow-with-form-post"}]},{"title":"Hybrid Flow","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fhybrid-flow","showCards":true,"children":[{"title":"Call Your API Using the Hybrid Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fhybrid-flow\u002Fcall-api-hybrid-flow"}]},{"title":"Resource Owner Password Flow","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fresource-owner-password-flow","showCards":true,"children":[{"title":"Call Your API Using Resource Owner Password Flow","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fresource-owner-password-flow\u002Fcall-your-api-using-resource-owner-password-flow"},{"title":"Avoid Common Issues with Resource Owner Password Flow and Attack Protection","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fresource-owner-password-flow\u002Favoid-common-issues-with-resource-owner-password-flow-and-attack-protection"}]},{"title":"Authenticate with Private Key JWT","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthenticate-with-private-key-jwt"},{"title":"Authenticate with mTLS","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fauthenticate-with-mtls"},{"title":"Client Credentials Exchange","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fclient-credentials-exchange"}]},{"title":"Architecture Scenarios","description":"Read about real-world customer implementations of Auth0.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios","showCards":true,"children":[{"title":"Business to Consumer","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer","showCards":true,"children":[{"title":"Architecture (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Farchitecture"},{"title":"Provisioning (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fprovisioning"},{"title":"Authentication (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fauthentication"},{"title":"Branding (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fbranding"},{"title":"Deployment Automation (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fdeployment"},{"title":"Quality Assurance (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fquality-assurance"},{"title":"Profile Management (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fprofile-management"},{"title":"Authorization (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Fauthorization"},{"title":"Logout (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flogout"},{"title":"Operations (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Foperations"},{"title":"Launch Preparation","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch","showCards":true,"children":[{"title":"Tenant Check (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Ftenant-check"},{"title":"Testing Complete (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Ftesting"},{"title":"Operations Readiness (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Foperations-readiness"},{"title":"Compliance Readiness (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Fcompliance-readiness"},{"title":"Support Readiness (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Fsupport-readiness"},{"title":"Launch Day Preparation (B2C)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-consumer\u002Flaunch\u002Flaunch-day"}]}]},{"title":"Business to Business","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business","showCards":true,"children":[{"title":"Architecture (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Farchitecture"},{"title":"Provisioning (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fprovisioning"},{"title":"Authentication (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fauthentication"},{"title":"Branding (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fbranding"},{"title":"Deployment Automation (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fdeployment"},{"title":"Quality Assurance (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fquality-assurance"},{"title":"Profile Management (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fprofile-management"},{"title":"Authorization (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Fauthorization"},{"title":"Logout (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flogout"},{"title":"Operations (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Foperations"},{"title":"Launch Preparation (B2B)","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch","showCards":true,"children":[{"title":"Tenant Check (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Ftenant-check"},{"title":"Testing Complete (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Ftesting"},{"title":"Operations Readiness (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Foperations-readiness"},{"title":"Compliance Readiness (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Fcompliance-readiness"},{"title":"Support Readiness (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Fsupport-readiness"},{"title":"Launch Day Preparation (B2B)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fbusiness-to-business\u002Flaunch\u002Flaunch-day"}]}]},{"title":"Business to Employees","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fb2e"},{"title":"Multiple Organization Architecture","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture","showCards":true,"children":[{"title":"Single Identity Provider Organizations","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations","showCards":true,"children":[{"title":"Single Identity Provider: Provisioning","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Fprovisioning"},{"title":"Single Identity Provider: Authentication","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Fauthentication"},{"title":"Single Identity Provider: Branding","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Fbranding"},{"title":"Single Identity Provider: Authorization","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Fauthorization"},{"title":"Single Identity Provider: Profile Management","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Fprofile-management"},{"title":"Single Identity Provider: Logout","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fsingle-identity-provider-organizations\u002Flogout"}]},{"title":"Multiple Identity Provider Organizations","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmultiple-organization-architecture\u002Fmultiple-idp-orgs"}]},{"title":"SSO for Regular Web Apps","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps","showCards":true,"children":[{"title":"Solution Overview (Web Apps + SSO)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps\u002Fpart-1"},{"title":"Auth0 Configuration (Web Apps + SSO)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps\u002Fpart-2"},{"title":"Application Implementation (Web Apps + SSO)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps\u002Fpart-3"},{"title":"ASP.NET Core Implementation (Web Apps + SSO)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps\u002Fimplementation-aspnetcore"},{"title":"Conclusion (Web Apps + SSO)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fsso-for-regular-web-apps\u002Fpart-4"}]},{"title":"Server Application + API","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api","showCards":true,"children":[{"title":"Solution Overview (Server Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fpart-1"},{"title":"Auth0 Configuration (Server Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fpart-2"},{"title":"Application Implementation (Server Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fpart-3"},{"title":"Server Apps + API: Node.js Implementation for the API","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fapi-implementation-nodejs"},{"title":"Server Apps + API: Python Implementation for the Cron Job","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fcron-implementation-python"},{"title":"Conclusion (Server Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fserver-application-api\u002Fpart-4"}]},{"title":"SPA + API","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api","showCards":true,"children":[{"title":"Solution Overview (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fpart-1"},{"title":"Auth0 Configuration (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fpart-2"},{"title":"API and SPA Configuration (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fpart-3"},{"title":"SPA Angular 2 Implementation (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fspa-implementation-angular2"},{"title":"Node.js API Implementation (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fapi-implementation-nodejs"},{"title":"Conclusion (SPAs + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fspa-api\u002Fpart-4"}]},{"title":"Mobile + API","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api","showCards":true,"children":[{"title":"Solution Overview (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fpart-1"},{"title":"Auth0 Configuration (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fpart-2"},{"title":"API and Mobile Configuration (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fpart-3"},{"title":"Android Mobile Application Implementation (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fmobile-implementation-android"},{"title":"Node.js API Implementation (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fapi-implementation-nodejs"},{"title":"Conclusion (Mobile Apps + API)","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fmobile-api\u002Fpart-4"}]},{"title":"Implementation Planning Checklists","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fchecklists"},{"title":"Implementation Resources","type":"article","url":"\u002Fdocs\u002Fget-started\u002Farchitecture-scenarios\u002Fimplementation-resources"}]},{"title":"Professional Services","description":"Get personalized help deploying and maintaining solutions from Auth0 specialists.","type":"navigationItem","url":"\u002Fdocs\u002Fget-started\u002Fprofessional-services","showCards":true,"children":[{"title":"Professional Services: Discover and Design","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fprofessional-services\u002Fdiscover-design"},{"title":"Professional Services: Implement","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fprofessional-services\u002Fimplement"},{"title":"Professional Services: Maintain and Improve","type":"article","url":"\u002Fdocs\u002Fget-started\u002Fprofessional-services\u002Fmaintain-improve"}]}]}]},{"title":"Authenticate","description":"Define how your applications and APIs verify the identity of a user or device.","type":"navigationSection","url":"\u002Fdocs\u002Fauthenticate","icon":"IdenticonAuthenticationA","children":[{"title":"Add Login","description":"Implement Auth0 Universal Login (or an alternative) to control access to your applications.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Login","description":"Choose from a variety of user login options.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin","showCards":true,"children":[{"title":"Auth0 Universal Login","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login","showCards":true,"children":[{"title":"Universal Login vs. Classic Login","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Funiversal-login-vs-classic-login","showCards":true,"children":[{"title":"Universal Login Experience","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Funiversal-login-vs-classic-login\u002Funiversal-experience"},{"title":"Classic Login Experience","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Funiversal-login-vs-classic-login\u002Fclassic-experience"}]},{"title":"Passwordless Login","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Fpasswordless-login","showCards":true,"children":[{"title":"Configure WebAuthn with Device Biometrics for Passwordless Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Fpasswordless-login\u002Fwebauthn-device-biometrics"},{"title":"Configure Email or SMS for Passwordless Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Fpasswordless-login\u002Femail-or-sms"}]},{"title":"Configure Identifier First Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Fidentifier-first"},{"title":"Configure Default Login Routes","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Fconfigure-default-login-routes"},{"title":"Default Auth0 Error Page","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login\u002Ferror-pages"}]},{"title":"Centralized Universal Login vs. Embedded Login","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Funiversal-vs-embedded-login"},{"title":"Embedded Login","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fembedded-login"},{"title":"Native Login","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fnative-login"},{"title":"Cross-Origin Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fcross-origin-authentication"},{"title":"Configure Silent Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fconfigure-silent-authentication"},{"title":"Redirect Users","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fredirect-users-after-login"},{"title":"Force Reauthentication in OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fmax-age-reauthentication"},{"title":"Logout","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout","showCards":true,"children":[{"title":"Back-Channel Logout","description":"Describes OIDC back-channel logout workflow and how to configure for your Auth0 services.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Fback-channel-logout","showCards":true,"children":[{"title":"Configure OIDC Back-Channel Logout","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Fback-channel-logout\u002Fconfigure-back-channel-logout"},{"title":"OIDC Back-Channel Logout Initiators","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Fback-channel-logout\u002Foidc-back-channel-logout-initiators"}]},{"title":"Log Users Out of Applications","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Flog-users-out-of-applications"},{"title":"Log Users Out of Auth0 with OIDC Endpoint","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Flog-users-out-of-auth0"},{"title":"Log Users Out of Identity Providers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Flog-users-out-of-idps"},{"title":"Log Users Out of SAML Identity Providers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Flog-users-out-of-saml-idps"},{"title":"Redirect Users with Alternative Logout","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Flogout\u002Fredirect-users-after-logout"}]},{"title":"OIDC-Conformant Authentication","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication","showCards":true,"children":[{"title":"Access Tokens with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-access-tokens"},{"title":"Authorization Code Flow with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-auth-code-flow"},{"title":"Client Credentials Flow with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-client-credentials-flow"},{"title":"Delegation with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-delegation"},{"title":"External APIs with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-apis"},{"title":"Implicit Flow with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-implicit-flow"},{"title":"Refresh Tokens with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-refresh-tokens"},{"title":"Resource Owner Password Flow with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-rop-flow"},{"title":"Single Sign-On with OIDC","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Foidc-conformant-authentication\u002Foidc-adoption-sso"}]}]},{"title":"Single Sign-On","description":"Enable users to log in to one application and automatically authenticate in other applications.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on","showCards":true,"children":[{"title":"Service-Provider-Initiated Single Sign-On","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Finbound-single-sign-on"},{"title":"Identity-Provider-Initiated Single Sign-On","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on","showCards":false,"children":[{"title":"Configure Auth0 as SAML Identity Provider","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider","showCards":false,"children":[{"title":"Configure Amazon Web Services as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-saml2-web-app-addon-for-aws"},{"title":"Configure Atlassian as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-atlassian"},{"title":"Configure Cisco WebEx as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-cisco-webex"},{"title":"Configure Datadog as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-datadog"},{"title":"Configure Egencia as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-egencia"},{"title":"Configure Freshdesk as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-freshdesk"},{"title":"Configure GitHub Enterprise Cloud as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-saml2-web-app-addon-for-github-enterprise-cloud"},{"title":"Configure GitHub Enterprise Server as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-saml2-web-app-addon-for-github-enterprise-server"},{"title":"Configure Google Workspace as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-idp-for-google-g-suite"},{"title":"Configure Heroku as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-saml2-web-app-addon-for-heroku"},{"title":"Configure Hosted Graphite as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-hosted-graphite"},{"title":"Configure Litmos as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-litmos"},{"title":"Configure Oracle Eloqua Marketing Cloud as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-saml2-addon-eloqua"},{"title":"Configure Pluralsight as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-pluralsight"},{"title":"Configure Sprout Video as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-sprout-video"},{"title":"Configure Tableau Online as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-tableau-online"},{"title":"Configure Tableau Server as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-tableau-server"},{"title":"Configure Workday as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-workday"},{"title":"Configure Workpath as SAML Service Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Foutbound-single-sign-on\u002Fconfigure-auth0-saml-identity-provider\u002Fconfigure-auth0-as-identity-provider-for-workpath"}]}]},{"title":"API Endpoints for Single Sign-On","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Fapi-endpoints-for-single-sign-on"},{"title":"Okta Access Gateway","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on\u002Fokta-access-gateway"}]},{"title":"Passwordless","description":"Let users enter mobile phone numbers or email addresses and receive a one-time code or link to log in without a password.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless","showCards":true,"children":[{"title":"Authentication Methods","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fauthentication-methods","showCards":true,"children":[{"title":"Passwordless Authentication with Email","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fauthentication-methods\u002Femail-otp"},{"title":"Passwordless Authentication with Magic Links","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fauthentication-methods\u002Femail-magic-link"},{"title":"Passwordless Authentication with SMS","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fauthentication-methods\u002Fsms-otp"},{"title":"Set Up Custom SMS Gateway for Passwordless Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fauthentication-methods\u002Fuse-sms-gateway-passwordless"}]},{"title":"Implement Login","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login","showCards":true,"children":[{"title":"Passwordless Authentication with Universal Login","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Funiversal-login"},{"title":"Embedded Login","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Fembedded-login","showCards":true,"children":[{"title":"Using Passwordless APIs","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Fembedded-login\u002Frelevant-api-endpoints"},{"title":"Embedded Passwordless Authentication for SPAs","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Fembedded-login\u002Fspa"},{"title":"Embedded Passwordless Login in Native Applications","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Fembedded-login\u002Fnative"},{"title":"Embedded Passwordless Login in Regular Web Applications","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fimplement-login\u002Fembedded-login\u002Fwebapps"}]}]},{"title":"Passwordless with Universal Login","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fpasswordless-with-universal-login"},{"title":"Passwordless Connection Limitations","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fpasswordless-connection-limitations"},{"title":"Passwordless Connections Best Practices","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fbest-practices"},{"title":"Sample Use Cases - Rules with Passwordless Authentication","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless\u002Fsample-use-cases-rules"}]}]},{"title":"Provision Users","description":"Source users from social identity providers (such as Facebook or SalesForce), enterprise user stores (such as Active Directory or Google Workspace), a custom database, and more.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Identity Providers","description":"Set up sources of user accounts to authenticate your applications and APIs.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers","showCards":true,"children":[{"title":"Social Identity Providers","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers","showCards":true,"children":[{"title":"Connect Apps to Generic OAuth2 Authorization Servers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Foauth2"},{"title":"Add Sign In with Apple to Native iOS Apps","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Fapple-native"},{"title":"Add Facebook Login to Native Apps","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Ffacebook-native"},{"title":"Handle Declined Authorization Permissions","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Freprompt-permissions"},{"title":"Test Social Connections with Auth0 Developer Keys","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Fdevkeys"},{"title":"Create a Custom Social Connection with TikTok","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fsocial-identity-providers\u002Ftiktok"}]},{"title":"Enterprise Identity Providers","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers","showCards":true,"children":[{"title":"Connect Your App to Active Directory using LDAP","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap","showCards":true,"children":[{"title":"AD\u002FLDAP Connector","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector","showCards":true,"children":[{"title":"AD\u002FLDAP Connector System Requirements","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-connector-requirements"},{"title":"Install and Configure AD\u002FLDAP Connector","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Finstall-configure-ad-ldap-connector"},{"title":"Configure AD\u002FLDAP Connector Authentication with Client Certificates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fconfigure-ad-ldap-connector-client-certificates"},{"title":"Configure AD\u002FLDAP Connector Authentication with Kerberos","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fconfigure-ad-ldap-connector-with-kerberos"},{"title":"AD\u002FLDAP Connector Configuration File Schema","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-connector-config-file-schema"},{"title":"Import and Export AD\u002FLDAP Connector Configurations","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fimport-export-ad-ldap-connector-configs"},{"title":"Map AD\u002FLDAP Profile Attributes to Auth0 User Profile","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fmap-ad-ldap-profile-attributes-to-auth0"},{"title":"Point AD\u002FLDAP Connector to Auth0 Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-connector-to-auth0"},{"title":"Update AD\u002FLDAP Connectors","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fupdate-ad-ldap-connectors"},{"title":"Disable AD\u002FLDAP Connection Credential Caching","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fdisable-credential-caching"},{"title":"Deploy AD\u002FLDAP Connectors for High Availability Environments","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-high-availability"},{"title":"Set Up AD\u002FLDAP Connector Test Environment","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-connector-test-environment"},{"title":"Monitor AD\u002FLDAP Connector with System Center Operations Manager","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Factive-directory-ldap\u002Fad-ldap-connector\u002Fad-ldap-connector-scom"}]}]},{"title":"Connect Your App to ADFS","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fadfs"},{"title":"Connect Your Native App to Microsoft Azure Active Directory Using Resource Owner Flow","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fazure-active-directory-native"},{"title":"Connect Your App to Google Workspace","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fgoogle-apps"},{"title":"Connect to OpenID Connect Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Foidc"},{"title":"Connect Your Auth0 Application with Okta Workforce Enterprise Connection","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fokta"},{"title":"Configure PKCE and Claim Mapping for OIDC Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fconfigure-pkce-claim-mapping-for-oidc"},{"title":"Connect Your PingFederate Server to Auth0","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fping-federate"},{"title":"Connect Your App to SAML Identity Providers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fsaml"},{"title":"Connect Your App to Microsoft Azure Active Directory","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fazure-active-directory\u002Fv2"},{"title":"Choose a Connection Type for Azure AD","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fchoose-a-connection-type-for-azure-ad"},{"title":"Email Verification for Azure AD and ADFS","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fazuread-adfs-email-verification"},{"title":"Enable Enterprise Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Fenable-enterprise-connections"},{"title":"Test Enterprise Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fenterprise-identity-providers\u002Ftest-enterprise-connections"}]},{"title":"Legal Identity Providers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Flegal"},{"title":"View Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fview-connections"},{"title":"Test Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Ftest-connections"},{"title":"Locate the Connection ID or Name","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Flocate-the-connection-id"},{"title":"Retrieve Connection Options","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fretrieve-connection-options"},{"title":"Pass Parameters to Identity Providers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fpass-parameters-to-idps"},{"title":"Promote Connections to Domain Level","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fpromote-connections-to-domain-level"},{"title":"Call an Identity Provider API","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fcalling-an-external-idp-api"},{"title":"Add Scopes\u002FPermissions to Call Identity Provider APIs","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fidentity-providers\u002Fadding-scopes-for-an-external-idp"}]},{"title":"Database Connections","description":"Authenticate users with an email\u002Fusername and password and save their credentials in an Auth0-provided user store or in your own database.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections","showCards":true,"children":[{"title":"Auth0 User Store","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fauth0-user-store"},{"title":"Your User Store","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db","showCards":true,"children":[{"title":"Authenticate with Your Own User Store","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Foverview-custom-db-connections"},{"title":"Create Custom Database Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcreate-db-connection"},{"title":"Test Custom Database Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftest-custom-database-connections"},{"title":"Troubleshoot Custom Databases","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ferror-handling"},{"title":"Action Script Templates","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates","showCards":true,"children":[{"title":"Change Password Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fchange-password"},{"title":"Create Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fcreate"},{"title":"Delete Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fdelete"},{"title":"Get User Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fget-user"},{"title":"Login Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Flogin"},{"title":"Verify Script Templates","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fverify"},{"title":"Change Email Script Template","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Ftemplates\u002Fchange-email"}]},{"title":"Custom Database and Action Script Best Practices","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcustom-database-connections-scripts","showCards":true,"children":[{"title":"Custom Database Connection Anatomy Best Practices","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcustom-database-connections-scripts\u002Fanatomy"},{"title":"Custom Database Action Script Environment Best Practices","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcustom-database-connections-scripts\u002Fenvironment"},{"title":"Custom Database Action Script Execution Best Practices","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcustom-database-connections-scripts\u002Fexecution"},{"title":"Custom Database Connection Security Best Practices","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fcustom-db\u002Fcustom-database-connections-scripts\u002Fconnection-security"}]}]},{"title":"Passkeys","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpasskeys","showCards":true,"children":[{"title":"Configure Passkey Policy","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpasskeys\u002Fconfigure-passkey-policy"},{"title":"Monitor Passkey Events in Tenant Logs","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpasskeys\u002Fmonitor-passkey-events-in-tenant-logs"}]},{"title":"Password Options in Auth0 Database Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpassword-options"},{"title":"Password Strength in Auth0 Database Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpassword-strength"},{"title":"Change Users' Passwords","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fpassword-change"},{"title":"Adding Username for Database Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Frequire-username"},{"title":"Login Script for IBM DB2","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fdb2-script"},{"title":"Activate and Configure Attributes for Flexible Identifiers","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Factivate-and-configure-attributes-for-flexible-identifiers"},{"title":"Flexible Identifiers and Attributes","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fdatabase-connections\u002Fflexible-identifiers-and-attributes"}]},{"title":"Enterprise Connections","description":"Authenticate users with external, federated identity providers such as Azure AD, Google Workspace, and PingFederate.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fenterprise-connections","showCards":true,"children":[{"title":"Self-Service Single Sign-On","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fenterprise-connections\u002Fself-service-SSO"}]},{"title":"Protocols","description":"Easily implement open industry-standard protocols like OAuth 2.0, SAML, and LDAP for authentication and authorization.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols","showCards":true,"children":[{"title":"SAML","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml","showCards":true,"children":[{"title":"SAML Identity Provider Configuration Settings","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-identity-provider-configuration-settings"},{"title":"SAML Configuration","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-configuration","showCards":true,"children":[{"title":"Customize SAML Assertions","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-configuration\u002Fcustomize-saml-assertions"},{"title":"Deprovision Users in SAML Integrations","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-configuration\u002Fdeprovision-users-in-saml-integrations"},{"title":"Test SAML SSO with Auth0 as Service Provider and Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-configuration\u002Fconfigure-auth0-as-service-and-identity-provider"},{"title":"Map SAML Attributes with Auth0 as IdP\u002FSAML Add-on","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-configuration\u002Fsaml-attribute-mapping-examples"}]},{"title":"SAML Single Sign-On Integrations","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations","showCards":true,"children":[{"title":"Configure SAML Identity Provider-Initiated Single Sign-On","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fidentity-provider-initiated-single-sign-on"},{"title":"Configure IdP-Initiated SAML Sign-on to OIDC Apps","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-idp-initiated-saml-sign-on-to-oidc-apps"},{"title":"Configure Auth0 as SAML Service Provider","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider","showCards":true,"children":[{"title":"Configure ADFS as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-adfs-saml-connections"},{"title":"Configure Okta as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-okta-as-saml-identity-provider"},{"title":"Configure OneLogin as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-onelogin-as-saml-identity-provider"},{"title":"Configure PingFederate as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-pingfederate-as-saml-identity-provider"},{"title":"Configure Salesforce as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-salesforce-as-saml-identity-provider"},{"title":"Configure SiteMinder as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-siteminder-as-saml-identity-provider"},{"title":"Configure SSOCircle as SAML Identity Provider","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fconfigure-auth0-saml-service-provider\u002Fconfigure-ssocircle-as-saml-identity-provider"}]},{"title":"Enable SAML2 Web App Addon","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fenable-saml2-web-app-addon"},{"title":"Sign and Encrypt SAML Requests","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fsign-and-encrypt-saml-requests"},{"title":"Work with Certificates and Keys as Strings","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml\u002Fsaml-sso-integrations\u002Fwork-with-certificates-and-keys-as-strings"}]}]},{"title":"OpenID Connect Protocol","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fopenid-connect-protocol"},{"title":"OAuth 2.0 Authorization Framework","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Foauth"},{"title":"Web Services Federation Protocol","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fws-fed-protocol"},{"title":"Lightweight Directory Access Protocol","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fldap-protocol"},{"title":"System for Cross-domain Identity Management (SCIM)","description":"Articles associated with System for Cross-domain Identity Management (SCIM)","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim","showCards":true,"children":[{"title":"Configure Inbound SCIM","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Fconfigure-inbound-scim"},{"title":"Inbound SCIM for Azure AD SAML Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Finbound-scim-for-azure-ad-saml-connections"},{"title":"Inbound SCIM for Older Azure AD Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Finbound-scim-for-older-azure-ad-connections"},{"title":"Inbound SCIM for New Azure AD Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Finbound-scim-for-new-azure-ad-connections"},{"title":"Inbound SCIM for Okta Workforce Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Finbound-scim-for-okta-workforce-connections"},{"title":"Configure Inbound SCIM for Identity Providers using SAML or OpenID","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Fconfigure-inbound-scim-for-identity-providers-using-saml-or-openid"},{"title":"Inbound SCIM for Okta Workforce SAML Connections","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Finbound-scim-for-okta-workforce-saml-connections"},{"title":"Manage an Inbound SCIM Deployment with the Management API","type":"article","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fscim\u002Fmanage-an-inbound-scim-deployment-with-the-management-api"}]}]},{"title":"Connection Settings Best Practices","description":"Review best practices when configuring social and database connections.","type":"navigationItem","url":"\u002Fdocs\u002Fauthenticate\u002Fconnection-settings-best-practices","showCards":true}]}]},{"title":"Manage Users","description":"Store and manage custom details about your users.","type":"navigationSection","url":"\u002Fdocs\u002Fmanage-users","icon":"IdenticonUserManagement","children":[{"title":"Manage Users","description":"Import, group, and administer users and control their access.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"User Accounts","description":"Migrate, find, organize, and administer user accounts and user data.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts","showCards":true,"children":[{"title":"Manage Users Using the Dashboard","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmanage-users-using-the-dashboard"},{"title":"Manage Users Using the Management API","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmanage-users-using-the-management-api"},{"title":"User Profiles","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles","showCards":true,"children":[{"title":"User Profile Structure","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fuser-profile-structure"},{"title":"Sample User Profiles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fsample-user-profiles"},{"title":"Normalized User Profiles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fnormalized-user-profiles"},{"title":"Normalized User Profile Schema","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fnormalized-user-profile-schema"},{"title":"Understand How Progressive Profiling Works","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fprogressive-profiling"},{"title":"Root Attributes","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Froot-attributes","showCards":true,"children":[{"title":"Set Root Attributes During User Import","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Froot-attributes\u002Fset-root-attributes-during-user-import"},{"title":"Set Root Attributes During User Signup","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Froot-attributes\u002Fset-root-attributes-during-user-sign-up"},{"title":"Update Root Attributes for Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Froot-attributes\u002Fupdate-root-attributes-for-users"}]},{"title":"Use Verified Email in User Profiles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fverified-email-usage"},{"title":"Configure Identity Provider Connection for User Profile Updates","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fconfigure-connection-sync-with-auth0"},{"title":"Update User Profiles Using Your Database","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-profiles\u002Fupdate-user-profiles-using-your-database"}]},{"title":"Metadata","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata","showCards":true,"children":[{"title":"Metadata Field Names and Data Types","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fmetadata-fields-data"},{"title":"Manage Metadata Using the Management API","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fmanage-metadata-api"},{"title":"Manage Metadata with Rules","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fmanage-metadata-rules"},{"title":"Manage Metadata with Lock","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fmanage-metadata-lock"},{"title":"Configure Application Metadata","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fconfigure-application-metadata"},{"title":"Manage User Metadata with the post-login Action Trigger","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmetadata\u002Fmanage-user-metadata"}]},{"title":"Verify Emails using Auth0","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fverify-emails"},{"title":"User Account Linking","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-account-linking","showCards":true,"children":[{"title":"Link User Accounts","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-account-linking\u002Flink-user-accounts"},{"title":"Unlink User Accounts","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-account-linking\u002Funlink-user-accounts"},{"title":"User-Initiated Account Linking: Client-Side Implementation","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-account-linking\u002Fuser-initiated-account-linking-client-side-implementation"},{"title":"User Account Linking: Server-Side Implementation","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fuser-account-linking\u002Fsuggested-account-linking-server-side-implementation"}]},{"title":"Create Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fcreate-users"},{"title":"Identify Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fidentify-users"},{"title":"View User Details","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fview-user-details"},{"title":"Change User Pictures","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fchange-user-picture"},{"title":"Manage User Access to Applications","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fmanage-user-access-to-applications"},{"title":"Deny User Access to an API with Rules","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fdeny-api-access"},{"title":"Block and Unblock Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fblock-and-unblock-users"},{"title":"Unlink Devices from Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Funlink-devices-from-users"},{"title":"Delete Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fdelete-users"},{"title":"Get User Information on Unbounce Landing Pages","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fget-user-information-on-unbounce-landing-pages"},{"title":"Resend Verification Emails","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-accounts\u002Fresend-verification-emails"}]},{"title":"User Migration","description":"Import users from external applications using custom database connections, the Auth0 Management API, or the User Import\u002FExport extension.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration","showCards":true,"children":[{"title":"Configure Automatic Migration from Your Database","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fconfigure-automatic-migration-from-your-database"},{"title":"Bulk User Imports","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fbulk-user-imports"},{"title":"Bulk User Import Database Schema and Examples","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fbulk-user-import-database-schema-and-examples"},{"title":"Bulk User Exports","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fbulk-user-exports"},{"title":"User Import \u002F Export Extension","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fuser-import-export-extension"},{"title":"User Migration Scenarios","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-migration\u002Fuser-migration-scenarios"}]},{"title":"User Search","description":"Retrieve user profile details using the Auth0 Management API.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search","showCards":true,"children":[{"title":"Retrieve Users with the Get Users Endpoint","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fretrieve-users-with-get-users-endpoint"},{"title":"Retrieve Users with Get Users by Email Endpoint","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fretrieve-users-with-get-users-by-email-endpoint"},{"title":"Retrieve Users with the Get Users by ID Endpoint","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fretrieve-users-with-get-users-by-id-endpoint"},{"title":"Sort Search Results","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fsort-search-results"},{"title":"View Search Results by Page","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fview-search-results-by-page"},{"title":"User Search Query Syntax","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fuser-search-query-syntax"},{"title":"User Search Best Practices","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fuser-search\u002Fuser-search-best-practices"}]},{"title":"Organizations","description":"Manage your partners and customers and control the ways that end-users access your applications.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations","showCards":true,"children":[{"title":"Understand How Auth0 Organizations Work","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-overview"},{"title":"Create Your First Organization","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fcreate-first-organization"},{"title":"Login Flows for Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Flogin-flows-for-organizations"},{"title":"Custom Development with Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fcustom-development"},{"title":"Work with Tokens and Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fusing-tokens"},{"title":"Configure Organizations","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations","showCards":true,"children":[{"title":"Create Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fcreate-organizations"},{"title":"Delete Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fdelete-organizations"},{"title":"Use Organization Names in Authentication API","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fuse-org-name-authentication-api"},{"title":"Define Organization Behavior","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fdefine-organization-behavior"},{"title":"Enable Organization Connections","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fenable-connections"},{"title":"Disable Organization Connections","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fdisable-connections"},{"title":"Invite Organization Members","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Finvite-members"},{"title":"Send Organization Membership Invitations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fsend-membership-invitations"},{"title":"Grant Just-In-Time Membership to an Organization Connection","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fgrant-just-in-time-membership"},{"title":"Assign Members to an Organization","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fassign-members"},{"title":"Remove Members From Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fremove-members"},{"title":"Add Roles to Organization Members","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fadd-member-roles"},{"title":"Remove Roles from Organization Members","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fremove-member-roles"},{"title":"Retrieve Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fretrieve-organizations"},{"title":"Search for Organizations","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fsearch-for-organizations"},{"title":"Retrieve Organization Connections","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fretrieve-connections"},{"title":"Retrieve Organization Members","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fretrieve-members"},{"title":"Search Organization Members","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fsearch-organization-members"},{"title":"Retrieve User's Organization Memberships","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fretrieve-user-membership"},{"title":"Retrieve Member Roles for an Organization","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Fconfigure-organizations\u002Fretrieve-member-roles"}]},{"title":"Machine-to-Machine (M2M) Access for Organizations","description":"Learn how to set up machine-to-machine access for Organizations. ","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-for-m2m-applications","showCards":false,"children":[{"title":"Configure Your Application For M2M Access","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-for-m2m-applications\u002Fconfigure-your-application-for-m2m-access"},{"title":"Authorize M2M Access","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-for-m2m-applications\u002Fauthorize-m2m-access"},{"title":"Revoke M2M Access","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-for-m2m-applications\u002Frevoke-m2m-access"},{"title":"Audit M2M Access","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations\u002Forganizations-for-m2m-applications\u002Faudit-m2m-access"}]}]}]},{"title":"Manage Access","description":"Control who can interact within your applications.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Access Control","description":"Control users’ access to applications and information based on roles.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control","showCards":true,"children":[{"title":"Role-Based Access Control","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Frbac"},{"title":"Authorization Policies","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fauthorization-policies"},{"title":"Rules for Authorization Policies","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Frules-for-authorization-policies"},{"title":"Sample Use Cases: Role-Based Access Control","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fsample-use-cases-role-based-access-control"},{"title":"Sample Use Cases: Actions with Authorization","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fsample-use-cases-actions-with-authorization"},{"title":"Sample Use Cases: Rules with Authorization","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fsample-use-cases-rules-with-authorization"},{"title":"Authorization Core vs. Authorization Extension","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fauthorization-core-vs-authorization-extension"},{"title":"Configure Core RBAC","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac","showCards":true,"children":[{"title":"Manage Role-Based Access Control Roles","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles","showCards":true,"children":[{"title":"View Users Assigned to Roles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fview-users-assigned-to-roles"},{"title":"View Role Permissions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fview-role-permissions"},{"title":"Remove Permissions from Roles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fremove-permissions-from-roles"},{"title":"Edit Role Definitions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fedit-role-definitions"},{"title":"Delete Roles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fdelete-roles"},{"title":"Create Roles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fcreate-roles"},{"title":"Add Permissions to Roles","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Froles\u002Fadd-permissions-to-roles"}]},{"title":"Manage Role-Based Access Control Users","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users","showCards":true,"children":[{"title":"View Roles Assigned to Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fview-user-roles"},{"title":"View User Permissions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fview-user-permissions"},{"title":"Remove Roles from Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fremove-roles-from-users"},{"title":"Remove Permissions from Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fremove-permissions-from-users"},{"title":"Assign Roles to Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fassign-roles-to-users"},{"title":"Assign Permissions to Users","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Frbac-users\u002Fassign-permissions-to-users"}]},{"title":"Manage Role-Based Access Control Permissions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Fmanage-permissions"},{"title":"Enable Role-Based Access Control for APIs","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Fconfigure-core-rbac\u002Fenable-role-based-access-control-for-apis"}]}]},{"title":"Sessions","description":"Define groups of interactions (such as page views, events, social interactions, and e-commerce transactions) between a user and an application that take place within a given timeframe.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions","showCards":true,"children":[{"title":"Session Layers","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fsession-layers"},{"title":"Session Lifetime Limits","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fsession-lifetime-limits"},{"title":"Configure Session Lifetime Settings","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fconfigure-session-lifetime-settings"},{"title":"Non-Persistent Sessions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fnon-persistent-sessions"},{"title":"Sessions with Actions","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fmanage-sessions-actions"},{"title":"Manage Multi-Site Sessions with Auth0 SDK","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fmanage-multi-site-sessions"},{"title":"Manage User Sessions with Auth0 Management API","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fsessions\u002Fmanage-user-sessions-with-auth0-management-api"}]},{"title":"Cookies","description":"Control how cookies work with your applications.","type":"navigationItem","url":"\u002Fdocs\u002Fmanage-users\u002Fcookies","showCards":true,"children":[{"title":"Authentication API Cookies","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fcookies\u002Fauthentication-api-cookies"},{"title":"Authenticate Single-Page Apps With Cookies","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fcookies\u002Fspa-authenticate-with-cookies"},{"title":"SameSite Cookie Attribute Changes","type":"article","url":"\u002Fdocs\u002Fmanage-users\u002Fcookies\u002Fsamesite-cookie-attribute-changes"}]}]}]},{"title":"Customize","description":"Customize Auth0 using your own branding and extend our functionality to solve your unique identity needs.","type":"navigationSection","url":"\u002Fdocs\u002Fcustomize","icon":"IdenticonCustomize","children":[{"title":"Brand Customization","description":"Seamlessly integrate Auth0 with your own brand and localize the experience for international users.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Customize Login Pages","description":"Customize the Universal Login and Classic Login experiences","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages","showCards":true,"children":[{"title":"Customize Universal Login ","description":"Learn how to customize Universal Login pages","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Funiversal-login","showCards":true,"children":[{"title":"Customize Universal Login Page Themes","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Funiversal-login\u002Fcustomize-themes"},{"title":"Customize Universal Login Page Templates","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Funiversal-login\u002Fcustomize-templates"},{"title":"Customize Universal Login Text Elements","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Funiversal-login\u002Fcustomize-text-elements"},{"title":"Customize Signup and Login Prompts","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Funiversal-login\u002Fcustomize-signup-and-login-prompts"}]},{"title":"Customize Classic Login","description":"Learn how to customize the Classic Login experience","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login","showCards":true,"children":[{"title":"Customize Classic Login Pages","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login\u002Fcustomization-classic"},{"title":"Customize Classic Login Pages with Lock or SDK","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login\u002Fcustomize-with-lock-sdk"},{"title":"Customize Lock Error Messages","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login\u002Fcustomize-lock-error-messages"},{"title":"Customize Classic Password Reset Page","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login\u002Fcustomize-password-reset-page"},{"title":"Classic Login Page Version Control","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fclassic-login\u002Fversion-control"}]},{"title":"Customize Consent Prompts","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fcustomize-consent-prompts"},{"title":"Customize Error Pages","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flogin-pages\u002Fcustom-error-pages"}]},{"title":"Custom Domains","description":"Unify the login experience with your own brand and products.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains","showCards":true,"children":[{"title":"Configure Custom Domains with Auth0-Managed Certificates","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fauth0-managed-certificates"},{"title":"Self-Managed Certificates","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates","showCards":true,"children":[{"title":"Configure Google Cloud Platform with Load Balancing as Reverse Proxy","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Fconfigure-gcp-as-reverse-proxy"},{"title":"Configure Cloudflare as Reverse Proxy","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Fconfigure-cloudflare-for-use-as-reverse-proxy"},{"title":"Configure AWS CloudFront as Reverse Proxy","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Fconfigure-aws-cloudfront-for-use-as-reverse-proxy"},{"title":"Configure Azure CDN as Reverse Proxy","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Fconfigure-azure-cdn-for-use-as-reverse-proxy"},{"title":"Configure Akamai as Reverse Proxy","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Fconfigure-akamai-for-use-as-reverse-proxy"},{"title":"TLS (SSL) Versions and Ciphers","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fself-managed-certificates\u002Ftls-ssl"}]},{"title":"Configure Features to Use Custom Domains","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fcustom-domains\u002Fconfigure-features-to-use-custom-domains"}]},{"title":"Customize Emails","description":"Brand and modify the content and flow of email to end users.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Femail","showCards":true,"children":[{"title":"Customize Email Handling","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fmanage-email-flow"},{"title":"Email Templates","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Femail-templates","showCards":true,"children":[{"title":"Use Liquid Syntax in Email Templates","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Femail-templates\u002Fuse-liquid-syntax-in-email-templates"},{"title":"Email Template Descriptions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Femail-templates\u002Femail-template-descriptions"}]},{"title":"Configure a Custom Email Provider","description":"Learn how to configure a custom email provider. ","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fconfigure-a-custom-email-provider","showCards":false,"children":[{"title":"Action Triggers: custom-email-provider Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fconfigure-a-custom-email-provider\u002Faction-triggers-custom-email-provider-event-object"},{"title":"Action Triggers: custom-email-provider API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fconfigure-a-custom-email-provider\u002Faction-triggers-custom-email-provider-api-object"}]},{"title":"Customize Blocked Account Emails","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fcustomize-blocked-account-emails"},{"title":"Send Email Invitations for Application Signup","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsend-email-invitations-for-application-signup"},{"title":"SMTP Email Providers","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers","showCards":true,"children":[{"title":"Configure Amazon SES as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-amazon-ses-as-external-smtp-email-provider"},{"title":"Configure Azure Communication Services as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-azure-comm-service-as-smtp-email-provider"},{"title":"Configure Mandrill as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-mandrill-as-external-smtp-email-provider"},{"title":"Configure Microsoft 365 Exchange Online as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-365-exchange-as-smtp-email-provider"},{"title":"Configure SendGrid as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-sendgrid-as-external-smtp-email-provider"},{"title":"Configure SparkPost as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-sparkpost-as-external-smtp-email-provider"},{"title":"Configure Mailgun as External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-mailgun-as-external-smtp-email-provider"},{"title":"Configure Custom External SMTP Email Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fsmtp-email-providers\u002Fconfigure-custom-external-smtp-email-provider"}]},{"title":"Configure Test SMTP Email Server","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Fconfigure-test-smtp-email-servers"},{"title":"Troubleshoot Custom Email Provider Delivery Issues","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Femail\u002Ftroubleshoot-custom-email-provider-delivery-issues"}]},{"title":"Customize Phone Messages","description":"Learn how to customize your phone message flows in the Auth0 Dashboard. ","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages","showCards":false,"children":[{"title":"Configure Phone Messaging Providers","description":"Learn how to configure a phone messaging provider. ","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fconfigure-phone-messaging-providers","showCards":true,"children":[{"title":"Configure Twilio as a Phone Messaging Provider","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fconfigure-phone-messaging-providers\u002Fconfigure-twilio-as-a-phone-messaging-provider"},{"title":"Configure a Custom Phone Provider ","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fconfigure-phone-messaging-providers\u002Fconfigure-a-custom-phone-provider"},{"title":"Actions Triggers: custom-phone-provider Event Object ","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fconfigure-phone-messaging-providers\u002Factions-triggers-custom-phone-provider-event-object"},{"title":"Action Triggers: custom-phone-provider API Object ","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fconfigure-phone-messaging-providers\u002Faction-triggers-custom-phone-provider-api-object"}]},{"title":"Customize Phone Templates","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fphone-messages\u002Fcustomize-phone-templates"}]},{"title":"Customize Multi-factor Authentication SMS and Voice Messages","description":"Learn how to customize SMS and voice messages sent by Auth0 during enrollment and verification.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fcustomize-sms-or-voice-messages","showCards":true},{"title":"Internationalization and Localization","description":"Learn how to handle different languages within your Auth0 applications.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization","showCards":true,"children":[{"title":"Universal Login Internationalization","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization\u002Funiversal-login-internationalization"},{"title":"Lock Internationalization","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization\u002Flock-internationalization"},{"title":"Lock.swift Internationalization","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization\u002Flock-swift-internationalization"},{"title":"Lock.Android Internationalization","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization\u002Flock-android-internationalization"},{"title":"Customize Translation of Lock Password Options","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Finternationalization-and-localization\u002Fpassword-options-translation"}]}]},{"title":"Code Customization","description":"Create Actions to customize and extend Auth0’s capabilities with custom logic. Or maintain legacy Rules and Hooks. ","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Actions","description":"Customize Auth0 capabilities with secure, tenant-specific, versioned functions that execute at certain points during the Auth0 runtime.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions","showCards":true,"children":[{"title":"Understand How Auth0 Actions Work","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Factions-overview"},{"title":"Write Your First Action","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fwrite-your-first-action"},{"title":"Explore Triggers","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers","showCards":true,"children":[{"title":"Signup and Login Triggers","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers","showCards":true,"children":[{"title":"Login Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Flogin-trigger","showCards":true,"children":[{"title":"Actions Triggers: post-login - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Flogin-trigger\u002Fpost-login-event-object"},{"title":"Actions Triggers: post-login - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Flogin-trigger\u002Fpost-login-api-object"},{"title":"Redirect with Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Flogin-trigger\u002Fredirect-with-actions"},{"title":"Releases","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Flogin-trigger\u002Freleases"}]},{"title":"Pre-user Registration Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpre-user-registration-trigger","showCards":true,"children":[{"title":"Actions Triggers: pre-user-registration - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpre-user-registration-trigger\u002Fpre-user-registration-event-object"},{"title":"Actions Triggers: pre-user-registration - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpre-user-registration-trigger\u002Fpre-user-registration-api-object"}]},{"title":"Post-user Registration Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpost-user-registration-trigger","showCards":true,"children":[{"title":"Actions Triggers: post-user-registration - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpost-user-registration-trigger\u002Fpost-user-registration-event-object"},{"title":"Actions - Triggers - post-user-registration - API object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fsignup-and-login-triggers\u002Fpost-user-registration-trigger\u002Fpost-user-registration-api-object"}]}]},{"title":"MFA Notifications Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmfa-notifications-trigger","showCards":true,"children":[{"title":"Actions Triggers: send-phone-message - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmfa-notifications-trigger\u002Fsend-phone-message-event-object"},{"title":"Actions Triggers: send-phone-message - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmfa-notifications-trigger\u002Fsend-phone-message-api-object"}]},{"title":"Password Reset Triggers","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers","showCards":true,"children":[{"title":"Post-challenge Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-challenge-trigger","showCards":true,"children":[{"title":"Actions Triggers: post-challenge - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-challenge-trigger\u002Fpost-challenge-event-object"},{"title":"Actions Triggers: post-challenge - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-challenge-trigger\u002Fpost-challenge-api-object"}]},{"title":"Post Change Password Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-change-password-trigger","showCards":true,"children":[{"title":"Actions Triggers: post-change-password - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-change-password-trigger\u002Fpost-change-password-event-object"},{"title":"Actions Triggers: post-change-password - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fpassword-reset-triggers\u002Fpost-change-password-trigger\u002Fpost-change-password-api-object"}]}]},{"title":"Machine to Machine Trigger","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmachine-to-machine-trigger","showCards":true,"children":[{"title":"Actions Triggers: credentials-exchange - Event Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmachine-to-machine-trigger\u002Fcredentials-exchange-event-object"},{"title":"Actions Triggers: credentials-exchange - API Object","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fexplore-triggers\u002Fmachine-to-machine-trigger\u002Fcredentials-exchange-api-object"}]}]},{"title":"Action Use Cases","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fuse-cases"},{"title":"Action Coding Guidelines","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Faction-coding-guidelines"},{"title":"Actions Limitations","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Flimitations"},{"title":"Manage Dependencies","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmanage-dependencies"},{"title":"Manage Versions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmanage-versions"},{"title":"Test Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Ftest-actions"},{"title":"Releases","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Freleases"},{"title":"Migrate to Actions","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate","showCards":true,"children":[{"title":"Migrate from Rules to Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate\u002Fmigrate-from-rules-to-actions"},{"title":"Migration tooling","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate\u002Fmigrate-a-rule-to-an-action"},{"title":"Migrate from Hooks to Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate\u002Fmigrate-from-hooks-to-actions"},{"title":"Migrate from Actions Beta to Final","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate\u002Fmigrate-from-actions-beta-to-final"},{"title":"Actions Migration Limitations","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Fmigrate\u002Factions-migration-limitations"}]},{"title":"Templates for Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Factions\u002Factions-templates"}]},{"title":"Forms","description":"Extend your identity flows with additional steps and custom logic with Forms.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fforms","showCards":true,"children":[{"title":"Nodes and components","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fnodes-and-components"},{"title":"Flows","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows","showCards":true,"children":[{"title":"Integrations","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations","showCards":true,"children":[{"title":"Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fauth0"},{"title":"Data verification","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fdata-verification"},{"title":"HTTP Request","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fhttp-request"},{"title":"JSON","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fjson"},{"title":"JSON Web Token","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fjson-web-token"},{"title":"Logic","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Flogic"},{"title":"Mailjet","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fmailjet"},{"title":"SendGrid","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fsendgrid"},{"title":"Telegram","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Ftelegram"},{"title":"Twilio","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Ftwilio"},{"title":"WhatsApp","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fwhatsapp"},{"title":"XML","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fintegrations\u002Fxml"}]},{"title":"Execution and Debugger","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fflows\u002Fflow-execution-and-debugger"}]},{"title":"Variables and helper functions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fvariables"},{"title":"Routers","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Frouters"},{"title":"Custom Field Components","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fcustom-field-components"},{"title":"Render Forms using Actions","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Frender"},{"title":"Vault","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fvault"},{"title":"Custom Messages and Translation","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fcustom-messages-and-translation"},{"title":"Resources: Templates","type":"externalLink","url":"https:\u002F\u002Fdeveloper.auth0.com\u002Fresources\u002Ftemplates\u002Fforms","external":true,"forceFullReload":true},{"title":"Use Cases: Configure a progressive profile form using Forms","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fconfigure-progressive-profile-form"},{"title":"Use Cases: Configure an update policy form using Forms","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fconfigure-update-policy-form"},{"title":"Use Cases: Configure additional signup steps using Forms","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fforms\u002Fconfigure-additional-signup-steps"}]},{"title":"Rules","description":"Maintain legacy rules that your applications use in the authentication pipeline.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Frules","showCards":true,"children":[{"title":"Create Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fcreate-rules"},{"title":"Configure Global Variables for Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fconfigure-global-variables-for-rules"},{"title":"Store Rule Configurations","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fconfiguration"},{"title":"Cache Expensive Resources in Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fcache-resources"},{"title":"Debug Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fdebug-rules"},{"title":"Use the Management API from within Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fuse-management-api"},{"title":"Redirect Users from Within Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fredirect-users"},{"title":"User Object Properties in Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fuser-object-in-rules"},{"title":"Context Object Properties in Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fcontext-object"},{"title":"Raise Errors from Rules","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Frules\u002Fraise-errors-from-rules"}]},{"title":"Hooks","description":"Maintain legacy hooks for selected extensibility points of the Auth0 platform.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fhooks","showCards":true,"children":[{"title":"Create Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fcreate-hooks"},{"title":"Update Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fupdate-hooks"},{"title":"Delete Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fdelete-hooks"},{"title":"Enable\u002FDisable Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fenable-disable-hooks"},{"title":"View Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fview-hooks"},{"title":"View Logs for Hooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fview-logs-for-hooks"},{"title":"Hook Secrets","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fhook-secrets","showCards":true,"children":[{"title":"Create Hook Secrets","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fhook-secrets\u002Fcreate-hook-secrets"},{"title":"Update Hook Secrets","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fhook-secrets\u002Fupdate-hook-secrets"},{"title":"Delete Hook Secrets","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fhook-secrets\u002Fdelete-hook-secrets"},{"title":"View Hook Secrets","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fhooks\u002Fhook-secrets\u002Fview-hook-secrets"}]}]}]},{"title":"Third-Party Customization","description":"Take advantage of third-party integrations and Auth0 extensions to expand what Auth0 can do for your systems.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Extensions","description":"Use Auth0 Extensions to install applications or run commands\u002Fscripts that extend the capabilities of the Auth0 base product.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fextensions","showCards":true,"children":[{"title":"Authorization Extension","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension","showCards":true,"children":[{"title":"Install Authorization Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Finstall-authorization-extension"},{"title":"Configure Authorization Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fconfigure-authorization-extension"},{"title":"Set Up Users in Authorization Extension Dashboard","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fset-up-authorization-extension-users"},{"title":"Enable API Access to Authorization Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fenable-api-access-to-authorization-extension"},{"title":"Import and Export Authorization Extension Data","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fimport-and-export-authorization-extension-data"},{"title":"Use Rules with the Authorization Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fuse-rules-with-the-authorization-extension"},{"title":"Migrate to Authorization Extension v2","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthorization-extension\u002Fmigrate-to-authorization-extension-v2"}]},{"title":"Delegated Administration Extension","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension","showCards":true,"children":[{"title":"Install Delegated Admin Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Finstall-delegated-admin-extension"},{"title":"Create Delegated Admin Applications","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fcreate-delegated-admin-applications"},{"title":"Delegated Administration Extension Hooks","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks","showCards":true,"children":[{"title":"Delegated Administration: Access Hook","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks\u002Fdelegated-administration-access-hook"},{"title":"Delegated Administration: Filter Hook","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks\u002Fdelegated-administration-filter-hook"},{"title":"Delegated Administration: Memberships Query Hook","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks\u002Fdelegated-administration-memberships-query-hook"},{"title":"Delegated Administration: Settings Query Hook","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks\u002Fdelegated-administration-settings-query-hook"},{"title":"Delegated Administration: Write Hook","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-hooks\u002Fdelegated-administration-write-hook"}]},{"title":"Delegated Administration: Manage Users","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fdelegated-administration-extension\u002Fdelegated-administration-manage-users"}]},{"title":"Single Sign-On Dashboard Extension","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fsingle-sign-on-dashboard-extension","showCards":true,"children":[{"title":"Install Single Sign-On Dashboard Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fsingle-sign-on-dashboard-extension\u002Finstall-sso-dashboard-extension"},{"title":"Create Single Sign-on (SSO) Dashboard Application","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fsingle-sign-on-dashboard-extension\u002Fcreate-sso-dashboard-application"},{"title":"Add Applications to Single Sign-On Dashboard","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fsingle-sign-on-dashboard-extension\u002Fadd-applications-to-the-sso-dashboard"},{"title":"Update Applications in the SSO Dashboard","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fsingle-sign-on-dashboard-extension\u002Fupdate-applications-on-the-sso-dashboard"}]},{"title":"Authentication API Debugger Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fauthentication-api-debugger-extension"},{"title":"Auth0 AD\u002FLDAP Connector Health Monitor Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fad-ldap-connector-health-monitor"},{"title":"Real-time Webtask Logs Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Freal-time-webtask-logs"},{"title":"Account Link Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Faccount-link-extension"},{"title":"User Import \u002F Export Extension","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fextensions\u002Fuser-import-export-extension"}]},{"title":"Integrations ","description":"Reduce implementation time with Auth0-reviewed integrations you can trust.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations","showCards":true,"children":[{"title":"Integrate with Amazon Web Services and Products","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws","showCards":true,"children":[{"title":"Configure Amazon Web Services for Delegated Authentication","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Fhow-to-set-up-aws-for-delegated-authentication"},{"title":"Configure Amazon Web Services for Single Sign-On","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Fconfigure-amazon-web-services-for-sso"},{"title":"Secure AWS API Gateway Endpoints Using Custom Authorizers","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-custom-authorizers"},{"title":"Use Amazon Web Services Session Tags for Role-Based Access Control","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Fsession-tags"},{"title":"Serverless Apps with API Gateway and Lambda","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation","showCards":true,"children":[{"title":"AWS API Gateway Tutorial Step 1","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation\u002Faws-api-gateway-delegation-1"},{"title":"AWS API Gateway Tutorial Step 2","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation\u002Faws-api-gateway-delegation-2"},{"title":"AWS API Gateway Tutorial Step 3","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation\u002Faws-api-gateway-delegation-3"},{"title":"AWS API Gateway Tutorial Step 4","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation\u002Faws-api-gateway-delegation-4"},{"title":"AWS API Gateway Tutorial Step 5","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-delegation\u002Faws-api-gateway-delegation-5"}]},{"title":"Integrate with Amazon Cognito","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Famazon-cognito"},{"title":"Secure AWS API Gateway Using Cognito","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Faws\u002Faws-api-gateway-cognito"}]},{"title":"Integrate with Azure API Management","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fazure-api-management"},{"title":"Secure Google Cloud Endpoints with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fgoogle-cloud-endpoints"},{"title":"Secure a CLI with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fsecure-a-cli-with-auth0"},{"title":"Secure Apigee with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fapigee"},{"title":"Single Sign-On Integrations","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fsso-integrations"},{"title":"Marketing Tool Integrations","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations","showCards":true,"children":[{"title":"Export User Data to Adobe Campaign","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fadobe-campaign"},{"title":"Export User Data to Alterian","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Falterian"},{"title":"Export User Data to Constant Contact","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fconstant-contact"},{"title":"Export User Data to Oracle Eloqua","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Feloqua"},{"title":"Export User Data to MailChimp","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fmailchimp"},{"title":"Export User Data to Marketo","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fmarketo"},{"title":"Export User Data to Sailthru","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fsailthru"},{"title":"Export User Data to Salesforce","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fexport-user-data-salesforce"},{"title":"Export User Data to Salesforce Marketing Cloud","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fsalesforce-marketing-cloud"},{"title":"Export User Data to Watson Campaign Automation","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketing-tool-integrations\u002Fwatson-campaign-automation"}]},{"title":"Marketplace Partners","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners","showCards":true,"children":[{"title":"Introduction to Integrating with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fintroduction-to-integrating-with-auth0"},{"title":"Defining an Integration Use Case","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fdefining-an-integration-use-case"},{"title":"Actions Integrations for Partners","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Factions-integrations-for-partners"},{"title":"Redirect Actions for Partners","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fredirect-actions-for-partners"},{"title":"Social Connections for Partners","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fsocial-connections-for-partners"},{"title":"SSO Integrations for Partners","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fsso-integrations-for-partners"},{"title":"Writing Tips for Installation Guides","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmarketplace-partners\u002Fwriting-tips-for-installation-guides"}]},{"title":"Integrate with SharePoint 2010\u002F2013","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fsharepoint-2010-2013"},{"title":"Integrate with Vercel","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fintegrate-with-vercel"},{"title":"Connect Provider Hosted Apps to SharePoint Online","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fconnecting-provider-hosted-apps-to-sharepoint-online"},{"title":"CMS Identity Plugins","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms","showCards":true,"children":[{"title":"Login by Auth0 Wordpress Plugin","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin","showCards":true,"children":[{"title":"Integrate with WordPress","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Fintegrate-with-wordpress"},{"title":"Install Login by Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Finstall-login-by-auth0"},{"title":"Configure Login by Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Fconfigure-login-by-auth0"},{"title":"User Migration in Login by Auth0 WordPress Plugin","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Fuser-migration-in-login-by-auth0"},{"title":"Extend Login by Auth0 WordPress Plugin","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Fextend-login-by-auth0"},{"title":"Troubleshoot Login by Auth0 WordPress Plugin","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Ftroubleshoot-login-by-auth0"},{"title":"Troubleshoot WordPress Plugin Invalid State Errors","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fcms\u002Fwordpress-plugin\u002Ftroubleshoot-wordpress-plugin-invalid-state-errors"}]}]},{"title":"Authenticating & Authorizing a Tessel device with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fauthenticating-and-authorizing-a-tessel-device-with-auth0"},{"title":"Authenticating & Authorizing Devices using MQTT with Auth0","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fauthenticate-devices-using-mqtt"},{"title":"Migrate Office365 Connections to Windows Azure AD","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Fmigrate-office365-connections-to-windows-azure-ad"},{"title":"Office 365 Custom Provisioning","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Fintegrations\u002Foffice-365-custom-provisioning"}]},{"title":"Log Streams","description":"Monitor and respond to events such as changed passwords or new registrations with your own business logic.","type":"navigationItem","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams","showCards":true,"children":[{"title":"Integrated Log Streaming Services","type":"externalLink","url":"https:\u002F\u002Fmarketplace.auth0.com\u002Ffeatures\u002Flog-streaming","external":true,"forceFullReload":true},{"title":"Create Custom Log Streams Using Webhooks","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fcustom-log-streams"},{"title":"Check Log Stream Health","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fcheck-log-stream-health"},{"title":"Log Stream Filters","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fevent-filters"},{"title":"Use Auth0 App for Splunk","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fsplunk-dashboard"},{"title":"Use Auth0 App for Sumo Logic","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fsumo-logic-dashboard"},{"title":"Use Auth0 Dashboard Templates with Datadog","type":"article","url":"\u002Fdocs\u002Fcustomize\u002Flog-streams\u002Fdatadog-dashboard-templates"}]},{"title":"Auth0 Marketplace","type":"externalLink","url":"https:\u002F\u002Fmarketplace.auth0.com\u002F","external":true,"forceFullReload":true}]}]},{"title":"Secure","description":"Add multi-factor authentication and defend your application from bots, suspicious IPs, and password breaches.","type":"navigationSection","url":"\u002Fdocs\u002Fsecure","icon":"IdenticonSecurity","children":[{"title":"Protect Your Application","description":"Make sure only the right people can access your applications. ","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Application Credentials","description":"This section contains information about credentials for your application to authenticate.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fapplication-credentials","showCards":true,"children":[{"title":"Generate RSA Key Pair","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fapplication-credentials\u002Fgenerate-rsa-key-pair"}]},{"title":"Attack Protection","description":"Detect attacks and stop malicious attempts to access your applications.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection","showCards":true,"children":[{"title":"Bot Detection","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection","showCards":true,"children":[{"title":"Add Bot Detection to Native Applications","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection\u002Fbot-detection-native-apps"},{"title":"Add Bot Detection to Passwordless Flows","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection\u002Fbot-detection-passwordless-flows"},{"title":"Add Bot Detection to Custom Login Pages","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection\u002Fbot-detection-custom-login-pages"},{"title":"Configure Third-Party CAPTCHA Provider Integrations","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection\u002Fconfigure-captcha"}]},{"title":"Breached Password Detection","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbreached-password-detection"},{"title":"Brute-Force Protection","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbrute-force-protection"},{"title":"Suspicious IP Throttling","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fsuspicious-ip-throttling"},{"title":"View Attack Protection Log Events","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fview-attack-protection-events"},{"title":"Prevent Attacks and Redirect Users with OAuth 2.0 State Parameters","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fstate-parameters"}]},{"title":"Continuous Session Protection","description":"Enhance security and tailor the user experience through customizable session and refresh token management. ","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fcontinuous-session-protection","showCards":true},{"title":"Highly Regulated Identity","description":"Highly Regulated Identity is Auth0's Financial-Grade Identity ","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fhighly-regulated-identity","showCards":false,"children":[{"title":"Transactional Authorization with Contextual Strong Customer Authentication","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fhighly-regulated-identity\u002Ftransactional-authorization-with-contextual-sca"},{"title":"Customer Managed Keys","description":"Learn about how to manage your Auth0 keys","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fhighly-regulated-identity\u002Fcustomer-managed-keys","showCards":true,"children":[{"title":"Configure Customer Managed Keys with the Dashboard","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fhighly-regulated-identity\u002Fcustomer-managed-keys\u002Fcustomer-managed-keys-dashboard"},{"title":"Configure Customer Managed Keys with the Management API","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fhighly-regulated-identity\u002Fcustomer-managed-keys\u002Fcustomer-managed-keys-management-api"}]}]},{"title":"Multi-Factor Authentication","description":"Add additional checks to ensure passwords match up with the identity of the user or device accessing your applications.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication","showCards":true,"children":[{"title":"Enable Multi-Factor Authentication","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fenable-mfa"},{"title":"Multi-Factor Authentication Factors","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-factors","showCards":true,"children":[{"title":"Configure Push Notifications for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-factors\u002Fconfigure-push-notifications-for-mfa"},{"title":"Configure OTP Notifications for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-factors\u002Fconfigure-otp-notifications-for-mfa"},{"title":"Configure Email Notifications for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-factors\u002Fconfigure-email-notifications-for-mfa"},{"title":"Configure SMS and Voice Notifications for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-factors\u002Fconfigure-sms-voice-notifications-mfa"}]},{"title":"WebAuthn as Multi-Factor Authentication","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fwebauthn-as-mfa"},{"title":"Configure Cisco Duo Security for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fconfigure-cisco-duo-for-mfa"},{"title":"FIDO Authentication with WebAuthn","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Ffido-authentication-with-webauthn","showCards":true,"children":[{"title":"Configure WebAuthn with Security Keys for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Ffido-authentication-with-webauthn\u002Fconfigure-webauthn-security-keys-for-mfa"},{"title":"Configure WebAuthn with Device Biometrics for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Ffido-authentication-with-webauthn\u002Fconfigure-webauthn-device-biometrics-for-mfa"}]},{"title":"Adaptive MFA","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fadaptive-mfa","showCards":true,"children":[{"title":"Enable Adaptive MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fadaptive-mfa\u002Fenable-adaptive-mfa"},{"title":"Customize Adaptive MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fadaptive-mfa\u002Fcustomize-adaptive-mfa"},{"title":"Adaptive MFA Log Events","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fadaptive-mfa\u002Fadaptive-mfa-log-events"}]},{"title":"Auth0 Guardian","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauth0-guardian","showCards":true,"children":[{"title":"Guardian.swift iOS SDK","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauth0-guardian\u002Fguardian-for-ios-sdk"},{"title":"Guardian for Android SDK","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauth0-guardian\u002Fguardian-for-android-sdk"}]},{"title":"Customize MFA","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa","showCards":true,"children":[{"title":"Customize MFA Selection for Universal Login","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa\u002Fcustomize-mfa-selection-universal-login"},{"title":"Customize MFA Enrollments for Universal Login","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa\u002Fcustomize-mfa-enrollments-universal-login"},{"title":"Customize MFA for Classic Login","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa\u002Fcustomize-mfa-classic-login"},{"title":"MFA Theme Language Dictionary","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa\u002Fmfa-theme-language-dictionary"},{"title":"MFA Widget Theme Options","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fcustomize-mfa\u002Fmfa-widget-theme-options"}]},{"title":"Authenticate Using ROPG Flow with MFA","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa","showCards":true,"children":[{"title":"Enroll and Challenge SMS and Voice Authenticators","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fenroll-challenge-sms-voice-authenticators"},{"title":"Enroll and Challenge OTP Authenticators","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fenroll-and-challenge-otp-authenticators"},{"title":"Enroll and Challenge Push Authenticators","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fenroll-and-challenge-push-authenticators"},{"title":"Enroll and Challenge Email Authenticators","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fenroll-and-challenge-email-authenticators"},{"title":"Import User MFA Authenticator Enrollments","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fimport-user-mfa-authenticator-enrollments"},{"title":"Challenge with Recovery Codes","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fauthenticate-using-ropg-flow-with-mfa\u002Fchallenge-with-recovery-codes"}]},{"title":"Step-Up Authentication","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fstep-up-authentication","showCards":true,"children":[{"title":"Configure Step-up Authentication for APIs","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fstep-up-authentication\u002Fconfigure-step-up-authentication-for-apis"},{"title":"Configure Step-up Authentication for Web Apps","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fstep-up-authentication\u002Fconfigure-step-up-authentication-for-web-apps"}]},{"title":"Configure Recovery Codes for MFA","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fconfigure-recovery-codes-for-mfa"},{"title":"Manage Authentication Factors with APIs","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmanage-mfa-auth0-apis","showCards":true,"children":[{"title":"Manage Authentication Methods with Management API","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmanage-mfa-auth0-apis\u002Fmanage-authentication-methods-with-management-api"},{"title":"Manage Authentication Factors with Authentication API","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmanage-mfa-auth0-apis\u002Fmanage-authenticator-factors-mfa-api"}]},{"title":"Reset User Multi-Factor Authentication and Recovery Codes","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Freset-user-mfa"},{"title":"Multi-factor Authentication Developer Resources","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-developer-resources","showCards":true,"children":[{"title":"Auth0 MFA API","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-developer-resources\u002Fmfa-api"},{"title":"Create Custom Enrollment Tickets","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-developer-resources\u002Fcreate-custom-enrollment-tickets"},{"title":"Install Guardian SDK","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-developer-resources\u002Finstall-guardian-sdk"},{"title":"Guardian Error Code Reference","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication\u002Fmulti-factor-authentication-developer-resources\u002Fguardian-error-code-reference"},{"title":"Auth0 MFA Client Library","type":"externalLink","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-guardian.js","external":true,"forceFullReload":true},{"title":"Create Custom MFA Widget","type":"externalLink","url":"https:\u002F\u002Fgithub.com\u002Fauth0\u002Fauth0-guardian.js\u002Ftree\u002Fmaster\u002Fexample","external":true,"forceFullReload":true}]}]},{"title":"Security Center","description":"Observe potential attack trends and quickly respond to them in real-time.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-center","showCards":true,"children":[{"title":"Metrics","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-center\u002Fmetrics"},{"title":"Prioritized Log Streams","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-center\u002Fprioritized-log-streams"},{"title":"Configure Security Monitoring Alerts","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-center\u002Fsecurity-alerts"}]},{"title":"Security Guidance","description":"View security bulletins and learn basic tips to secure data and accounts.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance","showCards":true,"children":[{"title":"General Security Tips","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Ftips"},{"title":"Security Bulletins","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins","showCards":true,"children":[{"title":"CVE-2022-23539, CVE-2022-23541, CVE-2022-23540: Security Update for jsonwebtoken","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002F2022-12-21-jsonwebtoken"},{"title":"CVE-2022-23505: Security Update for passport-wsfed-saml2 Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2022-23505"},{"title":"CVE-2022-24794: Security Update for Express OpenID Connect Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2022-24794"},{"title":"CVE-2021-43812: Security Update for Next.js Auth0 Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2021-43812"},{"title":"CVE-2021-41246: Security Update for Express OpenID Connect Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2021-41246"},{"title":"CVE-2021-32702: Security Update for Auth0 Next.js Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2021-32702"},{"title":"CVE-2021-32641: Security Update for Auth0 Lock Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2021-32641"},{"title":"CVE 2020-15259: Security Update for ad-ldap-connector","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-15259"},{"title":"CVE-2020-15240: Security Update for omniauth-auth0 JWT Validation","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-15240"},{"title":"CVE-2020-15125: Security Update for node-auth0 Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-15125"},{"title":"CVE-2020-15119: Security Update for Auth0 Lock Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-15119"},{"title":"CVE-2020-15084: Security Update for express-jwt Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-15084"},{"title":"CVE-2020-5391, CVE-2020-5392, CVE-2020-6753, CVE-2020-7948, CVE-2020-7947: Security Update for WordPress Plugin for Auth0","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002F2020-03-31-wpauth0"},{"title":"CVE-2020-5263: Security Update for auth0.js Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2020-5263"},{"title":"CVE-2019-20174: Security Update for Auth0 Lock Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2019-20174"},{"title":"CVE-2019-16929: Security Vulnerability in auth0.net","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2019-16929"},{"title":"CVE-2019-13483: Security Vulnerability in Passport-SharePoint","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2019-13483"},{"title":"CVE-2019-7644: Security Vulnerability in Auth0-WCF-Service-JWT","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2019-7644"},{"title":"CVE-2019-20173: Security Update for WordPress Plugin for Auth0 wp-auth0","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2019-20173"},{"title":"CVE-2018-15121: Security Vulnerability in auth0-aspnet and auth0-aspnet-owin","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2018-15121"},{"title":"CVE-2018-11537: Security Update for angular-jwt Allow List Bypass","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2018-11537"},{"title":"CVE-2018-7307: Security Vulnerability for auth0.js \u003C 9.3","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2018-7307"},{"title":"CVE-2018-6874: Security Vulnerability in the Auth0 Authentication Service","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2018-6874"},{"title":"CVE-2018-6873: Security Vulnerability in the Auth0 Authentication Service","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2018-6873"},{"title":"CVE-2017-17068: Security Update for auth0.js Popup Callback Vulnerability","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2017-17068"},{"title":"CVE-2017-16897: Security Update for passport-wsfed-saml2 Passport Strategy Library","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002Fcve-2017-16897"},{"title":"Auth0 Security Bulletin for Rules","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002F2019-01-10-rules"},{"title":"Auth0 Security Bulletin for Assigning Scopes Based on Email Address","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fsecurity-bulletins\u002F2019-09-05-scopes"}]},{"title":"Data Security","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fdata-security","showCards":true,"children":[{"title":"Auth0 IP Addresses for Allow Lists ","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fdata-security\u002Fallowlist"},{"title":"Add User Attributes to Deny List","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fdata-security\u002Fdenylist"},{"title":"User Data Storage","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fdata-security\u002Fuser-data-storage"},{"title":"Token Storage","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fdata-security\u002Ftoken-storage"}]},{"title":"Prevent Common Cybersecurity Threats","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fprevent-threats"},{"title":"Incident Response: Using Logs","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fsecurity-guidance\u002Fincident-response-using-logs"}]},{"title":"Tokens","description":"Explore the types of tokens related to identity and authentication and how they are used by Auth0.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens","showCards":true,"children":[{"title":"JSON Web Tokens","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens","showCards":true,"children":[{"title":"JSON Web Token Structure","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fjson-web-token-structure"},{"title":"JSON Web Token Claims","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fjson-web-token-claims"},{"title":"Create Custom Claims","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fcreate-custom-claims"},{"title":"Validate JSON Web Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fvalidate-json-web-tokens"},{"title":"JSON Web Key Sets","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fjson-web-key-sets"},{"title":"JSON Web Key Set Properties","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Fjson-web-key-set-properties"},{"title":"Locate JSON Web Key Sets","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens\u002Flocate-json-web-key-sets"}]},{"title":"ID Tokens","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens","showCards":true,"children":[{"title":"Validate ID Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens\u002Fvalidate-id-tokens"},{"title":"Get ID Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens\u002Fget-id-tokens"},{"title":"ID Token Structure","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens\u002Fid-token-structure"},{"title":"Update ID Token Lifetime","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens\u002Fupdate-id-token-lifetime"}]},{"title":"Access Tokens","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens","showCards":true,"children":[{"title":"Access Token Profiles","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Faccess-token-profiles"},{"title":"Get Access Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fget-access-tokens"},{"title":"Use Access Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fuse-access-tokens"},{"title":"Validate Access Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fvalidate-access-tokens"},{"title":"Update Access Token Lifetime","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fupdate-access-token-lifetime"},{"title":"Identity Provider Access Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fidentity-provider-access-tokens"},{"title":"Management API Access Tokens","description":"Learn about Auth0 Management APIv2 Access Tokens and how to use them.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fmanagement-api-access-tokens","showCards":false,"children":[{"title":"Get Management API Access Tokens for Testing","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fmanagement-api-access-tokens\u002Fget-management-api-access-tokens-for-testing"},{"title":"Get Management API Access Tokens for Production","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fmanagement-api-access-tokens\u002Fget-management-api-access-tokens-for-production"},{"title":"Get Management API Access Tokens for Single-Page Applications","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fmanagement-api-access-tokens\u002Fget-management-api-tokens-for-single-page-applications"},{"title":"Changes in Auth0 Management APIv2 Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fmanagement-api-access-tokens\u002Fchanges-in-auth0-management-apiv2-tokens"}]},{"title":"JSON Web Encryption","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens\u002Fjson-web-encryption"}]},{"title":"Delegation Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fdelegation-tokens"},{"title":"Refresh Tokens","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens","showCards":true,"children":[{"title":"Get Refresh Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fget-refresh-tokens"},{"title":"Use Refresh Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fuse-refresh-tokens"},{"title":"Configure Refresh Token Expiration","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fconfigure-refresh-token-expiration"},{"title":"Refresh Token Rotation","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Frefresh-token-rotation"},{"title":"Configure Refresh Token Rotation","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fconfigure-refresh-token-rotation"},{"title":"Use Refresh Token Rotation","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fuse-refresh-token-rotation"},{"title":"Disable Refresh Token Rotation","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fdisable-refresh-token-rotation"},{"title":"Revoke Refresh Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Frevoke-refresh-tokens"},{"title":"Refresh Tokens with Actions","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens\u002Fmanage-refresh-tokens-actions"}]},{"title":"Revoke Tokens","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frevoke-tokens"},{"title":"Manage Refresh Tokens with Auth0 Management API","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fmanage-refresh-tokens-with-auth0-management-api"},{"title":"Token Best Practices","type":"article","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Ftoken-best-practices"}]}]},{"title":"Compliance","description":"Learn how Auth0 meets requirements for multiple compliance frameworks and certifications, including GDPR and HIPAA.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Data Privacy and Compliance","description":"Read about Auth0’s compliance qualifications and data processing.","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance","showCards":true,"children":[{"title":"GDPR","type":"navigationItem","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr","showCards":true,"children":[{"title":"GDPR: Conditions for Consent","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-conditions-for-consent"},{"title":"GDPR: Track Consent with Custom UI","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-track-consent-with-custom-ui"},{"title":"GDPR: Track Consent with Lock","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-track-consent-with-lock"},{"title":"GDPR: Right to Access, Correct, and Erase Data","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-right-to-access-correct-and-erase-data"},{"title":"GDPR: Data Minimization","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-data-minimization"},{"title":"GDPR: Data Portability","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-data-portability"},{"title":"GDPR: Protect and Secure User Data","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fgdpr\u002Fgdpr-protect-and-secure-user-data"}]},{"title":"Auth0 Data Processing","type":"article","url":"\u002Fdocs\u002Fsecure\u002Fdata-privacy-and-compliance\u002Fdata-processing"}]}]}]},{"title":"Deploy and Monitor","description":"Deploy Auth0 for your applications and monitor system health and events.","type":"navigationSection","url":"\u002Fdocs\u002Fdeploy-monitor","icon":"IdenticonMonitoring","children":[{"title":"Deployment","description":"Plan, check, and execute your Auth0 deployment.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Deployment Options","description":"Evaluate whether to deploy to the public cloud or to a private cloud.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeployment-options","showCards":true},{"title":"Private Cloud Deployments","description":"Explore the capabilities and limitations of different AWS and Azure private cloud options.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-private-cloud","showCards":true,"children":[{"title":"Private Cloud on AWS","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-private-cloud\u002Fprivate-cloud-on-aws"},{"title":"Private Cloud on Azure","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-private-cloud\u002Fprivate-cloud-on-azure"},{"title":"Private Cloud Add-on Features","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-private-cloud\u002Fprivate-cloud-add-on-features"}]},{"title":"Pre-Deployment Checks","description":"Run checks to ensure that your applications are ready for production.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks","showCards":true,"children":[{"title":"Run Production Readiness Checks","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fhow-to-run-production-checks"},{"title":"Production Readiness Checks: Critical Fixes","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fproduction-check-required-fixes"},{"title":"Production Readiness Checks: Non-Critical Fixes","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fproduction-check-recommended-fixes"},{"title":"Production Readiness Checks: Best Practices","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fproduction-checks-best-practices"},{"title":"Run Pre-Deployment Tests","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fpredeployment-tests"},{"title":"Pre-Launch Tips","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fpre-deployment-checks\u002Fpre-launch-tips"}]},{"title":"Deployment Checklist","description":"Explore the Auth0-provided general deployment checklist for Auth0 implementations.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-checklist","showCards":true},{"title":"Deploy CLI Tool","description":"Learn how Auth0 supports continuous integration and deployment using the Deploy CLI tool.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool","showCards":true,"children":[{"title":"Use as a CLI","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fuse-as-a-cli"},{"title":"Use as a Node Module","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fuse-as-a-node-module"},{"title":"Configure the Deploy CLI","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fconfigure-the-deploy-cli"},{"title":"Authenticate with your Tenant","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fauthenticate-with-your-tenant"},{"title":"Keyword Replacement","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fkeyword-replacement"},{"title":"Incorporate into Multi-environment Workflows","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fincorporate-into-multi-environment-workflows"},{"title":"Exclude Resources From Management","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fexclude-resources-from-management"},{"title":"Resource-specific Documentation","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Fresource-specific-documentation"},{"title":"Available Resource Configuration Formats","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeploy-cli-tool\u002Favailable-resource-configuration-formats"}]},{"title":"Auth0 Terraform Provider","description":"Learn about the Auth0 Terraform Provider and how to use it to manage deployment of your Auth0 instances.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fauth0-terraform-provider","showCards":false},{"title":"Deployment Best Practices","description":"Explore best practices for deploying Auth0 implementations.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fdeployment-best-practices","showCards":true}]},{"title":"Monitoring","description":"Monitor events and service status and work with tenant log event data.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Monitor","description":"Monitor your Auth0 implementation and Auth0 status and services.","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fmonitor","showCards":true,"children":[{"title":"Check Auth0 Status","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fmonitor\u002Fcheck-auth0-status"},{"title":"Check External Services Status","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fmonitor\u002Fcheck-external-services-status"},{"title":"Monitor Applications","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fmonitor\u002Fmonitor-applications"},{"title":"Monitor Auth0 Using System Center Operations Manager","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Fmonitor\u002Fmonitor-using-scom"}]},{"title":"Logs","description":"Manage event logs for business analysis and insights. ","type":"navigationItem","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs","showCards":true,"children":[{"title":"Personally Identifiable Information in Auth0 Logs","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Fpii-in-logs"},{"title":"Log Data Retention","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Flog-data-retention"},{"title":"View Log Events","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Fview-log-events"},{"title":"Filter Log Events","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Flog-event-filters"},{"title":"Prompt Details in Tenant Logs","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Fprompt-details-in-tenant-logs"},{"title":"Retrieve Log Events Using the Management API","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Fretrieve-log-events-using-mgmt-api"},{"title":"Log Event Type Codes","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Flog-event-type-codes"},{"title":"Log Search Query Syntax","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Flog-search-query-syntax"},{"title":"Export Log Events with Rules","type":"article","url":"\u002Fdocs\u002Fdeploy-monitor\u002Flogs\u002Fexport-log-events-with-rules"}]}]}]},{"title":"Troubleshoot","description":"Troubleshoot challenges, learn about Auth0’s different levels of support, and get help.","type":"navigationSection","url":"\u002Fdocs\u002Ftroubleshoot","icon":"IdenticonTroubleshoot","children":[{"title":"Get Support","description":"Learn about Auth0’s support plans and procedures, service agreements, and community.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Customer Support","description":"Learn about the different levels of support at Auth0.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support","showCards":true,"children":[{"title":"Premier Success Plans","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fsupport-plans"},{"title":" Support Channels","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fsupport-channels"},{"title":"Self Service Support","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fself-service-support"},{"title":"Product Support Matrix","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fproduct-support-matrix"},{"title":"Service Levels","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fservices-level-descriptions"},{"title":"Open and Manage Support Tickets","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fopen-and-manage-support-tickets"},{"title":"Manage Subscriptions","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fmanage-subscriptions","showCards":true,"children":[{"title":"Downgrade or Cancel Auth0 Subscriptions","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fmanage-subscriptions\u002Fdowngrade-or-cancel-subscriptions"},{"title":"Delete or Reset Tenants","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fmanage-subscriptions\u002Fdelete-or-reset-tenant"},{"title":"Export Data","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fmanage-subscriptions\u002Fexport-data"},{"title":"Monitor Subscription Usage","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fmanage-subscriptions\u002Fmonitor-subscription-usage"}]},{"title":"Reset Account Passwords","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Freset-account-passwords"},{"title":"Software Updates","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fsoftware-updates"},{"title":"Auth0 Versioning Strategy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fversioning-strategy"},{"title":"Operational Policies","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies","showCards":true,"children":[{"title":"Billing Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fbilling-policy"},{"title":"Auth0 Public Cloud Service Endpoints","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fpublic-cloud-service-endpoints"},{"title":"Data Export and Transfer Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fdata-export-and-transfer-policy"},{"title":"Change Freeze Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fchange-freeze-policy"},{"title":"Load Testing Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fload-testing-policy"},{"title":"Penetration Testing Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fpenetration-testing-policy"},{"title":"Rate Limit Policy","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy","showCards":true,"children":[{"title":"Rate Limit Use Cases","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-use-cases"},{"title":"Rate Limit Configurations","description":"Rate limit configurations for each subscription type","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations","showCards":true,"children":[{"title":"Free","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ffree-public"},{"title":"Self Service","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Fself-service-public"},{"title":"Enterprise","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Fenterprise-public"},{"title":"Tier Dev Private Cloud","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-20-development-private-cloud"},{"title":"Private Cloud Basic 100 RPS (1x)","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-100-rps-private-cloud"},{"title":"Private Cloud Performance 500 RPS (5x)","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-500-rps-private-cloud"},{"title":"Private Cloud Performance 1500 RPS (15x)","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-1500-rps-private-cloud"},{"title":"Private Cloud Performance 3000 RPS (30x) and 3000 RPS (30x) Burst","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-3000-rps-private-cloud"},{"title":"Private Cloud Performance 6000 RPS (60x) and 6000 RPS (60x) Burst","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Frate-limit-policy\u002Frate-limit-configurations\u002Ftier-6000-rps-private-cloud"}]}]},{"title":"Entity Limit Policy","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Foperational-policies\u002Fentity-limit-policy"}]},{"title":"Auth0 Changelog","type":"externalLink","url":"https:\u002F\u002Fauth0.com\u002Fchangelog","external":true,"forceFullReload":true},{"title":"Responsible Disclosure Program Security Support Tickets","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fresponsible-disclosure-program-security-support-tickets"},{"title":"Auth0 Enterprise and Premier Support","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fauth0-enterprise-and-premier-support"},{"title":"Update Billing Information","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fcustomer-support\u002Fupdate-billing-information"}]}]},{"title":"Troubleshoot","description":"Explore solutions to common challenges.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Commonplace Issues","description":"Learn fundamental troubleshooting tactics.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues","showCards":true,"children":[{"title":"Verify Platform","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fverify-platform"},{"title":"Verify Connections","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fverify-connections"},{"title":"Verify Domain","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fverify-domain"},{"title":"Verify Rules","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fverify-rules"},{"title":"Check Error Messages","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fcheck-error-messages"},{"title":"Troubleshoot Invalid Token Errors","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Finvalid-token-errors"},{"title":"Check for Deprecation Errors","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fsearch-logs-for-deprecation-errors"},{"title":"Deprecation Errors","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Fcheck-deprecation-errors"},{"title":"Recover Administrative Access to a Tenant","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fbasic-issues\u002Frecover-administrative-access-to-a-tenant"}]},{"title":"Authentication Issues","description":"Troubleshoot login and other authentication issues.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues","showCards":true,"children":[{"title":"Check API Calls","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Fcheck-api-calls"},{"title":"Check Login and Logout Issues","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Fcheck-login-and-logout-issues"},{"title":"Check User Profiles","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Fcheck-user-profiles"},{"title":"Troubleshoot Role-Based Access Control and Authorization","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Ftroubleshoot-rbac-authorization"},{"title":"Troubleshoot Multi-Factor Authentication Issues","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Ftroubleshoot-mfa-issues"},{"title":"Troubleshoot SAML Configurations","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Ftroubleshoot-saml-configurations"},{"title":"Troubleshoot SAML Errors","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Fsaml-errors"},{"title":"Self Change Password Errors","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Fself-change-password-errors"},{"title":"Troubleshoot Authorization Extension","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Ftroubleshoot-authorization-extension"},{"title":"Troubleshoot Renew Tokens When Using Safari","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fauthentication-issues\u002Frenew-tokens-when-using-safari"}]},{"title":"Integration and Extensibility Issues","description":"Troubleshoot issues integrating with third-party solutions.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fintegration-extensibility-issues","showCards":true,"children":[{"title":"Troubleshoot Custom Domains","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fintegration-extensibility-issues\u002Ftroubleshoot-custom-domains"},{"title":"Troubleshoot AD\u002FLDAP Connector","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fintegration-extensibility-issues\u002Ftroubleshoot-ad-ldap-connector"},{"title":"Troubleshoot Extensions","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fintegration-extensibility-issues\u002Ftroubleshoot-extensions"},{"title":"Troubleshoot Deploy CLI Tool","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fintegration-extensibility-issues\u002Ftroubleshoot-the-deploy-cli-tool"}]},{"title":"Troubleshooting Tools","description":"Learn how to generate and analyze HAR files, debug, and inspect tokens.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Ftroubleshooting-tools","showCards":true,"children":[{"title":"Generate and Analyze HAR Files","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Ftroubleshooting-tools\u002Fgenerate-and-analyze-har-files"},{"title":"Sanitize HTTP Traces","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Ftroubleshooting-tools\u002Fsanitize-http-traces"},{"title":"JSON Web Token Inspector","type":"externalLink","url":"https:\u002F\u002Fjwt.io","external":true,"forceFullReload":true}]},{"title":"Debugging Best Practices","description":"Explore best practices for debugging your Auth0 implementation.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fdebugging-best-practices","showCards":true},{"title":"Error Handling Best Practices","description":"Explore best practices for handling error conditions.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Ferror-handling-best-practices","showCards":true},{"title":"Performance Best Practices","description":"Learn about best practices for performance.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fperformance-best-practices","showCards":true},{"title":"General Usage and Operations Best Practices","description":"Explore best practices for general Auth0 usage and operation.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fgeneral-usage-and-operations-best-practices","showCards":true}]},{"title":"Auth0 Product Lifecycle","description":"Discover our iterative approach to product delivery.","type":"navigationSubsection","showCards":true,"quickstarts":false,"children":[{"title":"Product Lifecycle","description":"Learn how we’re constantly improving.","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle","showCards":true,"children":[{"title":"Product Release Stages","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},{"title":"Migration Process","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fmigration-process"},{"title":"Deprecations and Migrations","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fdeprecations-and-migrations","showCards":true,"children":[{"title":"Migrate from Node 12 and 16 to Node 18","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fdeprecations-and-migrations\u002Fmigrate-nodejs-16-to-nodejs-18"}]},{"title":"Past Migrations","type":"navigationItem","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations","showCards":true,"children":[{"title":"Migrate from edge.js extensibility features","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-from-edge-js-extensibility-features"},{"title":"Migrate from oracledb extensibility features","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-from-oracledb-extensibility-features"},{"title":"Migrate Custom Claims","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fcustom-claims-migration"},{"title":"Migrate from Log Extensions","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-from-log-extensions"},{"title":"Migrate Tenant Hostname Validation","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Ftenant-hostname-migration"},{"title":"Migrate to Node.js 16","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-nodejs-16"},{"title":"Migrate from Node.js 8 to Node.js 12","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-nodejs-12"},{"title":"Migrate to Management API v2 Endpoint Paginated Queries","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-paginated-queries"},{"title":"Migrate to New Tenant Member Roles","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-tenant-member-roles"},{"title":"Migrate from Search v2 to v3","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-v2-v3"},{"title":"Migrate to Passwordless Endpoint from Confidential Applications","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-passwordless"},{"title":"Clickjacking Protection for Universal Login Change","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fclickjacking-protection-for-universal-login"},{"title":"Migrate to Management API Endpoints with Access Tokens","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-calling-api-with-access-tokens"},{"title":"Migrate to Access Tokens for Account Linking","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Flink-user-accounts-with-access-tokens-migration"},{"title":"Migrate Your Resource Owner Passwordless Credentials Exchange","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fresource-owner-passwordless-credentials-exchange"},{"title":"Migrate Your Resource Owner Password Flow","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigration-oauthro-oauthtoken"},{"title":"Instagram Connection Deprecation","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Finstagram-connection-deprecation"},{"title":"Yahoo API Changes","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fyahoo-api-changes"},{"title":"Migrate from Google to Firebase Cloud Messaging","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fgoogle-firebase-migration"},{"title":"Facebook Social Context Field Deprecation","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Ffacebook-social-context-field-deprecation"},{"title":"Facebook Graph API Changes","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Ffacebook-graph-api-changes"},{"title":"Migrate from Embedded Login to Universal Login","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-from-embedded-login-to-universal-login"},{"title":"Migrate from Legacy Authentication Flows","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-from-legacy-auth-flows"},{"title":"Migrate to Tenant Log Search v3","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-tenant-log-search-v3"},{"title":"Migrate to 1-Hour Login Flows Expiration","type":"article","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fpast-migrations\u002Fmigrate-to-1-hour-expiration"}]}]}]},{"title":"Auth0 Community","type":"externalLink","url":"https:\u002F\u002Fcommunity.auth0.com\u002F","external":true,"forceFullReload":true},{"title":"Auth0 Blog","type":"externalLink","url":"https:\u002F\u002Fauth0.com\u002Fblog\u002F","external":true,"forceFullReload":true}]}],"apis":[{"title":"Overview","url":"\u002Fdocs\u002Fapi"},{"title":"Testing with Postman","url":"\u002Fdocs\u002Fapi\u002Fuse-auth0-apis-with-postman-collections","hidden":true},{"title":"Authentication API","url":"\u002Fdocs\u002Fapi\u002Fauthentication","external":true,"forceFullReload":true},{"title":"Changes in Management API v2","url":"\u002Fdocs\u002Fapi\u002Fmanagement-api-changes-v1-to-v2","forceFullReload":true,"hidden":true},{"title":"Management API Explorer","url":"\u002Fdocs\u002Fapi\u002Fmanagement\u002Fv2\u002F","forceFullReload":true,"external":true}],"libraries":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries"},{"title":"Auth0 Single Page App SDK","url":"\u002Fdocs\u002Flibraries\u002Fauth0-single-page-app-sdk","children":[{"title":"Migrate from auth0.js","url":"\u002Fdocs\u002Flibraries\u002Fauth0-single-page-app-sdk\u002Fmigrate-from-auth0-js-to-the-auth0-single-page-app-sdk","hidden":true}]},{"title":"Auth0 React SDK","url":"\u002Fdocs\u002Flibraries\u002Fauth0-react"},{"title":"Auth0 Angular SPA SDK","url":"\u002Fdocs\u002Flibraries\u002Fauth0-angular-spa"},{"title":"Lock for Web","url":"\u002Fdocs\u002Flibraries\u002Flock","children":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries\u002Flock"},{"title":"Configuration Options","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Flock-configuration"},{"title":"API Reference","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Flock-api-reference"},{"title":"UI Customization","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Flock-ui-customization"},{"title":"Internationalization","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Flock-internationalization"},{"title":"Customizing Errors","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Fcustomize-lock-error-messages"},{"title":"Authentication Modes","url":"\u002Fdocs\u002Flibraries\u002Flock\u002Flock-authentication-modes"}]},{"title":"Lock for iOS","url":"\u002Fdocs\u002Flibraries\u002Flock-swift","children":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries\u002Flock-swift"},{"title":"Styles Customization","url":"\u002Fdocs\u002Flibraries\u002Flock-swift\u002Flock-swift-customization"},{"title":"Behavior Configuration","url":"\u002Fdocs\u002Flibraries\u002Flock-swift\u002Flock-swift-configuration-options"},{"title":"Custom Fields","url":"\u002Fdocs\u002Flibraries\u002Flock-swift\u002Flock-swift-custom-fields-at-signup"},{"title":"Internationalization","url":"\u002Fdocs\u002Flibraries\u002Flock-swift\u002Flock-swift-internationalization"}]},{"title":"Lock for Android","url":"\u002Fdocs\u002Flibraries\u002Flock-android","children":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries\u002Flock-android"},{"title":"Configuration Options","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-configuration"},{"title":"Custom Auth Providers","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-custom-authentication-providers"},{"title":"Android Dev Keystores","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fandroid-development-keystores-hashes"},{"title":"Custom Signup Fields","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-custom-fields-at-signup"},{"title":"Custom Theming","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-custom-theming"},{"title":"Internationalization","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-internationalization"},{"title":"Passwordless","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-passwordless"},{"title":"Passwordless with Magic Link","url":"\u002Fdocs\u002Flibraries\u002Flock-android\u002Flock-android-passwordless-with-magic-link"}]},{"title":"Lock vs. Custom UI","url":"\u002Fdocs\u002Funiversal-login\u002Funiversal-login-page-customization"},{"title":"Auth0 SDK for Web","url":"\u002Fdocs\u002Flibraries\u002Fauth0js-v9-reference"},{"title":"Auth0 SDK for iOS","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift","children":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift"},{"title":"Database Authentication","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift\u002Fauth0-swift-database-connections"},{"title":"User Management","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift\u002Fauth0-swift-user-management"},{"title":"Refresh Tokens","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift\u002Fauth0-swift-save-and-renew-tokens"},{"title":"Touch ID \u002F Face ID","url":"\u002Fdocs\u002Flibraries\u002Fauth0-swift\u002Fauth0-swift-touchid-faceid"}]},{"title":"Auth0 SDK for Android","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android","children":[{"title":"Overview","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android"},{"title":"Login, Logout, and User Profiles","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-login-logout-and-user-profiles"},{"title":"Configuration","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-configuration"},{"title":"Database Authentication","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-database-authentication"},{"title":"Passwordless Authentication","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-passwordless"},{"title":"User Management","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-user-management"},{"title":"Refresh Tokens","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-save-and-renew-tokens"},{"title":"Custom Networking Client","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-custom-networking-client"},{"title":"V2 Migration Guide","url":"\u002Fdocs\u002Flibraries\u002Fauth0-android\u002Fauth0-android-v2-migration-guide"}]}],"videos":[{"title":"Learn Identity","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series","children":[{"title":"Introduction to Identity","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fintroduction-to-identity"},{"title":"OpenID Connect and OAuth2","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fopenid-connect-and-oauth2"},{"title":"Web Sign-In","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fweb-sign-in"},{"title":"Calling an API","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fcalling-an-api"},{"title":"Desktop and Mobile Apps","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fdesktop-and-mobile-apps"},{"title":"Single Page Apps","url":"\u002Fdocs\u002Fvideos\u002Flearn-identity-series\u002Fsingle-page-apps"}]},{"title":"Get Started","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series","children":[{"title":"Architect: Your Tenant","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Farchitect-your-tenant"},{"title":"Provision: User Stores","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fprovision-user-stores"},{"title":"Provision: Import Users","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fprovision-import-users"},{"title":"Authenticate: How It Works","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fauthenticate-how-it-works"},{"title":"Authenticate: SPA Example","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fauthenticate-spa-example"},{"title":"Authorize: ID Tokens and Access Control","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fauthorize-id-tokens-and-access-control"},{"title":"Authorize: Get and Validate ID Tokens","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fauthorize-get-and-validate-id-tokens"},{"title":"User Profiles","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Flearn-user-profiles"},{"title":"Brand: How It Works","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fbrand-how-it-works"},{"title":"Brand: Sign Up and Login Pages","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fbrand-signup-and-login-pages"},{"title":"Brand: Emails and Error Pages","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Fbrand-emails-and-error-pages"},{"title":"Logout","url":"\u002Fdocs\u002Fvideos\u002Fget-started-series\u002Flearn-logout"}]}],"identity-labs":[{"title":"Digital Identity Labs","url":"\u002Fdocs\u002Fidentity-labs","children":[{"title":"Lab 1: Web Sign-In","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-1-web-sign-in","children":[{"title":"Exercise 1","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-1-web-sign-in\u002Fidentity-lab-1-exercise-1"},{"title":"Exercise 2","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-1-web-sign-in\u002Fidentity-lab-1-exercise-2"}]},{"title":"Lab 2: Calling an API","url":"\u002Fdocs\u002Fidentity-labs\u002Fidentity-lab-2-calling-api","children":[{"title":"Exercise 1","url":"\u002Fdocs\u002Fidentity-labs\u002Fidentity-lab-2-calling-api\u002Fidentity-lab-2-exercise-1"},{"title":"Exercise 2","url":"\u002Fdocs\u002Fidentity-labs\u002Fidentity-lab-2-calling-api\u002Fidentity-lab-2-exercise-2"},{"title":"Exercise 3","url":"\u002Fdocs\u002Fidentity-labs\u002Fidentity-lab-2-calling-api\u002Fidentity-lab-2-exercise-3"}]},{"title":"Lab 3: Mobile Native App","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-3-mobile-native-app","children":[{"title":"Exercise 1","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-3-mobile-native-app\u002Fidentity-lab-3-exercise-1"},{"title":"Exercise 2","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-3-mobile-native-app\u002Fidentity-lab-3-exercise-2"},{"title":"Exercise 3","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-3-mobile-native-app\u002Fidentity-lab-3-exercise-3"}]},{"title":"Lab 4: Single Page App","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-4-single-page-app","children":[{"title":"Exercise 1","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-4-single-page-app\u002Fidentity-lab-4-exercise-1"},{"title":"Exercise 2","url":"\u002Fdocs\u002Fidentity-labs\u002Flab-4-single-page-app\u002Fidentity-lab-4-exercise-2"}]}]}]}},"cards":null,"glossary":{"terms":[{"id":"access-token","title":"Access Token","associatedPage":{"title":"Access Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens"},"definition":"\u003Cp\u003ECredential that can be used by an application to access an API. It informs the API that the bearer of the token has been authorized to access the API and perform specific actions specified by the scope that has been granted. An Access Token can be in any format, but two popular options include opaque strings and JSON Web Tokens (JWT). They should be transmitted to the API as a Bearer credential in an HTTP Authorization header.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuthorization credential, in the form of an opaque string or JWT, used to access an API.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["access token","access tokens"]},{"id":"account linking","title":"Account Linking","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EConnecting user accounts across multiple platforms to allow users access to more than one resource or application by providing credentials one time.\u003C\u002Fp\u003E","short":"\u003Cp\u003EConnecting user accounts across multiple platforms.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["account linking"]},{"id":"actions","title":"Actions","associatedPage":{"title":"Actions","url":"\u002Fdocs\u002Fcustomize\u002Factions"},"definition":"\u003Cp\u003ESecure, tenant-specific, versioned functions written in Node.js that execute at certain points during the Auth0 runtime. Actions are used to customize and extend Auth0's capabilities with custom logic.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESecure, tenant-specific, versioned functions written in Node.js that execute at certain points during the Auth0 runtime.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["actions","action"]},{"id":"adaptive-multi-factor-authentication","title":"Adaptive Multi-factor Authentication","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EMulti-factor authentication (MFA) that is only triggered for users when an attempted login is determined to be a low confidence login. With Adaptive MFA, Auth0 triggers MFA only when needed to add friction for bad actors while keeping the login experience unchanged for good actors.\u003C\u002Fp\u003E","short":"\u003Cp\u003EMulti-factor authentication (MFA) that is only triggered for users when an attempted login is determined to be a low confidence login. \u003C\u002Fp\u003E","automate":true,"automaticTerms":["adaptive multi-factor authentication","adaptive MFA","adaptive multifactor authentication"]},{"id":"application","title":"Application","associatedPage":{"title":"Applications in Auth0","url":"\u002Fdocs\u002Fget-started\u002Fapplications"},"definition":"\u003Cp\u003EYour software that relies on Auth0 for authentication and identity management. Auth0 supports single-page, regular web, native, and machine-to-machine applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EYour software that relies on Auth0 for authentication and identity management. Auth0 supports single-page, regular web, native, and machine-to-machine applications.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["application","applications"]},{"id":"attack-protection","title":"Attack Protection","associatedPage":{"title":"Attack Protection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection"},"definition":"\u003Cp\u003EFeatures that Auth0 provides to detect and mitigate attacks, including brute-force protection, suspicious IP throttling, breached password detection, bot detection, and adaptive multi-factor authentication.\u003C\u002Fp\u003E","short":"\u003Cp\u003EFeatures that Auth0 provides to detect and mitigate attacks, including brute-force protection, suspicious IP throttling, breached password detection, bot detection, and adaptive multi-factor authentication.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["attack protection"]},{"id":"audience","title":"Audience","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EUnique identifier of the audience for an issued token, identified within a JSON Web Token as the \u003Cb\u003Eaud\u003C\u002Fb\u003E claim. The audience value is either the application (\u003Ccode\u003EClient ID\u003C\u002Fcode\u003E) for an ID Token or the API that is being called (\u003Ccode\u003EAPI Identifier\u003C\u002Fcode\u003E) for an Access Token. At Auth0, the Audience value sent in a request for an Access Token dictates whether that token is returned in an opaque or JWT format.\u003C\u002Fp\u003E","short":"\u003Cp\u003EUnique identifier of the audience for an issued token. Named \u003Cb\u003Eaud\u003C\u002Fb\u003E in a token, its value contains the ID of either an application (\u003Ccode\u003EClient ID\u003C\u002Fcode\u003E) for an ID Token or an API (\u003Ccode\u003EAPI Identifier\u003C\u002Fcode\u003E) for an Access Token.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["audience"]},{"id":"auth0-dashboard","title":"Auth0 Dashboard","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0’s primary administrator interface in which you can register your application or API, connect to a user store or another identity provider, and configure your Auth0 services.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0's main product to configure your services.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["auth0 dashboard"]},{"id":"authentication-server","title":"Authentication Server","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EServer that confirms or denies a user’s identity. An authentication server does not limit the actions or resources available to the user (although it can provide context for this purpose).\u003C\u002Fp\u003E","short":"\u003Cp\u003EServer that confirms or denies a user’s identity.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["authentication server","authentication servers"]},{"id":"authorization-code","title":"Authorization Code","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ERandom string generated by the authorization server and returned to the application as part of the authorization response. The authorization code is relatively short-lived and is exchanged for an Access Token at the token endpoint when using the Authorization Code Flow (either with or without Proof Key for Code Exchange (PKCE)).\u003C\u002Fp\u003E","short":"\u003Cp\u003ERandom string generated by the authorization server and returned to the application as part of the authorization response when using the Authorization Code Flow (either with or without PKCE).\u003C\u002Fp\u003E","automate":false,"automaticTerms":["authorization code","auth code","authorization codes","auth codes"]},{"id":"authorization-flow","title":"Authorization Flow","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAnother name for Authorization Grants outlined in OAuth 2.0. Authorization flows are the workflows a resource (an application or an AIP) uses to grant requestors access. Based on the type of technology (for example, if an application can store a Client Secret) and the type of requestor, resource owners can use Authorization Code Flow, Proof of Key Code Exchange (PKCE), Resource Owner Password Credential (ROPG), Implicit, or Client Credential.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuthorization grant (or workflow) specified in the OAuth 2.0 framework.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["authorization flow","authorization flows"]},{"id":"authorization-server","title":"Authorization Server","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ECentralized server that contributes to defining the boundaries of a user’s access. For example, your authorization server can control the data, tasks, and features available to a user. An authorization server does not authenticate users. It’s the role of the authentication server to verify a user’s identity.\u003C\u002Fp\u003E","short":"\u003Cp\u003ECentralized server that contributes to defining the boundaries of a user’s access. For example, your authorization server can control the data, tasks, and features available to a user.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["authorization server","authorization servers"]},{"id":"bad-actors","title":"Bad Actors","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAlso known as threat actors. Entity (a person or group) that poses a threat to the business or environment with the intention to cause harm. Harm can constitute physical or cyber damages, from breaking into a data center to hacking into systems with stolen credentials.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity (a person or group) that poses a threat to the business or environment with the intention to cause harm.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["bad actors","bad actor"]},{"id":"beta","title":"Beta","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is provided to subscribers to give them time to explore and adopt new product capabilities while providing final feedback prior to a General Availability (GA) release. Functionality is code-complete, stable, useful in a variety of scenarios, and believed to meet or almost meet quality expectations for a GA release. Beta releases may be restricted to a select number of subscribers (private) or open to all subscribers (public).\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage during which subscribers can explore and adopt new product capabilities while providing final feedback prior to a General Availability (GA) release. Beta releases may be public or private.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["beta","betas"]},{"id":"block-unblock","title":"Block\u002FUnblock Users","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ERemoving or restoring a requestor's access to a resource. Refers to the features from Auth0's Attack Protection suite: Breached Password Detection, Brute-Force Protection, and Suspicious IP Throttling. Each service assesses login\u002Fsign-up trends and blocks IP addresses associated with suspicious activity.\u003C\u002Fp\u003E","short":"\u003Cp\u003ERemoving or restoring a requestor's access to a resource.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["block\u002Funblock users","block\u002Funblock user"]},{"id":"bot-detection","title":"Bot Detection","associatedPage":{"title":"Bot Detection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection"},"definition":"\u003Cp\u003EForm of attack protection in which Auth0 blocks suspected bot traffic by enabling a CAPTCHA during the login process.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection in which Auth0 blocks suspected bot traffic by enabling a CAPTCHA during the login process.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["bot detection"]},{"id":"breached-password-detection","title":"Breached Password Detection","associatedPage":{"title":"Breached Password Detection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbreached-password-detection"},"definition":"\u003Cp\u003EForm of attack protection in which Auth0 notifies your users if they use a username\u002Fpassword combination that has been compromised in a data leak on a third-party website or app.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection in which Auth0 notifies your users if they use a username\u002Fpassword combination that has been compromised in a data leak on a third-party website or app.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["breached password detection"]},{"id":"breaking-change","title":"Breaking Change","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EChange to the Auth0 platform that, to Auth0's knowledge, will cause failures in the interoperation of the Auth0 platform and customer applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EChange to the Auth0 platform that, to Auth0's knowledge, will cause failures in the interoperation of the Auth0 platform and customer applications.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["breaking change","breaking changes"]},{"id":"brute-force-protection","title":"Brute-force Protection","associatedPage":{"title":"Brute-Force Protection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbrute-force-protection"},"definition":"\u003Cp\u003EForm of attack protection that safeguards against brute-force attacks that occur from a single IP address and target a single user account.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection that safeguards against brute-force attacks that occur from a single IP address and target a single user account.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["brute-force protection","brute force protection"]},{"id":"callback","title":"Callback","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EURL to which Auth0 sends its response after authentication. It is often the same URL to which a user is redirected after authentication.\u003C\u002Fp\u003E","short":"\u003Cp\u003EURL to which Auth0 sends its response after an API call and sometimes where a user is redirected after authentication.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["callback","callbacks"]},{"id":"claim","title":"Claim","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAttribute packaged in a security token which represents a claim that the provider of the token is making about an entity.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAttribute packaged in a security token which represents a claim that the provider of the token is making about an entity.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["claim","claims"]},{"id":"client-id","title":"Client ID","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EIdentification value assigned to your application after registration. This value is used in conjunction with other third-party services and can be found in \u003Cb\u003EAuth0 Dashboard\u003C\u002Fb\u003E > \u003Cb\u003EApplication Settings\u003C\u002Fb\u003E.\u003C\u002Fp\u003E","short":"\u003Cp\u003EIdentification value given to your registered resource from Auth0.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["client id","client ids"]},{"id":"client-secret","title":"Client Secret","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESecret used by a client (application) to authenticate with the Authorization Server; it should be known to only the client and the Authorization Server and must be sufficiently random to not be guessable.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESecret used by a client (application) to authenticate with the Authorization Server; it should be known to only the client and the Authorization Server and must be sufficiently random to not be guessable.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["client secret","client secrets"]},{"id":"confidential-client","title":"Confidential Client","associatedPage":{"title":"Confidential and Public Applications","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications"},"definition":"\u003Cp\u003EAccording to the OAuth 2.0 protocol, clients (applications) can be classified as either confidential or public depending on whether or not they are able to hold credentials (such as a client ID and secret) securely. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties and require a trusted backend server to do so. They can use grant types that require them to authenticate by specifying their client ID and secret when calling the token endpoint and can have tokens issued to them that have been signed either symmetrically or asymmetrically.\u003C\u002Fp\u003E","short":"\u003Cp\u003EA client (application) that can hold credentials securely by using a trusted backend server. Examples include a web application with a secure backend and a machine-to-machine (M2M) application.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["confidential client","confidential clients"]},{"id":"confused-deputy","title":"Confused Deputy","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESituation in which an attacker tricks a client or service into performing an action on their behalf.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESituation in which an attacker tricks a client or service into performing an action on their behalf.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["confused deputy","confused deputies"]},{"id":"connection","title":"Connection","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ERelationship between Auth0 and the sources of users for your applications. Examples include identity providers (such as Google or Active Directory), passwordless authentication methods, or user databases.\u003C\u002Fp\u003E","short":"\u003Cp\u003ERelationship between Auth0 and the sources of users for your applications.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["connection","connections"]},{"id":"custom-domain","title":"Custom Domain","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EThird-party domain with a specialized, or vanity, name. Also known as a CNAME.\u003C\u002Fp\u003E","short":"\u003Cp\u003EThird-party domain with a specialized, or vanity, name.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["custom domain","custom domains"]},{"id":"deprecation","title":"Deprecation","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is not supported for use by new subscribers, is not actively being enhanced, and is being only minimally maintained. Tenants using the feature or behavior at the time of deprecation will continue to have access.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is not supported for use by new subscribers, is not actively being enhanced, and is being only minimally maintained.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["deprecation","deprecations"]},{"id":"digital-identity","title":"Digital Identity","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESet of attributes that define a particular user in the context of a function which is delivered by a particular application.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESet of attributes that define a particular user in the context of a function which is delivered by a particular application.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["digital identity","digital identities"]},{"id":"digital-signature","title":"Digital Signature","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEncrypted string that protects bits in a token from tampering. If the bits are changed or tampered with, the signature will no longer be able to be verified and it will be rejected.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEncrypted string that protects bits in a token from tampering.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["digital signature","digital signatures"]},{"id":"directory","title":"Directory","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ECentralized repository of users (the most well-known of which is Active Directory) which centralizes credentials and attributes and makes it unnecessary for each application to have their own local identity setup and pool of users. Allows single sign on to all applications that use the same directory of users.\u003C\u002Fp\u003E","short":"\u003Cp\u003ECentralized repository of users that allows single sign on to all applications that use the same directory.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["directory","directories"]},{"id":"early-access","title":"Early Access","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is provided to a limited number of subscribers or customer development partners (CDPs) to give them the opportunity to test and provide feedback on future functionality. At this stage, functionality may not be complete, but is ready for validation.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is provided to a limited number of subscribers or customer development partners (CDPs) to give them the opportunity to test and provide feedback on future functionality.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["early access","ea"]},{"id":"end-of-life","title":"End of Life","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is removed from the platform. Continued use of the feature or behavior will likely result in errors. The new behavior will automatically be enabled for Tenants that did not opt in during the migration window.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is removed from the platform. Continued use of the feature or behavior will likely result in errors.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["end of life","eol"]},{"id":"end-of-life-date","title":"End of Life Date","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EDate when access to a feature or behavior is removed from the platform. End Of Life Dates can vary between different plan types.\u003C\u002Fp\u003E","short":"\u003Cp\u003EDate when access to a feature or behavior is removed from the platform. End Of Life Dates can vary between different plan types.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["end of life date","end of life dates","eol date"]},{"id":"fine-grained-auth","title":"Fine-grained Authorization (FGA)","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0’s SaaS product that gives individual users access to specific objects or resources within your application.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0 product allowing individual users access to specific objects or resources.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["fine-grained authorization (fga)","fine-grained authorization","FGA"]},{"id":"flow","title":"Flow","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EProcesses that can be extended using Actions. Each Flow is made up of one or more Triggers and represents the logical pipeline through which information moves during a single point in the Auth0 journey.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProcesses that can be extended using Actions. Each Flow is made up of one or more Triggers and represents the logical pipeline through which information moves during a single point in the Auth0 journey.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["flow","flows"]},{"id":"general-availability","title":"General Availability","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is fully functional and available to all subscribers (limited by pricing tier) for production use. If a new release replaces an existing feature, Auth0 provides a period of backward compatibility in accordance with our deprecation policy and informs customers so they have time to adopt the new release.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is fully functional and available to all subscribers (limited by pricing tier) for production use.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["general availability","GA"]},{"id":"group","title":"Group","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESet of one or more users. In the Auth0 Authorization Extension, use groups to grant access to many users at a time.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESet of one or more users. In the Auth0 Authorization Extension, use groups to grant access to many users at a time.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["group","groups"]},{"id":"id-token","title":"ID Token","associatedPage":{"title":"ID Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens"},"definition":"\u003Cp\u003ECredential meant for the client itself, rather than for accessing a resource. It has a fixed format that clients can parse and validate.\u003C\u002Fp\u003E","short":"\u003Cp\u003ECredential meant for the client itself, rather than for accessing a resource.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["id token","id tokens","identity token","identity tokens"]},{"id":"idp","title":"Identity Provider (IdP)","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EService that stores and manages digital identities. Auth0 supports trusted social, enterprise, and legal identity providers. Auth0 also can function as an identity provider for your applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EService that stores and manages digital identities.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["identity provider (idp)","identity providers","identity provider","idp","idps","identity providers (idps)"]},{"id":"json-web-token","title":"JSON Web Token (JWT)","associatedPage":{"title":"JSON Web Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens"},"definition":"\u003Cp\u003EOpen, industry standard \u003Ca href=\"https:\u002F\u002Ftools.ietf.org\u002Fhtml\u002Frfc7519\"\u003ERFC 7519\u003C\u002Fa\u003E method for representing claims securely between two parties. At Auth0, ID Tokens are always returned in JWT format, and Access Tokens are often in JWT format. You may decode well-formed JWTs at \u003Ca href=\"https:\u002F\u002Fjwt.io\"\u003EJWT.io\u003C\u002Fa\u003E to view their claims.\u003C\u002Fp\u003E","short":"\u003Cp\u003EStandard ID Token format (and often Access Token format) used to represent claims securely between two parties.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["json web token (jwt)","json web token","json web tokens","jwt","jwts","json web tokens (jwts)"]},{"id":"localization","title":"Localization","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAbility to render the New Universal Login experience into a supported language.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAbility to render the New Universal Login experience into a supported language.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["localization"]},{"id":"lock","title":"Lock","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0's UI widget for authenticating users. It is ready to go as-is and is the default face of the Classic Universal Login experience. Lock allows you to customize minor behavioral and appearance options, but its primary goal is ease of use.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0's UI widget for authenticating users.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["lock"]},{"id":"management-api","title":"Management API","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0's API to manage Auth0 services and perform administrative tasks programatically.\u003C\u002Fp\u003E","short":"\u003Cp\u003EA product to allow customers to perform administrative tasks. \u003C\u002Fp\u003E","automate":true,"automaticTerms":["management api"]},{"id":"metadata","title":"Metadata","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EInformation users can update, such as preferences or profile settings. Metadata is added to ID tokens and can be stored in user profiles.\u003C\u002Fp\u003E","short":"\u003Cp\u003EUser information stored in user profiles.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["metadata"]},{"id":"migration","title":"Migration","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EProcess by which a customer moves away from a particular feature or behavior. Migrations should occur during the Deprecation product release stage.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProcess by which a customer moves away from a particular feature or behavior. Migrations should occur during the Deprecation product release stage.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["migration","migrations"]},{"id":"multifactor-authentication","title":"Multi-factor authentication (MFA)","associatedPage":{"title":"Multi-Factor Authentication","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication"},"definition":"\u003Cp\u003EAuthentication process that considers multiple factors. Typically at Auth0, the first factor is the standard username\u002Fpassword exchange, and the second is a code or link via email or SMS, a one-time-password via an app such as Authy or Google Authenticator, or a push notification via a phone app such as Guardian or Duo. Using multiple factors allows your account to remain secure if someone captures one or the other factor--acquires your password or steals your phone, for example.\u003C\u002Fp\u003E","short":"\u003Cp\u003EUser authentication process that uses a factor in addition to username and password such as a code via SMS.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["multi-factor authentication (mfa)","multi-factor authentication","multifactor authentication","mfa"]},{"id":"nonce","title":"Nonce","associatedPage":{"title":"Mitigate Replay Attacks When Using the Implicit Flow","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fimplicit-flow-with-form-post\u002Fmitigate-replay-attacks-when-using-the-implicit-flow"},"definition":"\u003Cp\u003EArbitrary (often random or pseudo-random) number issued in an authentication protocol that can be used to help detect and mitigate replay attacks using old communications. In other words, the nonce is only issued once, so if an attacker attempts to replay a transaction with a different nonce, its false transaction can be detected more easily.\u003C\u002Fp\u003E","short":"\u003Cp\u003EArbitrary number issued once in an authentication protocol to detect and prevent replay attacks.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["nonce","nonces"]},{"id":"oath2","title":"OAuth 2.0","associatedPage":{"title":"OAuth 2.0 Authorization Framework","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Foauth"},"definition":"\u003Cp\u003EAuthorization framework that defines authorization protocols and workflows. OAuth 2.0 defines roles, authorization grants (or workflows), authorization requests and responses, and token handling. OpenID Connect (OIDC) protocols to verify user identity extends OAuth 2.0.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuthorization framework that defines authorization protocols and workflows.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["oauth 2.0","oauth"]},{"id":"openid","title":"OpenID","associatedPage":{"title":"OpenID Connect Protocol","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fopenid-connect-protocol"},"definition":"\u003Cp\u003EOpen standard for authentication that allows applications to verify users are who they say they are without needing to collect, store, and therefore become liable for a user’s login information.\u003C\u002Fp\u003E","short":"\u003Cp\u003EOpen standard for authentication that allows applications to verify users' identities without collecting and storing login information.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["openid"]},{"id":"organizations","title":"Organizations","associatedPage":{"title":"Organizations","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations"},"definition":"\u003Cp\u003EAuth0 product that allows B2B customers to categorize end-users and define specific roles, login experience, and access to resources.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0 product that allows B2B customers to categorize end-users and define specific roles.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["organizations","organization"]},{"id":"passwordless","title":"Passwordless","associatedPage":{"title":"Passwordless","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless"},"definition":"\u003Cp\u003EForm of authentication where the first factor is not a password. Instead, it could be a one-time password received by email or SMS, a push notification, or a biometric sensor. Passwordless uses one-time passwords, so users are less susceptible to the typical password-based attacks (e.g., dictionary or credential stuffing) than with traditional username\u002Fpassword logins.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of authentication that does not rely on a password as the first factor.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["passwordless"]},{"id":"perimeter","title":"Perimeter","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESet of boundaries that encompass a directory, all of its users, and all of the applications which use the directory. In some implementations, this perimeter is a physical location; in others, it is a set of networks or devices connected via VPN.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESet of boundaries that encompass a directory, all of its users, and all of the applications which use the directory.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["perimeter","perimeters"]},{"id":"product-release-stages","title":"Product Release Stages","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EPhases that describe how Auth0 stages, releases, and retires product functionality. Product features may not progress through all release stages, and the time in each stage will vary depending on the scope and impact of the feature.\u003C\u002Fp\u003E","short":"\u003Cp\u003EPhases that describe how Auth0 stages, releases, and retires product functionality.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["product release stages","product release stage"]},{"id":"public-client","title":"Public Client","associatedPage":{"title":"Confidential and Public Applications","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications"},"definition":"\u003Cp\u003EAccording to the OAuth 2.0 protocol, clients (applications) can be classified as either confidential or public depending on whether or not they are able to hold credentials (such as a client ID and secret) securely. Public clients cannot hold credentials securely, so should only use grant types that do not require the use of their client secret. ID Tokens issued to them must be signed asymmetrically using a private key (RS256) and verified using the public key corresponding to the private key used to sign the token.\u003C\u002Fp\u003E","short":"\u003Cp\u003EClient (application) that cannot hold credentials securely. Examples include a native desktop or mobile application and a JavaScript-based client-side web application (such as a single-page app (SPA)).\u003C\u002Fp\u003E","automate":true,"automaticTerms":["public client","public clients"]},{"id":"raw-credential","title":"Raw Credential","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EShared secret or set of information that is agreed upon between the user and the resource that allow the resource to verify the identity of a user.\u003C\u002Fp\u003E","short":"\u003Cp\u003EShared secret or set of information that is agreed upon between the user and the resource that allow the resource to verify the identity of a user.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["raw credential","raw credentials"]},{"id":"refresh-token","title":"Refresh Token","associatedPage":{"title":"Refresh Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens"},"definition":"\u003Cp\u003ESpecial kind of token that can be used to obtain a renewed Access Token. It is useful for renewing expiring Access Tokens without forcing the user to log in again. Using the Refresh Token, you can request a new Access Token at any time until the Refresh Token is blocklisted.\u003C\u002Fp\u003E","short":"\u003Cp\u003EToken used to obtain a renewed Access Token without forcing users to log in again.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["refresh token","refresh tokens"]},{"id":"refresh-token-rotation","title":"Refresh Token Rotation","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EStrategy of frequently replacing refresh tokens to minimize vulnerability. With refresh token rotation, every time your application exchanges a refresh token to get a new access token, Auth0 also returns a new refresh token.\u003C\u002Fp\u003E","short":"\u003Cp\u003EStrategy of frequently replacing refresh tokens to minimize vulnerability. With refresh token rotation, every time your application exchanges a refresh token to get a new access token, Auth0 also returns a new refresh token.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["refresh token rotation"]},{"id":"relying-party","title":"Relying Party","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEntity (such as a service or application) that depends on a third-party identity provider to authenticate a user.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity (such as a service or application) that depends on a third-party identity provider to authenticate a user.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["relying party","relying parties"]},{"id":"resource-owner","title":"Resource Owner","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEntity (such as a user or application) capable of granting access to a protected resource.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity (such as a user or application) capable of granting access to a protected resource.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["resource owner","resource owners"]},{"id":"resource-server","title":"Resource Server","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EServer hosting protected resources. Resource servers accept and respond to protected resource requests.\u003C\u002Fp\u003E","short":"\u003Cp\u003EServer hosting protected resources. Resource servers accept and respond to protected resource requests.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["resource server","resource servers"]},{"id":"role","title":"Role","associatedPage":{"title":"Role-Based Access Control","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Frbac"},"definition":"\u003Cp\u003EAspect of a user’s identity assigned to the user to indicate the level of access they should have to the system. Roles are essentially collections of permissions.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAspect of a user’s identity assigned to the user to give them a certain set of permissions.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["role","roles"]},{"id":"scope","title":"Scope","associatedPage":{"title":"Scopes","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fscopes"},"definition":"\u003Cp\u003EMechanism that defines the specific actions applications can be allowed to do or information that they can request on a user’s behalf. Often, applications will want to make use of the information that has already been created in an online resource. To do so, the application must ask for authorization to access this information on a user’s behalf. When an app requests permission to access a resource through an authorization server, it uses the Scope parameter to specify what access it needs, and the authorization server uses the Scope parameter to respond with the access that was actually granted.\u003C\u002Fp\u003E","short":"\u003Cp\u003EMechanism that determines actions applications can perform on a user's behalf with information previously created in an online resource.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["scope","scopes"]},{"id":"security-assertion-markup-language","title":"Security Assertion Markup Language (SAML)","associatedPage":{"title":"SAML","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml"},"definition":"\u003Cp\u003EXML-based standardized protocol by which two parties can exchange authentication information without the use of a password.\u003C\u002Fp\u003E","short":"\u003Cp\u003EStandardized protocol allowing two parties to exchange authentication information without a password.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["security assertion markup language (saml)","security assertion markup language","saml"]},{"id":"security-token","title":"Security Token","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EDigitally-signed artifact used to prove that the user was successfully authenticated.\u003C\u002Fp\u003E","short":"\u003Cp\u003EDigitally-signed artifact used to prove that the user was successfully authenticated.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["security token","security tokens"]},{"id":"session-cookie","title":"Session Cookie","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEntity emitted by middleware after it establishes that the token it is receiving is signed, valid, and comes from a trusted source (the identity provider). This entity represents the fact that successful authentication occurred with the identity provider. This cookie prevents this process with tokens from needing to be continually repeated, by allowing the user to be considered authenticated as long as the cookie is present.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity that, when present, allows the user to be considered authenticated.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["session cookie","session cookies"]},{"id":"shadow-account","title":"Shadow Account","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EDifficult-to-sustain practice of manually provisioning a user from a local directory separately in a remote directory (essentially creating a copy, or shadow, of the original account) when they need access to remote applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EDifficult-to-sustain practice of manually provisioning a user from a local directory separately in a remote directory.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["shadow account","shadow accounts"]},{"id":"signing-algorithm","title":"Signing Algorithm","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EHashing algorithm used to digitally sign tokens to ensure the token has not been tampered with by bad actors.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAlgorithm used to digitally sign tokens to ensure the token has not been tampered with.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["signing algorithm","signing algorithms"]},{"id":"single-sign-on","title":"Single Sign-On (SSO)","associatedPage":{"title":"Single Sign-On","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on"},"definition":"\u003Cp\u003EService that, after a user logs into one application, automatically logs that user in to other applications, regardless of the platform, technology, or domain the user is using. The user signs in only one time (hence the name of the feature). Similarly, Single Logout (SLO) occurs when, after a user logs out from one application, they are logged out of each application or service where they were logged in. SSO and SLO are possible through the use of sessions.\u003C\u002Fp\u003E","short":"\u003Cp\u003EService that, after a user logs into one applicaton, automatically logs that user in to other applications.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["single sign-on (sso)","single sign-on","single sign on","sso","single signon"]},{"id":"subscription","title":"Subscription","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAgreement that defines the features and quotas available for each of your tenants. Auth0 has multiple subscription levels to meet the needs of different developers and organizations.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAgreement that defines the features and quotas available for each of your tenants. Auth0 has multiple subscription levels to meet the needs of different developers and organizations.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["subscription","subscriptions"]},{"id":"suspicious-ip-throttling","title":"Suspicious IP Throttling","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EForm of attack protection that protects your tenant against suspicious logins targeting too many accounts from a single IP address.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection that protects your tenant against suspicious logins targeting too many accounts from a single IP address.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["suspicious ip throttling"]},{"id":"tenant","title":"Tenant","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAt Auth0, a logically-isolated group of users who share common access with specific privileges to a single software instance. No tenant can access the data of another tenant, even though multiple tenants might be running on the same machine. Tenant, in general, is a term borrowed from software multitenant architecture.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAt Auth0, a logically-isolated group of users who share common access with specific privileges to a single software instance. No tenant can access the data of another tenant, even though multiple tenants might be running on the same machine.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["tenant","tenants"]},{"id":"token-endpoint","title":"Token Endpoint","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEndpoint on the Authorization Server that is used to programmatically request tokens.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEndpoint on the Authorization Server that is used to programmatically request tokens.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["token endpoint","token endpoints"]},{"id":"trigger","title":"Trigger","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEvent that automatically invokes an Action when a specific operation, such as a user logging in, occurs at runtime. Some Triggers are executed synchronously, blocking the Flow in which they are involved, and some are executed asynchronously.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEvent that automatically invokes an Action when a specific operation, such as a user logging in, occurs at runtime.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["trigger","triggers"]},{"id":"trust","title":"Trust","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EResource trusts an identity provider or authority when that resource is willing to believe what the authority says about its users.\u003C\u002Fp\u003E","short":"\u003Cp\u003EResource trusts an identity provider or authority when that resource is willing to believe what the authority says about its users.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["trust","trusts"]},{"id":"universal-login","title":"Universal Login","associatedPage":{"title":"Auth0 Universal Login","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login"},"definition":"\u003Cp\u003EAuth0’s implementation of the authentication flow, which is the key feature of an Authorization Server. Each time a user needs to prove their identity, your \u003Ca href=\"\u002Fdocs\u002Fget-started\u002Fapplications\"\u003Eapplications\u003C\u002Fa\u003E redirect to Universal Login, and Auth0 will do what’s needed to guarantee the user’s identity.\u003C\u002Fp\u003E","short":"\u003Cp\u003EYour application redirects to Universal Login, hosted on Auth0's Authorization Server, to verify a user's identity.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["universal login"]},{"id":"ws-fed","title":"Web Service Federation (WS-Fed)","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EProtocol for managing user identities between systems, domains, and identity providers with established trust using WS-Trust. This protocol is mainly used for Microsoft products and defines policies on how to share federation metadata. \u003C\u002Fp\u003E","short":"\u003Cp\u003EProtocol for managing user identities across domains.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["web service federation (ws-fed)","web service federation","ws-fed"]}],"termsByLetter":{"A":[{"id":"access-token","title":"Access Token","associatedPage":{"title":"Access Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens"},"definition":"\u003Cp\u003ECredential that can be used by an application to access an API. It informs the API that the bearer of the token has been authorized to access the API and perform specific actions specified by the scope that has been granted. An Access Token can be in any format, but two popular options include opaque strings and JSON Web Tokens (JWT). They should be transmitted to the API as a Bearer credential in an HTTP Authorization header.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuthorization credential, in the form of an opaque string or JWT, used to access an API.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["access token","access tokens"]},{"id":"account linking","title":"Account Linking","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EConnecting user accounts across multiple platforms to allow users access to more than one resource or application by providing credentials one time.\u003C\u002Fp\u003E","short":"\u003Cp\u003EConnecting user accounts across multiple platforms.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["account linking"]},{"id":"actions","title":"Actions","associatedPage":{"title":"Actions","url":"\u002Fdocs\u002Fcustomize\u002Factions"},"definition":"\u003Cp\u003ESecure, tenant-specific, versioned functions written in Node.js that execute at certain points during the Auth0 runtime. Actions are used to customize and extend Auth0's capabilities with custom logic.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESecure, tenant-specific, versioned functions written in Node.js that execute at certain points during the Auth0 runtime.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["actions","action"]},{"id":"adaptive-multi-factor-authentication","title":"Adaptive Multi-factor Authentication","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EMulti-factor authentication (MFA) that is only triggered for users when an attempted login is determined to be a low confidence login. With Adaptive MFA, Auth0 triggers MFA only when needed to add friction for bad actors while keeping the login experience unchanged for good actors.\u003C\u002Fp\u003E","short":"\u003Cp\u003EMulti-factor authentication (MFA) that is only triggered for users when an attempted login is determined to be a low confidence login. \u003C\u002Fp\u003E","automate":true,"automaticTerms":["adaptive multi-factor authentication","adaptive MFA","adaptive multifactor authentication"]},{"id":"application","title":"Application","associatedPage":{"title":"Applications in Auth0","url":"\u002Fdocs\u002Fget-started\u002Fapplications"},"definition":"\u003Cp\u003EYour software that relies on Auth0 for authentication and identity management. Auth0 supports single-page, regular web, native, and machine-to-machine applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EYour software that relies on Auth0 for authentication and identity management. Auth0 supports single-page, regular web, native, and machine-to-machine applications.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["application","applications"]},{"id":"attack-protection","title":"Attack Protection","associatedPage":{"title":"Attack Protection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection"},"definition":"\u003Cp\u003EFeatures that Auth0 provides to detect and mitigate attacks, including brute-force protection, suspicious IP throttling, breached password detection, bot detection, and adaptive multi-factor authentication.\u003C\u002Fp\u003E","short":"\u003Cp\u003EFeatures that Auth0 provides to detect and mitigate attacks, including brute-force protection, suspicious IP throttling, breached password detection, bot detection, and adaptive multi-factor authentication.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["attack protection"]},{"id":"audience","title":"Audience","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EUnique identifier of the audience for an issued token, identified within a JSON Web Token as the \u003Cb\u003Eaud\u003C\u002Fb\u003E claim. The audience value is either the application (\u003Ccode\u003EClient ID\u003C\u002Fcode\u003E) for an ID Token or the API that is being called (\u003Ccode\u003EAPI Identifier\u003C\u002Fcode\u003E) for an Access Token. At Auth0, the Audience value sent in a request for an Access Token dictates whether that token is returned in an opaque or JWT format.\u003C\u002Fp\u003E","short":"\u003Cp\u003EUnique identifier of the audience for an issued token. Named \u003Cb\u003Eaud\u003C\u002Fb\u003E in a token, its value contains the ID of either an application (\u003Ccode\u003EClient ID\u003C\u002Fcode\u003E) for an ID Token or an API (\u003Ccode\u003EAPI Identifier\u003C\u002Fcode\u003E) for an Access Token.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["audience"]},{"id":"auth0-dashboard","title":"Auth0 Dashboard","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0’s primary administrator interface in which you can register your application or API, connect to a user store or another identity provider, and configure your Auth0 services.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0's main product to configure your services.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["auth0 dashboard"]},{"id":"authentication-server","title":"Authentication Server","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EServer that confirms or denies a user’s identity. An authentication server does not limit the actions or resources available to the user (although it can provide context for this purpose).\u003C\u002Fp\u003E","short":"\u003Cp\u003EServer that confirms or denies a user’s identity.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["authentication server","authentication servers"]},{"id":"authorization-code","title":"Authorization Code","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ERandom string generated by the authorization server and returned to the application as part of the authorization response. The authorization code is relatively short-lived and is exchanged for an Access Token at the token endpoint when using the Authorization Code Flow (either with or without Proof Key for Code Exchange (PKCE)).\u003C\u002Fp\u003E","short":"\u003Cp\u003ERandom string generated by the authorization server and returned to the application as part of the authorization response when using the Authorization Code Flow (either with or without PKCE).\u003C\u002Fp\u003E","automate":false,"automaticTerms":["authorization code","auth code","authorization codes","auth codes"]},{"id":"authorization-flow","title":"Authorization Flow","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAnother name for Authorization Grants outlined in OAuth 2.0. Authorization flows are the workflows a resource (an application or an AIP) uses to grant requestors access. Based on the type of technology (for example, if an application can store a Client Secret) and the type of requestor, resource owners can use Authorization Code Flow, Proof of Key Code Exchange (PKCE), Resource Owner Password Credential (ROPG), Implicit, or Client Credential.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuthorization grant (or workflow) specified in the OAuth 2.0 framework.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["authorization flow","authorization flows"]},{"id":"authorization-server","title":"Authorization Server","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ECentralized server that contributes to defining the boundaries of a user’s access. For example, your authorization server can control the data, tasks, and features available to a user. An authorization server does not authenticate users. It’s the role of the authentication server to verify a user’s identity.\u003C\u002Fp\u003E","short":"\u003Cp\u003ECentralized server that contributes to defining the boundaries of a user’s access. For example, your authorization server can control the data, tasks, and features available to a user.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["authorization server","authorization servers"]}],"B":[{"id":"bad-actors","title":"Bad Actors","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAlso known as threat actors. Entity (a person or group) that poses a threat to the business or environment with the intention to cause harm. Harm can constitute physical or cyber damages, from breaking into a data center to hacking into systems with stolen credentials.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity (a person or group) that poses a threat to the business or environment with the intention to cause harm.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["bad actors","bad actor"]},{"id":"beta","title":"Beta","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is provided to subscribers to give them time to explore and adopt new product capabilities while providing final feedback prior to a General Availability (GA) release. Functionality is code-complete, stable, useful in a variety of scenarios, and believed to meet or almost meet quality expectations for a GA release. Beta releases may be restricted to a select number of subscribers (private) or open to all subscribers (public).\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage during which subscribers can explore and adopt new product capabilities while providing final feedback prior to a General Availability (GA) release. Beta releases may be public or private.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["beta","betas"]},{"id":"block-unblock","title":"Block\u002FUnblock Users","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ERemoving or restoring a requestor's access to a resource. Refers to the features from Auth0's Attack Protection suite: Breached Password Detection, Brute-Force Protection, and Suspicious IP Throttling. Each service assesses login\u002Fsign-up trends and blocks IP addresses associated with suspicious activity.\u003C\u002Fp\u003E","short":"\u003Cp\u003ERemoving or restoring a requestor's access to a resource.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["block\u002Funblock users","block\u002Funblock user"]},{"id":"bot-detection","title":"Bot Detection","associatedPage":{"title":"Bot Detection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection"},"definition":"\u003Cp\u003EForm of attack protection in which Auth0 blocks suspected bot traffic by enabling a CAPTCHA during the login process.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection in which Auth0 blocks suspected bot traffic by enabling a CAPTCHA during the login process.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["bot detection"]},{"id":"breached-password-detection","title":"Breached Password Detection","associatedPage":{"title":"Breached Password Detection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbreached-password-detection"},"definition":"\u003Cp\u003EForm of attack protection in which Auth0 notifies your users if they use a username\u002Fpassword combination that has been compromised in a data leak on a third-party website or app.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection in which Auth0 notifies your users if they use a username\u002Fpassword combination that has been compromised in a data leak on a third-party website or app.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["breached password detection"]},{"id":"breaking-change","title":"Breaking Change","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EChange to the Auth0 platform that, to Auth0's knowledge, will cause failures in the interoperation of the Auth0 platform and customer applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EChange to the Auth0 platform that, to Auth0's knowledge, will cause failures in the interoperation of the Auth0 platform and customer applications.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["breaking change","breaking changes"]},{"id":"brute-force-protection","title":"Brute-force Protection","associatedPage":{"title":"Brute-Force Protection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbrute-force-protection"},"definition":"\u003Cp\u003EForm of attack protection that safeguards against brute-force attacks that occur from a single IP address and target a single user account.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection that safeguards against brute-force attacks that occur from a single IP address and target a single user account.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["brute-force protection","brute force protection"]}],"C":[{"id":"callback","title":"Callback","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EURL to which Auth0 sends its response after authentication. It is often the same URL to which a user is redirected after authentication.\u003C\u002Fp\u003E","short":"\u003Cp\u003EURL to which Auth0 sends its response after an API call and sometimes where a user is redirected after authentication.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["callback","callbacks"]},{"id":"claim","title":"Claim","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAttribute packaged in a security token which represents a claim that the provider of the token is making about an entity.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAttribute packaged in a security token which represents a claim that the provider of the token is making about an entity.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["claim","claims"]},{"id":"client-id","title":"Client ID","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EIdentification value assigned to your application after registration. This value is used in conjunction with other third-party services and can be found in \u003Cb\u003EAuth0 Dashboard\u003C\u002Fb\u003E > \u003Cb\u003EApplication Settings\u003C\u002Fb\u003E.\u003C\u002Fp\u003E","short":"\u003Cp\u003EIdentification value given to your registered resource from Auth0.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["client id","client ids"]},{"id":"client-secret","title":"Client Secret","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESecret used by a client (application) to authenticate with the Authorization Server; it should be known to only the client and the Authorization Server and must be sufficiently random to not be guessable.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESecret used by a client (application) to authenticate with the Authorization Server; it should be known to only the client and the Authorization Server and must be sufficiently random to not be guessable.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["client secret","client secrets"]},{"id":"confidential-client","title":"Confidential Client","associatedPage":{"title":"Confidential and Public Applications","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications"},"definition":"\u003Cp\u003EAccording to the OAuth 2.0 protocol, clients (applications) can be classified as either confidential or public depending on whether or not they are able to hold credentials (such as a client ID and secret) securely. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties and require a trusted backend server to do so. They can use grant types that require them to authenticate by specifying their client ID and secret when calling the token endpoint and can have tokens issued to them that have been signed either symmetrically or asymmetrically.\u003C\u002Fp\u003E","short":"\u003Cp\u003EA client (application) that can hold credentials securely by using a trusted backend server. Examples include a web application with a secure backend and a machine-to-machine (M2M) application.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["confidential client","confidential clients"]},{"id":"confused-deputy","title":"Confused Deputy","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESituation in which an attacker tricks a client or service into performing an action on their behalf.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESituation in which an attacker tricks a client or service into performing an action on their behalf.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["confused deputy","confused deputies"]},{"id":"connection","title":"Connection","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ERelationship between Auth0 and the sources of users for your applications. Examples include identity providers (such as Google or Active Directory), passwordless authentication methods, or user databases.\u003C\u002Fp\u003E","short":"\u003Cp\u003ERelationship between Auth0 and the sources of users for your applications.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["connection","connections"]},{"id":"custom-domain","title":"Custom Domain","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EThird-party domain with a specialized, or vanity, name. Also known as a CNAME.\u003C\u002Fp\u003E","short":"\u003Cp\u003EThird-party domain with a specialized, or vanity, name.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["custom domain","custom domains"]}],"D":[{"id":"deprecation","title":"Deprecation","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is not supported for use by new subscribers, is not actively being enhanced, and is being only minimally maintained. Tenants using the feature or behavior at the time of deprecation will continue to have access.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is not supported for use by new subscribers, is not actively being enhanced, and is being only minimally maintained.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["deprecation","deprecations"]},{"id":"digital-identity","title":"Digital Identity","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESet of attributes that define a particular user in the context of a function which is delivered by a particular application.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESet of attributes that define a particular user in the context of a function which is delivered by a particular application.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["digital identity","digital identities"]},{"id":"digital-signature","title":"Digital Signature","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEncrypted string that protects bits in a token from tampering. If the bits are changed or tampered with, the signature will no longer be able to be verified and it will be rejected.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEncrypted string that protects bits in a token from tampering.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["digital signature","digital signatures"]},{"id":"directory","title":"Directory","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ECentralized repository of users (the most well-known of which is Active Directory) which centralizes credentials and attributes and makes it unnecessary for each application to have their own local identity setup and pool of users. Allows single sign on to all applications that use the same directory of users.\u003C\u002Fp\u003E","short":"\u003Cp\u003ECentralized repository of users that allows single sign on to all applications that use the same directory.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["directory","directories"]}],"E":[{"id":"early-access","title":"Early Access","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is provided to a limited number of subscribers or customer development partners (CDPs) to give them the opportunity to test and provide feedback on future functionality. At this stage, functionality may not be complete, but is ready for validation.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is provided to a limited number of subscribers or customer development partners (CDPs) to give them the opportunity to test and provide feedback on future functionality.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["early access","ea"]},{"id":"end-of-life","title":"End of Life","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is removed from the platform. Continued use of the feature or behavior will likely result in errors. The new behavior will automatically be enabled for Tenants that did not opt in during the migration window.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is removed from the platform. Continued use of the feature or behavior will likely result in errors.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["end of life","eol"]},{"id":"end-of-life-date","title":"End of Life Date","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EDate when access to a feature or behavior is removed from the platform. End Of Life Dates can vary between different plan types.\u003C\u002Fp\u003E","short":"\u003Cp\u003EDate when access to a feature or behavior is removed from the platform. End Of Life Dates can vary between different plan types.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["end of life date","end of life dates","eol date"]}],"F":[{"id":"fine-grained-auth","title":"Fine-grained Authorization (FGA)","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0’s SaaS product that gives individual users access to specific objects or resources within your application.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0 product allowing individual users access to specific objects or resources.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["fine-grained authorization (fga)","fine-grained authorization","FGA"]},{"id":"flow","title":"Flow","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EProcesses that can be extended using Actions. Each Flow is made up of one or more Triggers and represents the logical pipeline through which information moves during a single point in the Auth0 journey.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProcesses that can be extended using Actions. Each Flow is made up of one or more Triggers and represents the logical pipeline through which information moves during a single point in the Auth0 journey.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["flow","flows"]}],"G":[{"id":"general-availability","title":"General Availability","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is fully functional and available to all subscribers (limited by pricing tier) for production use. If a new release replaces an existing feature, Auth0 provides a period of backward compatibility in accordance with our deprecation policy and informs customers so they have time to adopt the new release.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is fully functional and available to all subscribers (limited by pricing tier) for production use.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["general availability","GA"]},{"id":"group","title":"Group","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESet of one or more users. In the Auth0 Authorization Extension, use groups to grant access to many users at a time.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESet of one or more users. In the Auth0 Authorization Extension, use groups to grant access to many users at a time.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["group","groups"]}],"I":[{"id":"id-token","title":"ID Token","associatedPage":{"title":"ID Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens"},"definition":"\u003Cp\u003ECredential meant for the client itself, rather than for accessing a resource. It has a fixed format that clients can parse and validate.\u003C\u002Fp\u003E","short":"\u003Cp\u003ECredential meant for the client itself, rather than for accessing a resource.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["id token","id tokens","identity token","identity tokens"]},{"id":"idp","title":"Identity Provider (IdP)","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EService that stores and manages digital identities. Auth0 supports trusted social, enterprise, and legal identity providers. Auth0 also can function as an identity provider for your applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EService that stores and manages digital identities.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["identity provider (idp)","identity providers","identity provider","idp","idps","identity providers (idps)"]}],"J":[{"id":"json-web-token","title":"JSON Web Token (JWT)","associatedPage":{"title":"JSON Web Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens"},"definition":"\u003Cp\u003EOpen, industry standard \u003Ca href=\"https:\u002F\u002Ftools.ietf.org\u002Fhtml\u002Frfc7519\"\u003ERFC 7519\u003C\u002Fa\u003E method for representing claims securely between two parties. At Auth0, ID Tokens are always returned in JWT format, and Access Tokens are often in JWT format. You may decode well-formed JWTs at \u003Ca href=\"https:\u002F\u002Fjwt.io\"\u003EJWT.io\u003C\u002Fa\u003E to view their claims.\u003C\u002Fp\u003E","short":"\u003Cp\u003EStandard ID Token format (and often Access Token format) used to represent claims securely between two parties.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["json web token (jwt)","json web token","json web tokens","jwt","jwts","json web tokens (jwts)"]}],"L":[{"id":"localization","title":"Localization","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAbility to render the New Universal Login experience into a supported language.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAbility to render the New Universal Login experience into a supported language.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["localization"]},{"id":"lock","title":"Lock","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0's UI widget for authenticating users. It is ready to go as-is and is the default face of the Classic Universal Login experience. Lock allows you to customize minor behavioral and appearance options, but its primary goal is ease of use.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0's UI widget for authenticating users.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["lock"]}],"M":[{"id":"management-api","title":"Management API","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0's API to manage Auth0 services and perform administrative tasks programatically.\u003C\u002Fp\u003E","short":"\u003Cp\u003EA product to allow customers to perform administrative tasks. \u003C\u002Fp\u003E","automate":true,"automaticTerms":["management api"]},{"id":"metadata","title":"Metadata","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EInformation users can update, such as preferences or profile settings. Metadata is added to ID tokens and can be stored in user profiles.\u003C\u002Fp\u003E","short":"\u003Cp\u003EUser information stored in user profiles.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["metadata"]},{"id":"migration","title":"Migration","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EProcess by which a customer moves away from a particular feature or behavior. Migrations should occur during the Deprecation product release stage.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProcess by which a customer moves away from a particular feature or behavior. Migrations should occur during the Deprecation product release stage.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["migration","migrations"]},{"id":"multifactor-authentication","title":"Multi-factor authentication (MFA)","associatedPage":{"title":"Multi-Factor Authentication","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication"},"definition":"\u003Cp\u003EAuthentication process that considers multiple factors. Typically at Auth0, the first factor is the standard username\u002Fpassword exchange, and the second is a code or link via email or SMS, a one-time-password via an app such as Authy or Google Authenticator, or a push notification via a phone app such as Guardian or Duo. Using multiple factors allows your account to remain secure if someone captures one or the other factor--acquires your password or steals your phone, for example.\u003C\u002Fp\u003E","short":"\u003Cp\u003EUser authentication process that uses a factor in addition to username and password such as a code via SMS.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["multi-factor authentication (mfa)","multi-factor authentication","multifactor authentication","mfa"]}],"N":[{"id":"nonce","title":"Nonce","associatedPage":{"title":"Mitigate Replay Attacks When Using the Implicit Flow","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fimplicit-flow-with-form-post\u002Fmitigate-replay-attacks-when-using-the-implicit-flow"},"definition":"\u003Cp\u003EArbitrary (often random or pseudo-random) number issued in an authentication protocol that can be used to help detect and mitigate replay attacks using old communications. In other words, the nonce is only issued once, so if an attacker attempts to replay a transaction with a different nonce, its false transaction can be detected more easily.\u003C\u002Fp\u003E","short":"\u003Cp\u003EArbitrary number issued once in an authentication protocol to detect and prevent replay attacks.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["nonce","nonces"]}],"O":[{"id":"oath2","title":"OAuth 2.0","associatedPage":{"title":"OAuth 2.0 Authorization Framework","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Foauth"},"definition":"\u003Cp\u003EAuthorization framework that defines authorization protocols and workflows. OAuth 2.0 defines roles, authorization grants (or workflows), authorization requests and responses, and token handling. OpenID Connect (OIDC) protocols to verify user identity extends OAuth 2.0.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuthorization framework that defines authorization protocols and workflows.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["oauth 2.0","oauth"]},{"id":"openid","title":"OpenID","associatedPage":{"title":"OpenID Connect Protocol","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fopenid-connect-protocol"},"definition":"\u003Cp\u003EOpen standard for authentication that allows applications to verify users are who they say they are without needing to collect, store, and therefore become liable for a user’s login information.\u003C\u002Fp\u003E","short":"\u003Cp\u003EOpen standard for authentication that allows applications to verify users' identities without collecting and storing login information.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["openid"]},{"id":"organizations","title":"Organizations","associatedPage":{"title":"Organizations","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations"},"definition":"\u003Cp\u003EAuth0 product that allows B2B customers to categorize end-users and define specific roles, login experience, and access to resources.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0 product that allows B2B customers to categorize end-users and define specific roles.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["organizations","organization"]}],"P":[{"id":"passwordless","title":"Passwordless","associatedPage":{"title":"Passwordless","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless"},"definition":"\u003Cp\u003EForm of authentication where the first factor is not a password. Instead, it could be a one-time password received by email or SMS, a push notification, or a biometric sensor. Passwordless uses one-time passwords, so users are less susceptible to the typical password-based attacks (e.g., dictionary or credential stuffing) than with traditional username\u002Fpassword logins.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of authentication that does not rely on a password as the first factor.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["passwordless"]},{"id":"perimeter","title":"Perimeter","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESet of boundaries that encompass a directory, all of its users, and all of the applications which use the directory. In some implementations, this perimeter is a physical location; in others, it is a set of networks or devices connected via VPN.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESet of boundaries that encompass a directory, all of its users, and all of the applications which use the directory.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["perimeter","perimeters"]},{"id":"product-release-stages","title":"Product Release Stages","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EPhases that describe how Auth0 stages, releases, and retires product functionality. Product features may not progress through all release stages, and the time in each stage will vary depending on the scope and impact of the feature.\u003C\u002Fp\u003E","short":"\u003Cp\u003EPhases that describe how Auth0 stages, releases, and retires product functionality.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["product release stages","product release stage"]},{"id":"public-client","title":"Public Client","associatedPage":{"title":"Confidential and Public Applications","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications"},"definition":"\u003Cp\u003EAccording to the OAuth 2.0 protocol, clients (applications) can be classified as either confidential or public depending on whether or not they are able to hold credentials (such as a client ID and secret) securely. Public clients cannot hold credentials securely, so should only use grant types that do not require the use of their client secret. ID Tokens issued to them must be signed asymmetrically using a private key (RS256) and verified using the public key corresponding to the private key used to sign the token.\u003C\u002Fp\u003E","short":"\u003Cp\u003EClient (application) that cannot hold credentials securely. Examples include a native desktop or mobile application and a JavaScript-based client-side web application (such as a single-page app (SPA)).\u003C\u002Fp\u003E","automate":true,"automaticTerms":["public client","public clients"]}],"R":[{"id":"raw-credential","title":"Raw Credential","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EShared secret or set of information that is agreed upon between the user and the resource that allow the resource to verify the identity of a user.\u003C\u002Fp\u003E","short":"\u003Cp\u003EShared secret or set of information that is agreed upon between the user and the resource that allow the resource to verify the identity of a user.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["raw credential","raw credentials"]},{"id":"refresh-token","title":"Refresh Token","associatedPage":{"title":"Refresh Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens"},"definition":"\u003Cp\u003ESpecial kind of token that can be used to obtain a renewed Access Token. It is useful for renewing expiring Access Tokens without forcing the user to log in again. Using the Refresh Token, you can request a new Access Token at any time until the Refresh Token is blocklisted.\u003C\u002Fp\u003E","short":"\u003Cp\u003EToken used to obtain a renewed Access Token without forcing users to log in again.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["refresh token","refresh tokens"]},{"id":"refresh-token-rotation","title":"Refresh Token Rotation","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EStrategy of frequently replacing refresh tokens to minimize vulnerability. With refresh token rotation, every time your application exchanges a refresh token to get a new access token, Auth0 also returns a new refresh token.\u003C\u002Fp\u003E","short":"\u003Cp\u003EStrategy of frequently replacing refresh tokens to minimize vulnerability. With refresh token rotation, every time your application exchanges a refresh token to get a new access token, Auth0 also returns a new refresh token.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["refresh token rotation"]},{"id":"relying-party","title":"Relying Party","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEntity (such as a service or application) that depends on a third-party identity provider to authenticate a user.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity (such as a service or application) that depends on a third-party identity provider to authenticate a user.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["relying party","relying parties"]},{"id":"resource-owner","title":"Resource Owner","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEntity (such as a user or application) capable of granting access to a protected resource.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity (such as a user or application) capable of granting access to a protected resource.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["resource owner","resource owners"]},{"id":"resource-server","title":"Resource Server","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EServer hosting protected resources. Resource servers accept and respond to protected resource requests.\u003C\u002Fp\u003E","short":"\u003Cp\u003EServer hosting protected resources. Resource servers accept and respond to protected resource requests.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["resource server","resource servers"]},{"id":"role","title":"Role","associatedPage":{"title":"Role-Based Access Control","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Frbac"},"definition":"\u003Cp\u003EAspect of a user’s identity assigned to the user to indicate the level of access they should have to the system. Roles are essentially collections of permissions.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAspect of a user’s identity assigned to the user to give them a certain set of permissions.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["role","roles"]}],"S":[{"id":"scope","title":"Scope","associatedPage":{"title":"Scopes","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fscopes"},"definition":"\u003Cp\u003EMechanism that defines the specific actions applications can be allowed to do or information that they can request on a user’s behalf. Often, applications will want to make use of the information that has already been created in an online resource. To do so, the application must ask for authorization to access this information on a user’s behalf. When an app requests permission to access a resource through an authorization server, it uses the Scope parameter to specify what access it needs, and the authorization server uses the Scope parameter to respond with the access that was actually granted.\u003C\u002Fp\u003E","short":"\u003Cp\u003EMechanism that determines actions applications can perform on a user's behalf with information previously created in an online resource.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["scope","scopes"]},{"id":"security-assertion-markup-language","title":"Security Assertion Markup Language (SAML)","associatedPage":{"title":"SAML","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml"},"definition":"\u003Cp\u003EXML-based standardized protocol by which two parties can exchange authentication information without the use of a password.\u003C\u002Fp\u003E","short":"\u003Cp\u003EStandardized protocol allowing two parties to exchange authentication information without a password.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["security assertion markup language (saml)","security assertion markup language","saml"]},{"id":"security-token","title":"Security Token","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EDigitally-signed artifact used to prove that the user was successfully authenticated.\u003C\u002Fp\u003E","short":"\u003Cp\u003EDigitally-signed artifact used to prove that the user was successfully authenticated.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["security token","security tokens"]},{"id":"session-cookie","title":"Session Cookie","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEntity emitted by middleware after it establishes that the token it is receiving is signed, valid, and comes from a trusted source (the identity provider). This entity represents the fact that successful authentication occurred with the identity provider. This cookie prevents this process with tokens from needing to be continually repeated, by allowing the user to be considered authenticated as long as the cookie is present.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity that, when present, allows the user to be considered authenticated.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["session cookie","session cookies"]},{"id":"shadow-account","title":"Shadow Account","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EDifficult-to-sustain practice of manually provisioning a user from a local directory separately in a remote directory (essentially creating a copy, or shadow, of the original account) when they need access to remote applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EDifficult-to-sustain practice of manually provisioning a user from a local directory separately in a remote directory.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["shadow account","shadow accounts"]},{"id":"signing-algorithm","title":"Signing Algorithm","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EHashing algorithm used to digitally sign tokens to ensure the token has not been tampered with by bad actors.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAlgorithm used to digitally sign tokens to ensure the token has not been tampered with.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["signing algorithm","signing algorithms"]},{"id":"single-sign-on","title":"Single Sign-On (SSO)","associatedPage":{"title":"Single Sign-On","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on"},"definition":"\u003Cp\u003EService that, after a user logs into one application, automatically logs that user in to other applications, regardless of the platform, technology, or domain the user is using. The user signs in only one time (hence the name of the feature). Similarly, Single Logout (SLO) occurs when, after a user logs out from one application, they are logged out of each application or service where they were logged in. SSO and SLO are possible through the use of sessions.\u003C\u002Fp\u003E","short":"\u003Cp\u003EService that, after a user logs into one applicaton, automatically logs that user in to other applications.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["single sign-on (sso)","single sign-on","single sign on","sso","single signon"]},{"id":"subscription","title":"Subscription","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAgreement that defines the features and quotas available for each of your tenants. Auth0 has multiple subscription levels to meet the needs of different developers and organizations.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAgreement that defines the features and quotas available for each of your tenants. Auth0 has multiple subscription levels to meet the needs of different developers and organizations.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["subscription","subscriptions"]},{"id":"suspicious-ip-throttling","title":"Suspicious IP Throttling","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EForm of attack protection that protects your tenant against suspicious logins targeting too many accounts from a single IP address.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection that protects your tenant against suspicious logins targeting too many accounts from a single IP address.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["suspicious ip throttling"]}],"T":[{"id":"tenant","title":"Tenant","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAt Auth0, a logically-isolated group of users who share common access with specific privileges to a single software instance. No tenant can access the data of another tenant, even though multiple tenants might be running on the same machine. Tenant, in general, is a term borrowed from software multitenant architecture.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAt Auth0, a logically-isolated group of users who share common access with specific privileges to a single software instance. No tenant can access the data of another tenant, even though multiple tenants might be running on the same machine.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["tenant","tenants"]},{"id":"token-endpoint","title":"Token Endpoint","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEndpoint on the Authorization Server that is used to programmatically request tokens.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEndpoint on the Authorization Server that is used to programmatically request tokens.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["token endpoint","token endpoints"]},{"id":"trigger","title":"Trigger","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEvent that automatically invokes an Action when a specific operation, such as a user logging in, occurs at runtime. Some Triggers are executed synchronously, blocking the Flow in which they are involved, and some are executed asynchronously.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEvent that automatically invokes an Action when a specific operation, such as a user logging in, occurs at runtime.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["trigger","triggers"]},{"id":"trust","title":"Trust","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EResource trusts an identity provider or authority when that resource is willing to believe what the authority says about its users.\u003C\u002Fp\u003E","short":"\u003Cp\u003EResource trusts an identity provider or authority when that resource is willing to believe what the authority says about its users.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["trust","trusts"]}],"U":[{"id":"universal-login","title":"Universal Login","associatedPage":{"title":"Auth0 Universal Login","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login"},"definition":"\u003Cp\u003EAuth0’s implementation of the authentication flow, which is the key feature of an Authorization Server. Each time a user needs to prove their identity, your \u003Ca href=\"\u002Fdocs\u002Fget-started\u002Fapplications\"\u003Eapplications\u003C\u002Fa\u003E redirect to Universal Login, and Auth0 will do what’s needed to guarantee the user’s identity.\u003C\u002Fp\u003E","short":"\u003Cp\u003EYour application redirects to Universal Login, hosted on Auth0's Authorization Server, to verify a user's identity.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["universal login"]}],"W":[{"id":"ws-fed","title":"Web Service Federation (WS-Fed)","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EProtocol for managing user identities between systems, domains, and identity providers with established trust using WS-Trust. This protocol is mainly used for Microsoft products and defines policies on how to share federation metadata. \u003C\u002Fp\u003E","short":"\u003Cp\u003EProtocol for managing user identities across domains.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["web service federation (ws-fed)","web service federation","ws-fed"]}]},"termsById":{"access-token":{"title":"Access Token","associatedPage":{"title":"Access Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Faccess-tokens"},"definition":"\u003Cp\u003ECredential that can be used by an application to access an API. It informs the API that the bearer of the token has been authorized to access the API and perform specific actions specified by the scope that has been granted. An Access Token can be in any format, but two popular options include opaque strings and JSON Web Tokens (JWT). They should be transmitted to the API as a Bearer credential in an HTTP Authorization header.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuthorization credential, in the form of an opaque string or JWT, used to access an API.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["access token","access tokens"]},"account linking":{"title":"Account Linking","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EConnecting user accounts across multiple platforms to allow users access to more than one resource or application by providing credentials one time.\u003C\u002Fp\u003E","short":"\u003Cp\u003EConnecting user accounts across multiple platforms.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["account linking"]},"actions":{"title":"Actions","associatedPage":{"title":"Actions","url":"\u002Fdocs\u002Fcustomize\u002Factions"},"definition":"\u003Cp\u003ESecure, tenant-specific, versioned functions written in Node.js that execute at certain points during the Auth0 runtime. Actions are used to customize and extend Auth0's capabilities with custom logic.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESecure, tenant-specific, versioned functions written in Node.js that execute at certain points during the Auth0 runtime.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["actions","action"]},"adaptive-multi-factor-authentication":{"title":"Adaptive Multi-factor Authentication","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EMulti-factor authentication (MFA) that is only triggered for users when an attempted login is determined to be a low confidence login. With Adaptive MFA, Auth0 triggers MFA only when needed to add friction for bad actors while keeping the login experience unchanged for good actors.\u003C\u002Fp\u003E","short":"\u003Cp\u003EMulti-factor authentication (MFA) that is only triggered for users when an attempted login is determined to be a low confidence login. \u003C\u002Fp\u003E","automate":true,"automaticTerms":["adaptive multi-factor authentication","adaptive MFA","adaptive multifactor authentication"]},"application":{"title":"Application","associatedPage":{"title":"Applications in Auth0","url":"\u002Fdocs\u002Fget-started\u002Fapplications"},"definition":"\u003Cp\u003EYour software that relies on Auth0 for authentication and identity management. Auth0 supports single-page, regular web, native, and machine-to-machine applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EYour software that relies on Auth0 for authentication and identity management. Auth0 supports single-page, regular web, native, and machine-to-machine applications.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["application","applications"]},"attack-protection":{"title":"Attack Protection","associatedPage":{"title":"Attack Protection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection"},"definition":"\u003Cp\u003EFeatures that Auth0 provides to detect and mitigate attacks, including brute-force protection, suspicious IP throttling, breached password detection, bot detection, and adaptive multi-factor authentication.\u003C\u002Fp\u003E","short":"\u003Cp\u003EFeatures that Auth0 provides to detect and mitigate attacks, including brute-force protection, suspicious IP throttling, breached password detection, bot detection, and adaptive multi-factor authentication.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["attack protection"]},"audience":{"title":"Audience","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EUnique identifier of the audience for an issued token, identified within a JSON Web Token as the \u003Cb\u003Eaud\u003C\u002Fb\u003E claim. The audience value is either the application (\u003Ccode\u003EClient ID\u003C\u002Fcode\u003E) for an ID Token or the API that is being called (\u003Ccode\u003EAPI Identifier\u003C\u002Fcode\u003E) for an Access Token. At Auth0, the Audience value sent in a request for an Access Token dictates whether that token is returned in an opaque or JWT format.\u003C\u002Fp\u003E","short":"\u003Cp\u003EUnique identifier of the audience for an issued token. Named \u003Cb\u003Eaud\u003C\u002Fb\u003E in a token, its value contains the ID of either an application (\u003Ccode\u003EClient ID\u003C\u002Fcode\u003E) for an ID Token or an API (\u003Ccode\u003EAPI Identifier\u003C\u002Fcode\u003E) for an Access Token.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["audience"]},"auth0-dashboard":{"title":"Auth0 Dashboard","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0’s primary administrator interface in which you can register your application or API, connect to a user store or another identity provider, and configure your Auth0 services.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0's main product to configure your services.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["auth0 dashboard"]},"authentication-server":{"title":"Authentication Server","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EServer that confirms or denies a user’s identity. An authentication server does not limit the actions or resources available to the user (although it can provide context for this purpose).\u003C\u002Fp\u003E","short":"\u003Cp\u003EServer that confirms or denies a user’s identity.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["authentication server","authentication servers"]},"authorization-code":{"title":"Authorization Code","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ERandom string generated by the authorization server and returned to the application as part of the authorization response. The authorization code is relatively short-lived and is exchanged for an Access Token at the token endpoint when using the Authorization Code Flow (either with or without Proof Key for Code Exchange (PKCE)).\u003C\u002Fp\u003E","short":"\u003Cp\u003ERandom string generated by the authorization server and returned to the application as part of the authorization response when using the Authorization Code Flow (either with or without PKCE).\u003C\u002Fp\u003E","automate":false,"automaticTerms":["authorization code","auth code","authorization codes","auth codes"]},"authorization-flow":{"title":"Authorization Flow","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAnother name for Authorization Grants outlined in OAuth 2.0. Authorization flows are the workflows a resource (an application or an AIP) uses to grant requestors access. Based on the type of technology (for example, if an application can store a Client Secret) and the type of requestor, resource owners can use Authorization Code Flow, Proof of Key Code Exchange (PKCE), Resource Owner Password Credential (ROPG), Implicit, or Client Credential.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuthorization grant (or workflow) specified in the OAuth 2.0 framework.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["authorization flow","authorization flows"]},"authorization-server":{"title":"Authorization Server","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ECentralized server that contributes to defining the boundaries of a user’s access. For example, your authorization server can control the data, tasks, and features available to a user. An authorization server does not authenticate users. It’s the role of the authentication server to verify a user’s identity.\u003C\u002Fp\u003E","short":"\u003Cp\u003ECentralized server that contributes to defining the boundaries of a user’s access. For example, your authorization server can control the data, tasks, and features available to a user.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["authorization server","authorization servers"]},"bad-actors":{"title":"Bad Actors","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAlso known as threat actors. Entity (a person or group) that poses a threat to the business or environment with the intention to cause harm. Harm can constitute physical or cyber damages, from breaking into a data center to hacking into systems with stolen credentials.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity (a person or group) that poses a threat to the business or environment with the intention to cause harm.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["bad actors","bad actor"]},"beta":{"title":"Beta","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is provided to subscribers to give them time to explore and adopt new product capabilities while providing final feedback prior to a General Availability (GA) release. Functionality is code-complete, stable, useful in a variety of scenarios, and believed to meet or almost meet quality expectations for a GA release. Beta releases may be restricted to a select number of subscribers (private) or open to all subscribers (public).\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage during which subscribers can explore and adopt new product capabilities while providing final feedback prior to a General Availability (GA) release. Beta releases may be public or private.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["beta","betas"]},"block-unblock":{"title":"Block\u002FUnblock Users","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ERemoving or restoring a requestor's access to a resource. Refers to the features from Auth0's Attack Protection suite: Breached Password Detection, Brute-Force Protection, and Suspicious IP Throttling. Each service assesses login\u002Fsign-up trends and blocks IP addresses associated with suspicious activity.\u003C\u002Fp\u003E","short":"\u003Cp\u003ERemoving or restoring a requestor's access to a resource.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["block\u002Funblock users","block\u002Funblock user"]},"bot-detection":{"title":"Bot Detection","associatedPage":{"title":"Bot Detection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbot-detection"},"definition":"\u003Cp\u003EForm of attack protection in which Auth0 blocks suspected bot traffic by enabling a CAPTCHA during the login process.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection in which Auth0 blocks suspected bot traffic by enabling a CAPTCHA during the login process.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["bot detection"]},"breached-password-detection":{"title":"Breached Password Detection","associatedPage":{"title":"Breached Password Detection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbreached-password-detection"},"definition":"\u003Cp\u003EForm of attack protection in which Auth0 notifies your users if they use a username\u002Fpassword combination that has been compromised in a data leak on a third-party website or app.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection in which Auth0 notifies your users if they use a username\u002Fpassword combination that has been compromised in a data leak on a third-party website or app.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["breached password detection"]},"breaking-change":{"title":"Breaking Change","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EChange to the Auth0 platform that, to Auth0's knowledge, will cause failures in the interoperation of the Auth0 platform and customer applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EChange to the Auth0 platform that, to Auth0's knowledge, will cause failures in the interoperation of the Auth0 platform and customer applications.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["breaking change","breaking changes"]},"brute-force-protection":{"title":"Brute-force Protection","associatedPage":{"title":"Brute-Force Protection","url":"\u002Fdocs\u002Fsecure\u002Fattack-protection\u002Fbrute-force-protection"},"definition":"\u003Cp\u003EForm of attack protection that safeguards against brute-force attacks that occur from a single IP address and target a single user account.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection that safeguards against brute-force attacks that occur from a single IP address and target a single user account.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["brute-force protection","brute force protection"]},"callback":{"title":"Callback","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EURL to which Auth0 sends its response after authentication. It is often the same URL to which a user is redirected after authentication.\u003C\u002Fp\u003E","short":"\u003Cp\u003EURL to which Auth0 sends its response after an API call and sometimes where a user is redirected after authentication.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["callback","callbacks"]},"claim":{"title":"Claim","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAttribute packaged in a security token which represents a claim that the provider of the token is making about an entity.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAttribute packaged in a security token which represents a claim that the provider of the token is making about an entity.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["claim","claims"]},"client-id":{"title":"Client ID","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EIdentification value assigned to your application after registration. This value is used in conjunction with other third-party services and can be found in \u003Cb\u003EAuth0 Dashboard\u003C\u002Fb\u003E > \u003Cb\u003EApplication Settings\u003C\u002Fb\u003E.\u003C\u002Fp\u003E","short":"\u003Cp\u003EIdentification value given to your registered resource from Auth0.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["client id","client ids"]},"client-secret":{"title":"Client Secret","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESecret used by a client (application) to authenticate with the Authorization Server; it should be known to only the client and the Authorization Server and must be sufficiently random to not be guessable.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESecret used by a client (application) to authenticate with the Authorization Server; it should be known to only the client and the Authorization Server and must be sufficiently random to not be guessable.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["client secret","client secrets"]},"confidential-client":{"title":"Confidential Client","associatedPage":{"title":"Confidential and Public Applications","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications"},"definition":"\u003Cp\u003EAccording to the OAuth 2.0 protocol, clients (applications) can be classified as either confidential or public depending on whether or not they are able to hold credentials (such as a client ID and secret) securely. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties and require a trusted backend server to do so. They can use grant types that require them to authenticate by specifying their client ID and secret when calling the token endpoint and can have tokens issued to them that have been signed either symmetrically or asymmetrically.\u003C\u002Fp\u003E","short":"\u003Cp\u003EA client (application) that can hold credentials securely by using a trusted backend server. Examples include a web application with a secure backend and a machine-to-machine (M2M) application.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["confidential client","confidential clients"]},"confused-deputy":{"title":"Confused Deputy","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESituation in which an attacker tricks a client or service into performing an action on their behalf.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESituation in which an attacker tricks a client or service into performing an action on their behalf.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["confused deputy","confused deputies"]},"connection":{"title":"Connection","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ERelationship between Auth0 and the sources of users for your applications. Examples include identity providers (such as Google or Active Directory), passwordless authentication methods, or user databases.\u003C\u002Fp\u003E","short":"\u003Cp\u003ERelationship between Auth0 and the sources of users for your applications.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["connection","connections"]},"custom-domain":{"title":"Custom Domain","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EThird-party domain with a specialized, or vanity, name. Also known as a CNAME.\u003C\u002Fp\u003E","short":"\u003Cp\u003EThird-party domain with a specialized, or vanity, name.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["custom domain","custom domains"]},"deprecation":{"title":"Deprecation","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is not supported for use by new subscribers, is not actively being enhanced, and is being only minimally maintained. Tenants using the feature or behavior at the time of deprecation will continue to have access.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is not supported for use by new subscribers, is not actively being enhanced, and is being only minimally maintained.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["deprecation","deprecations"]},"digital-identity":{"title":"Digital Identity","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESet of attributes that define a particular user in the context of a function which is delivered by a particular application.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESet of attributes that define a particular user in the context of a function which is delivered by a particular application.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["digital identity","digital identities"]},"digital-signature":{"title":"Digital Signature","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEncrypted string that protects bits in a token from tampering. If the bits are changed or tampered with, the signature will no longer be able to be verified and it will be rejected.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEncrypted string that protects bits in a token from tampering.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["digital signature","digital signatures"]},"directory":{"title":"Directory","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ECentralized repository of users (the most well-known of which is Active Directory) which centralizes credentials and attributes and makes it unnecessary for each application to have their own local identity setup and pool of users. Allows single sign on to all applications that use the same directory of users.\u003C\u002Fp\u003E","short":"\u003Cp\u003ECentralized repository of users that allows single sign on to all applications that use the same directory.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["directory","directories"]},"early-access":{"title":"Early Access","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is provided to a limited number of subscribers or customer development partners (CDPs) to give them the opportunity to test and provide feedback on future functionality. At this stage, functionality may not be complete, but is ready for validation.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is provided to a limited number of subscribers or customer development partners (CDPs) to give them the opportunity to test and provide feedback on future functionality.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["early access","ea"]},"end-of-life":{"title":"End of Life","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is removed from the platform. Continued use of the feature or behavior will likely result in errors. The new behavior will automatically be enabled for Tenants that did not opt in during the migration window.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage indicating that the referenced feature or behavior is removed from the platform. Continued use of the feature or behavior will likely result in errors.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["end of life","eol"]},"end-of-life-date":{"title":"End of Life Date","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EDate when access to a feature or behavior is removed from the platform. End Of Life Dates can vary between different plan types.\u003C\u002Fp\u003E","short":"\u003Cp\u003EDate when access to a feature or behavior is removed from the platform. End Of Life Dates can vary between different plan types.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["end of life date","end of life dates","eol date"]},"fine-grained-auth":{"title":"Fine-grained Authorization (FGA)","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0’s SaaS product that gives individual users access to specific objects or resources within your application.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0 product allowing individual users access to specific objects or resources.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["fine-grained authorization (fga)","fine-grained authorization","FGA"]},"flow":{"title":"Flow","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EProcesses that can be extended using Actions. Each Flow is made up of one or more Triggers and represents the logical pipeline through which information moves during a single point in the Auth0 journey.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProcesses that can be extended using Actions. Each Flow is made up of one or more Triggers and represents the logical pipeline through which information moves during a single point in the Auth0 journey.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["flow","flows"]},"general-availability":{"title":"General Availability","associatedPage":{"title":"Product Release Stages","url":"\u002Fdocs\u002Ftroubleshoot\u002Fproduct-lifecycle\u002Fproduct-release-stages"},"definition":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is fully functional and available to all subscribers (limited by pricing tier) for production use. If a new release replaces an existing feature, Auth0 provides a period of backward compatibility in accordance with our deprecation policy and informs customers so they have time to adopt the new release.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProduct release stage during which the referenced feature or behavior is fully functional and available to all subscribers (limited by pricing tier) for production use.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["general availability","GA"]},"group":{"title":"Group","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESet of one or more users. In the Auth0 Authorization Extension, use groups to grant access to many users at a time.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESet of one or more users. In the Auth0 Authorization Extension, use groups to grant access to many users at a time.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["group","groups"]},"id-token":{"title":"ID Token","associatedPage":{"title":"ID Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fid-tokens"},"definition":"\u003Cp\u003ECredential meant for the client itself, rather than for accessing a resource. It has a fixed format that clients can parse and validate.\u003C\u002Fp\u003E","short":"\u003Cp\u003ECredential meant for the client itself, rather than for accessing a resource.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["id token","id tokens","identity token","identity tokens"]},"idp":{"title":"Identity Provider (IdP)","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EService that stores and manages digital identities. Auth0 supports trusted social, enterprise, and legal identity providers. Auth0 also can function as an identity provider for your applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EService that stores and manages digital identities.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["identity provider (idp)","identity providers","identity provider","idp","idps","identity providers (idps)"]},"json-web-token":{"title":"JSON Web Token (JWT)","associatedPage":{"title":"JSON Web Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Fjson-web-tokens"},"definition":"\u003Cp\u003EOpen, industry standard \u003Ca href=\"https:\u002F\u002Ftools.ietf.org\u002Fhtml\u002Frfc7519\"\u003ERFC 7519\u003C\u002Fa\u003E method for representing claims securely between two parties. At Auth0, ID Tokens are always returned in JWT format, and Access Tokens are often in JWT format. You may decode well-formed JWTs at \u003Ca href=\"https:\u002F\u002Fjwt.io\"\u003EJWT.io\u003C\u002Fa\u003E to view their claims.\u003C\u002Fp\u003E","short":"\u003Cp\u003EStandard ID Token format (and often Access Token format) used to represent claims securely between two parties.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["json web token (jwt)","json web token","json web tokens","jwt","jwts","json web tokens (jwts)"]},"localization":{"title":"Localization","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAbility to render the New Universal Login experience into a supported language.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAbility to render the New Universal Login experience into a supported language.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["localization"]},"lock":{"title":"Lock","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0's UI widget for authenticating users. It is ready to go as-is and is the default face of the Classic Universal Login experience. Lock allows you to customize minor behavioral and appearance options, but its primary goal is ease of use.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0's UI widget for authenticating users.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["lock"]},"management-api":{"title":"Management API","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAuth0's API to manage Auth0 services and perform administrative tasks programatically.\u003C\u002Fp\u003E","short":"\u003Cp\u003EA product to allow customers to perform administrative tasks. \u003C\u002Fp\u003E","automate":true,"automaticTerms":["management api"]},"metadata":{"title":"Metadata","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EInformation users can update, such as preferences or profile settings. Metadata is added to ID tokens and can be stored in user profiles.\u003C\u002Fp\u003E","short":"\u003Cp\u003EUser information stored in user profiles.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["metadata"]},"migration":{"title":"Migration","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EProcess by which a customer moves away from a particular feature or behavior. Migrations should occur during the Deprecation product release stage.\u003C\u002Fp\u003E","short":"\u003Cp\u003EProcess by which a customer moves away from a particular feature or behavior. Migrations should occur during the Deprecation product release stage.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["migration","migrations"]},"multifactor-authentication":{"title":"Multi-factor authentication (MFA)","associatedPage":{"title":"Multi-Factor Authentication","url":"\u002Fdocs\u002Fsecure\u002Fmulti-factor-authentication"},"definition":"\u003Cp\u003EAuthentication process that considers multiple factors. Typically at Auth0, the first factor is the standard username\u002Fpassword exchange, and the second is a code or link via email or SMS, a one-time-password via an app such as Authy or Google Authenticator, or a push notification via a phone app such as Guardian or Duo. Using multiple factors allows your account to remain secure if someone captures one or the other factor--acquires your password or steals your phone, for example.\u003C\u002Fp\u003E","short":"\u003Cp\u003EUser authentication process that uses a factor in addition to username and password such as a code via SMS.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["multi-factor authentication (mfa)","multi-factor authentication","multifactor authentication","mfa"]},"nonce":{"title":"Nonce","associatedPage":{"title":"Mitigate Replay Attacks When Using the Implicit Flow","url":"\u002Fdocs\u002Fget-started\u002Fauthentication-and-authorization-flow\u002Fimplicit-flow-with-form-post\u002Fmitigate-replay-attacks-when-using-the-implicit-flow"},"definition":"\u003Cp\u003EArbitrary (often random or pseudo-random) number issued in an authentication protocol that can be used to help detect and mitigate replay attacks using old communications. In other words, the nonce is only issued once, so if an attacker attempts to replay a transaction with a different nonce, its false transaction can be detected more easily.\u003C\u002Fp\u003E","short":"\u003Cp\u003EArbitrary number issued once in an authentication protocol to detect and prevent replay attacks.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["nonce","nonces"]},"oath2":{"title":"OAuth 2.0","associatedPage":{"title":"OAuth 2.0 Authorization Framework","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Foauth"},"definition":"\u003Cp\u003EAuthorization framework that defines authorization protocols and workflows. OAuth 2.0 defines roles, authorization grants (or workflows), authorization requests and responses, and token handling. OpenID Connect (OIDC) protocols to verify user identity extends OAuth 2.0.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuthorization framework that defines authorization protocols and workflows.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["oauth 2.0","oauth"]},"openid":{"title":"OpenID","associatedPage":{"title":"OpenID Connect Protocol","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fopenid-connect-protocol"},"definition":"\u003Cp\u003EOpen standard for authentication that allows applications to verify users are who they say they are without needing to collect, store, and therefore become liable for a user’s login information.\u003C\u002Fp\u003E","short":"\u003Cp\u003EOpen standard for authentication that allows applications to verify users' identities without collecting and storing login information.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["openid"]},"organizations":{"title":"Organizations","associatedPage":{"title":"Organizations","url":"\u002Fdocs\u002Fmanage-users\u002Forganizations"},"definition":"\u003Cp\u003EAuth0 product that allows B2B customers to categorize end-users and define specific roles, login experience, and access to resources.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAuth0 product that allows B2B customers to categorize end-users and define specific roles.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["organizations","organization"]},"passwordless":{"title":"Passwordless","associatedPage":{"title":"Passwordless","url":"\u002Fdocs\u002Fauthenticate\u002Fpasswordless"},"definition":"\u003Cp\u003EForm of authentication where the first factor is not a password. Instead, it could be a one-time password received by email or SMS, a push notification, or a biometric sensor. Passwordless uses one-time passwords, so users are less susceptible to the typical password-based attacks (e.g., dictionary or credential stuffing) than with traditional username\u002Fpassword logins.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of authentication that does not rely on a password as the first factor.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["passwordless"]},"perimeter":{"title":"Perimeter","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003ESet of boundaries that encompass a directory, all of its users, and all of the applications which use the directory. In some implementations, this perimeter is a physical location; in others, it is a set of networks or devices connected via VPN.\u003C\u002Fp\u003E","short":"\u003Cp\u003ESet of boundaries that encompass a directory, all of its users, and all of the applications which use the directory.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["perimeter","perimeters"]},"product-release-stages":{"title":"Product Release Stages","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EPhases that describe how Auth0 stages, releases, and retires product functionality. Product features may not progress through all release stages, and the time in each stage will vary depending on the scope and impact of the feature.\u003C\u002Fp\u003E","short":"\u003Cp\u003EPhases that describe how Auth0 stages, releases, and retires product functionality.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["product release stages","product release stage"]},"public-client":{"title":"Public Client","associatedPage":{"title":"Confidential and Public Applications","url":"\u002Fdocs\u002Fget-started\u002Fapplications\u002Fconfidential-and-public-applications"},"definition":"\u003Cp\u003EAccording to the OAuth 2.0 protocol, clients (applications) can be classified as either confidential or public depending on whether or not they are able to hold credentials (such as a client ID and secret) securely. Public clients cannot hold credentials securely, so should only use grant types that do not require the use of their client secret. ID Tokens issued to them must be signed asymmetrically using a private key (RS256) and verified using the public key corresponding to the private key used to sign the token.\u003C\u002Fp\u003E","short":"\u003Cp\u003EClient (application) that cannot hold credentials securely. Examples include a native desktop or mobile application and a JavaScript-based client-side web application (such as a single-page app (SPA)).\u003C\u002Fp\u003E","automate":true,"automaticTerms":["public client","public clients"]},"raw-credential":{"title":"Raw Credential","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EShared secret or set of information that is agreed upon between the user and the resource that allow the resource to verify the identity of a user.\u003C\u002Fp\u003E","short":"\u003Cp\u003EShared secret or set of information that is agreed upon between the user and the resource that allow the resource to verify the identity of a user.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["raw credential","raw credentials"]},"refresh-token":{"title":"Refresh Token","associatedPage":{"title":"Refresh Tokens","url":"\u002Fdocs\u002Fsecure\u002Ftokens\u002Frefresh-tokens"},"definition":"\u003Cp\u003ESpecial kind of token that can be used to obtain a renewed Access Token. It is useful for renewing expiring Access Tokens without forcing the user to log in again. Using the Refresh Token, you can request a new Access Token at any time until the Refresh Token is blocklisted.\u003C\u002Fp\u003E","short":"\u003Cp\u003EToken used to obtain a renewed Access Token without forcing users to log in again.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["refresh token","refresh tokens"]},"refresh-token-rotation":{"title":"Refresh Token Rotation","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EStrategy of frequently replacing refresh tokens to minimize vulnerability. With refresh token rotation, every time your application exchanges a refresh token to get a new access token, Auth0 also returns a new refresh token.\u003C\u002Fp\u003E","short":"\u003Cp\u003EStrategy of frequently replacing refresh tokens to minimize vulnerability. With refresh token rotation, every time your application exchanges a refresh token to get a new access token, Auth0 also returns a new refresh token.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["refresh token rotation"]},"relying-party":{"title":"Relying Party","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEntity (such as a service or application) that depends on a third-party identity provider to authenticate a user.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity (such as a service or application) that depends on a third-party identity provider to authenticate a user.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["relying party","relying parties"]},"resource-owner":{"title":"Resource Owner","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEntity (such as a user or application) capable of granting access to a protected resource.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity (such as a user or application) capable of granting access to a protected resource.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["resource owner","resource owners"]},"resource-server":{"title":"Resource Server","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EServer hosting protected resources. Resource servers accept and respond to protected resource requests.\u003C\u002Fp\u003E","short":"\u003Cp\u003EServer hosting protected resources. Resource servers accept and respond to protected resource requests.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["resource server","resource servers"]},"role":{"title":"Role","associatedPage":{"title":"Role-Based Access Control","url":"\u002Fdocs\u002Fmanage-users\u002Faccess-control\u002Frbac"},"definition":"\u003Cp\u003EAspect of a user’s identity assigned to the user to indicate the level of access they should have to the system. Roles are essentially collections of permissions.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAspect of a user’s identity assigned to the user to give them a certain set of permissions.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["role","roles"]},"scope":{"title":"Scope","associatedPage":{"title":"Scopes","url":"\u002Fdocs\u002Fget-started\u002Fapis\u002Fscopes"},"definition":"\u003Cp\u003EMechanism that defines the specific actions applications can be allowed to do or information that they can request on a user’s behalf. Often, applications will want to make use of the information that has already been created in an online resource. To do so, the application must ask for authorization to access this information on a user’s behalf. When an app requests permission to access a resource through an authorization server, it uses the Scope parameter to specify what access it needs, and the authorization server uses the Scope parameter to respond with the access that was actually granted.\u003C\u002Fp\u003E","short":"\u003Cp\u003EMechanism that determines actions applications can perform on a user's behalf with information previously created in an online resource.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["scope","scopes"]},"security-assertion-markup-language":{"title":"Security Assertion Markup Language (SAML)","associatedPage":{"title":"SAML","url":"\u002Fdocs\u002Fauthenticate\u002Fprotocols\u002Fsaml"},"definition":"\u003Cp\u003EXML-based standardized protocol by which two parties can exchange authentication information without the use of a password.\u003C\u002Fp\u003E","short":"\u003Cp\u003EStandardized protocol allowing two parties to exchange authentication information without a password.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["security assertion markup language (saml)","security assertion markup language","saml"]},"security-token":{"title":"Security Token","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EDigitally-signed artifact used to prove that the user was successfully authenticated.\u003C\u002Fp\u003E","short":"\u003Cp\u003EDigitally-signed artifact used to prove that the user was successfully authenticated.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["security token","security tokens"]},"session-cookie":{"title":"Session Cookie","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEntity emitted by middleware after it establishes that the token it is receiving is signed, valid, and comes from a trusted source (the identity provider). This entity represents the fact that successful authentication occurred with the identity provider. This cookie prevents this process with tokens from needing to be continually repeated, by allowing the user to be considered authenticated as long as the cookie is present.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEntity that, when present, allows the user to be considered authenticated.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["session cookie","session cookies"]},"shadow-account":{"title":"Shadow Account","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EDifficult-to-sustain practice of manually provisioning a user from a local directory separately in a remote directory (essentially creating a copy, or shadow, of the original account) when they need access to remote applications.\u003C\u002Fp\u003E","short":"\u003Cp\u003EDifficult-to-sustain practice of manually provisioning a user from a local directory separately in a remote directory.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["shadow account","shadow accounts"]},"signing-algorithm":{"title":"Signing Algorithm","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EHashing algorithm used to digitally sign tokens to ensure the token has not been tampered with by bad actors.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAlgorithm used to digitally sign tokens to ensure the token has not been tampered with.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["signing algorithm","signing algorithms"]},"single-sign-on":{"title":"Single Sign-On (SSO)","associatedPage":{"title":"Single Sign-On","url":"\u002Fdocs\u002Fauthenticate\u002Fsingle-sign-on"},"definition":"\u003Cp\u003EService that, after a user logs into one application, automatically logs that user in to other applications, regardless of the platform, technology, or domain the user is using. The user signs in only one time (hence the name of the feature). Similarly, Single Logout (SLO) occurs when, after a user logs out from one application, they are logged out of each application or service where they were logged in. SSO and SLO are possible through the use of sessions.\u003C\u002Fp\u003E","short":"\u003Cp\u003EService that, after a user logs into one applicaton, automatically logs that user in to other applications.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["single sign-on (sso)","single sign-on","single sign on","sso","single signon"]},"subscription":{"title":"Subscription","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAgreement that defines the features and quotas available for each of your tenants. Auth0 has multiple subscription levels to meet the needs of different developers and organizations.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAgreement that defines the features and quotas available for each of your tenants. Auth0 has multiple subscription levels to meet the needs of different developers and organizations.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["subscription","subscriptions"]},"suspicious-ip-throttling":{"title":"Suspicious IP Throttling","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EForm of attack protection that protects your tenant against suspicious logins targeting too many accounts from a single IP address.\u003C\u002Fp\u003E","short":"\u003Cp\u003EForm of attack protection that protects your tenant against suspicious logins targeting too many accounts from a single IP address.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["suspicious ip throttling"]},"tenant":{"title":"Tenant","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EAt Auth0, a logically-isolated group of users who share common access with specific privileges to a single software instance. No tenant can access the data of another tenant, even though multiple tenants might be running on the same machine. Tenant, in general, is a term borrowed from software multitenant architecture.\u003C\u002Fp\u003E","short":"\u003Cp\u003EAt Auth0, a logically-isolated group of users who share common access with specific privileges to a single software instance. No tenant can access the data of another tenant, even though multiple tenants might be running on the same machine.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["tenant","tenants"]},"token-endpoint":{"title":"Token Endpoint","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEndpoint on the Authorization Server that is used to programmatically request tokens.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEndpoint on the Authorization Server that is used to programmatically request tokens.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["token endpoint","token endpoints"]},"trigger":{"title":"Trigger","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EEvent that automatically invokes an Action when a specific operation, such as a user logging in, occurs at runtime. Some Triggers are executed synchronously, blocking the Flow in which they are involved, and some are executed asynchronously.\u003C\u002Fp\u003E","short":"\u003Cp\u003EEvent that automatically invokes an Action when a specific operation, such as a user logging in, occurs at runtime.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["trigger","triggers"]},"trust":{"title":"Trust","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EResource trusts an identity provider or authority when that resource is willing to believe what the authority says about its users.\u003C\u002Fp\u003E","short":"\u003Cp\u003EResource trusts an identity provider or authority when that resource is willing to believe what the authority says about its users.\u003C\u002Fp\u003E","automate":false,"automaticTerms":["trust","trusts"]},"universal-login":{"title":"Universal Login","associatedPage":{"title":"Auth0 Universal Login","url":"\u002Fdocs\u002Fauthenticate\u002Flogin\u002Fauth0-universal-login"},"definition":"\u003Cp\u003EAuth0’s implementation of the authentication flow, which is the key feature of an Authorization Server. Each time a user needs to prove their identity, your \u003Ca href=\"\u002Fdocs\u002Fget-started\u002Fapplications\"\u003Eapplications\u003C\u002Fa\u003E redirect to Universal Login, and Auth0 will do what’s needed to guarantee the user’s identity.\u003C\u002Fp\u003E","short":"\u003Cp\u003EYour application redirects to Universal Login, hosted on Auth0's Authorization Server, to verify a user's identity.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["universal login"]},"ws-fed":{"title":"Web Service Federation (WS-Fed)","associatedPage":{"url":"\u002Fdocsundefined"},"definition":"\u003Cp\u003EProtocol for managing user identities between systems, domains, and identity providers with established trust using WS-Trust. This protocol is mainly used for Microsoft products and defines policies on how to share federation metadata. \u003C\u002Fp\u003E","short":"\u003Cp\u003EProtocol for managing user identities across domains.\u003C\u002Fp\u003E","automate":true,"automaticTerms":["web service federation (ws-fed)","web service federation","ws-fed"]}},"termLetters":["A","B","C","D","E","F","G","I","J","L","M","N","O","P","R","S","T","U","W"]},"breadcrumbs":[],"sidebarBreadcrumbs":[]}}},"options":{"optimizePromiseCallback":false},"plugins":{"MetricsPlugin":undefined,"DevToolsPlugin":{"actionHistory":[],"enableDebug":false}}},"plugins":{"ServiceProxyPlugin":{}}};</script><script src="https://cdn2.auth0.com/docs/1.14124.0/js/client.774e15a7e7eecfc961cc.bundle.js" data-manual="true"></script><input type="hidden" id="__csrf" value="efcJa4KP-KwLARwksQhmZBaHobcT9ZtfYhDw"/></body></html>