{
    "version": "https://jsonfeed.org/version/1",
    "title": "Authress Release Notes",
    "home_page_url": "https://authress.io/knowledge-base/release-notes",
    "description": "Release Notes for Authress APIs, UIs, SDKs, and related services.",
    "items": [
        {
            "id": "https://authress.io/knowledge-base/release-notes/2025/11/01/dynamically-creating-tenants",
            "content_html": "<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"tenant-selection\">Tenant Selection<a href=\"#tenant-selection\" class=\"hash-link\" aria-label=\"Direct link to Tenant Selection\" title=\"Direct link to Tenant Selection\">​</a></h3><p><a href=\"/knowledge-base/docs/authentication/user-authentication#tenants\">Authress Tenants</a> exist to group users together to improve the login experience for your users. Users from the same company or business unit will often have SSO setup. To give users a seamless SSO login experience, the correct configuration must be provided. This configuration is specified in the Authress <a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Tenant connection resource</a>.</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Identity Provider connections screen\" src=\"/knowledge-base/assets/images/connections-89e8b68b6d95f4765f831fc4c07af1e0.png\" width=\"1467\" height=\"804\" class=\"img_ev3q\"></p></div><p>In some cases however, and usually when a company has not yet logged into your solution before, a tenant might not exist yet. An example might be if you have configured the Google or Microsoft Entra connections. In these cases, a user can log in with their SSO corporate identity provider without first configuring a tenant in your Authress account.</p><p>In those cases, Authress now provides a way to capture their tenant configuration and automatically generate a tenant resource with the appropriate configuration. That generated tenant will be assigned to the user and available in the user's generated tokens in the <code>aud</code> claim. See <a href=\"/knowledge-base/docs/authentication/user-authentication#tenants\">Tenants</a> for more information.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"configuration\">Configuration<a href=\"#configuration\" class=\"hash-link\" aria-label=\"Direct link to Configuration\" title=\"Direct link to Configuration\">​</a></h3><p>The default configuration in Authress is to not automatically generate a tenant. The automatic generation of resources can cause confusion and add noise to accounts. That being said, there are scenarios where it would be valuable to have the generated tenant automatically. To set this up, specify the <code>Tenant Configuration</code> for the relevant connection. To use the tenant specified by the identity provider, select <code>Passthrough</code> as the tenant assignment option.</p><div class=\"image-lg\"><p><img loading=\"lazy\" alt=\"Use the identity provider connection via the passthrough configuration\" src=\"/knowledge-base/assets/images/passthrough-4d30b63bf48721338f9cbaba60137277.png\" width=\"1715\" height=\"931\" class=\"img_ev3q\"></p></div><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"example\">Example<a href=\"#example\" class=\"hash-link\" aria-label=\"Direct link to Example\" title=\"Direct link to Example\">​</a></h3><p>To see how <code>Passthrough</code> tenant assignment might work in practice, consider a user associated with a Google Workspace account. In their account their Workspace Tenant defined by the <code>HD</code> property from Google Login, will be populated with their domain:</p><div class=\"language-json codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#f8f8f2;--prism-background-color:#272822\"><div class=\"codeBlockTitle_Ktv7\">Google Workspace generated token payload</div><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-json codeBlock_bY9V thin-scrollbar\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\"></span><span class=\"token punctuation\" style=\"color:#f8f8f2\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">  </span><span class=\"token property\" style=\"color:#f92672\">\"iss\"</span><span class=\"token operator\" style=\"color:#66d9ef\">:</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#a6e22e\">\"https://accounts.google.com\"</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">  </span><span class=\"token property\" style=\"color:#f92672\">\"aud\"</span><span class=\"token operator\" style=\"color:#66d9ef\">:</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#a6e22e\">\"1234567890-123456789abcdef.apps.googleusercontent.com\"</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">  </span><span class=\"token property\" style=\"color:#f92672\">\"sub\"</span><span class=\"token operator\" style=\"color:#66d9ef\">:</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#a6e22e\">\"12345678901234567890\"</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">  </span><span class=\"token property\" style=\"color:#f92672\">\"exp\"</span><span class=\"token operator\" style=\"color:#66d9ef\">:</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#ae81ff\">1745365295</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">  </span><span class=\"token property\" style=\"color:#f92672\">\"name\"</span><span class=\"token operator\" style=\"color:#66d9ef\">:</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#a6e22e\">\"Example user\"</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">  </span><span class=\"token property\" style=\"color:#f92672\">\"given_name\"</span><span class=\"token operator\" style=\"color:#66d9ef\">:</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#a6e22e\">\"Example\"</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">  </span><span class=\"token property\" style=\"color:#f92672\">\"family_name\"</span><span class=\"token operator\" style=\"color:#66d9ef\">:</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#a6e22e\">\"User\"</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line theme-code-block-highlighted-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">  </span><span class=\"token property\" style=\"color:#f92672\">\"hd\"</span><span class=\"token operator\" style=\"color:#66d9ef\">:</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#a6e22e\">\"example.com\"</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\"></span><span class=\"token punctuation\" style=\"color:#f8f8f2\">}</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"Copy code to clipboard\" title=\"Copy\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg class=\"copyButtonIcon_y97N\" viewBox=\"0 0 24 24\"><path d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg class=\"copyButtonSuccessIcon_LjdS\" viewBox=\"0 0 24 24\"><path d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div><p>Once this user has completed login, a new tenant will be created:</p><p><img loading=\"lazy\" alt=\"Passthrough generated Google Tenant\" src=\"/knowledge-base/assets/images/tenant-c0b15b31eb66717a66a85cfb68dbbfd5.png\" width=\"960\" height=\"990\" class=\"img_ev3q\"></p><p>Additionally, all subsequent users from the same organization will also get assigned to the same tenant.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/settings?focus=branding\" target=\"_blank\" rel=\"noopener noreferrer\">Configure the login screen</a></li><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Add tenant passthrough configuration identity connections</a></li><li><a href=\"/knowledge-base/docs/authentication/user-authentication#tenants\">Authress Tenants</a></li><li><a href=\"/knowledge-base/docs/authentication/connecting-providers-idp/setup-facebook-login#authress-connection-configuration\">Identity Provider Connection configurations</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2025/11/01/dynamically-creating-tenants",
            "title": "Identity Provider defined tenant associations",
            "summary": "Dynamically generate tenants in Authress and assign them to users from trusted Identity Provider Connections.",
            "date_modified": "2025-11-01T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/2025/09/26/predicting-the-identity-provider",
            "content_html": "<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"automatic-identity-provider-selection\">Automatic Identity Provider Selection<a href=\"#automatic-identity-provider-selection\" class=\"hash-link\" aria-label=\"Direct link to Automatic Identity Provider Selection\" title=\"Direct link to Automatic Identity Provider Selection\">​</a></h3><p>Authress has automated away the Login configuration experience. Our goal has always been to reduce the complexity in getting every part of authentication correct.</p><p>One of the remaining areas of issue is the automatic tenant selection. Users that do not have a configured SSO tenant, and do not know which identity provider to pick, might enter their email into the SSO email field:</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Login Error Message when no tenant is configured\" src=\"/knowledge-base/assets/images/error-message-6d14d0db0603a030abe7564720aa9b80.png\" width=\"556\" height=\"530\" class=\"img_ev3q\"></p></div><p>When doing so, by default they would be met with the error <code>Domain gmail.com is not configured for SSO</code>. While this is accurate, correct, and also translated into the local language for the user using the <a href=\"/knowledge-base/release-notes/2025/02/10/login-ui-translations-every-language\">Automatic Locale Selection</a> feature, we've identified that this is unhelpful. So we should take this even further.</p><p>In every case, the user has an email, in many of these cases the user's email is tied to a provider that is both:</p><ul><li>An email provider</li><li>An identity provider</li></ul><p>In these cases, we can use the properties of the email domain to identify which identity provider the user is a part of.</p><p>For example, in the case of <code>test@gmail.com</code> the domain is <code>gmail.com</code> which is clearly Google Login. Rather than conveying to the user that there is no domain configured, we can automatically start the login process with that domain instead.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"implementation\">Implementation<a href=\"#implementation\" class=\"hash-link\" aria-label=\"Direct link to Implementation\" title=\"Direct link to Implementation\">​</a></h3><p>That is a trivial case, however for other scenarios which are not so obvious, often we will resort to the MX records associated with the email domain. For a real world scenario, let's review the usage if the <code>authress.io</code> domain was used.</p><div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#f8f8f2;--prism-background-color:#272822\"><div class=\"codeBlockTitle_Ktv7\">MX record lookup for authress.io</div><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token function\" style=\"color:#e6db74\">dig</span><span class=\"token plain\"> MX authress.io +short </span><span class=\"token operator\" style=\"color:#66d9ef\">|</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#e6db74\">cut</span><span class=\"token plain\"> -f2 -d</span><span class=\"token string\" style=\"color:#a6e22e\">' '</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#66d9ef\">|</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#e6db74\">sort</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">aspmx.l.google.com</span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">aspmx2.googlemail.com.</span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">aspmx3.googlemail.com.</span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">alt1.aspmx.l.google.com.</span><br></span><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token plain\">alt2.aspmx.l.google.com.</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"Copy code to clipboard\" title=\"Copy\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg class=\"copyButtonIcon_y97N\" viewBox=\"0 0 24 24\"><path d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg class=\"copyButtonSuccessIcon_LjdS\" viewBox=\"0 0 24 24\"><path d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div><p>Here we can see that Google Workspace is being used. And in that case we can automatically redirect a user with the email domain to the Google Workspace login. When the user enters their email as <code>test@authress.io</code>, they will get automatically redirected to the Google Workspace login:</p><div class=\"image-lg\"><p><img loading=\"lazy\" alt=\"Automatic redirect to login\" src=\"/knowledge-base/assets/images/automatic-prompt-9b0ec03d4fecd87094e7337c6099e0a8.png\" width=\"980\" height=\"490\" class=\"img_ev3q\"></p></div><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"login-box-configuration\">Login Box Configuration<a href=\"#login-box-configuration\" class=\"hash-link\" aria-label=\"Direct link to Login Box Configuration\" title=\"Direct link to Login Box Configuration\">​</a></h3><p>Because this configuration is mutually exclusive with the other fallback mechanisms, it has to be explicitly enabled. To enable, set the Fallback mode for the <a href=\"https://authress.io/app/#/settings?focus=branding\" target=\"_blank\" rel=\"noopener noreferrer\">Authress Management Login Box</a> to be the value <code>Predict IdP using Domain</code>.</p><div class=\"image-lg\"><p><img loading=\"lazy\" alt=\"Authress automatically select the appropriate identity connection provider\" src=\"/knowledge-base/assets/images/configuration-3ce8dbc32a2f7f8653bdebcdce36b94a.png\" width=\"1727\" height=\"1059\" class=\"img_ev3q\"></p></div><p>Note: Only an identity provider that is enabled for the managed login screen will be selected. In this case if the Google Workspace OAuth connection was not enabled, then it would not have been selected. This prevents unexpected login scenarios from your users.</p><p>At the time of the release, the supported providers are Google Workspace, Microsoft O365, and Zoho. If the one you are looking for support for another that listed, just reach out to our <a href=\"https://authress.io/app/#/support\" target=\"_blank\" rel=\"noopener noreferrer\">support</a> to make a <a href=\"https://authress.io/app/#/support\" target=\"_blank\" rel=\"noopener noreferrer\">language or locale support request</a>.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/settings?focus=branding\" target=\"_blank\" rel=\"noopener noreferrer\">Configure the login screen</a></li><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Add an identity connections</a></li><li><a href=\"/knowledge-base/docs/authentication/user-authentication\">User login experience</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2025/09/26/predicting-the-identity-provider",
            "title": "Identity Provider Connection Predictions",
            "summary": "The Authress managed login UI has learned how to predict identity providers using the pre-configured identity provider connections.",
            "date_modified": "2025-09-26T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/2025/02/10/login-ui-translations-every-language",
            "content_html": "<p>Authress has automated away the Login configuration experience. Our default managed UI was already fully customizable, and now it comes with translations for over <strong>26 languages</strong> including regional locales.</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Customized languages for login UI\" src=\"/knowledge-base/assets/images/login-language-switch-79aa05b82cbb23e919c078f56843f62b.gif\" width=\"670\" height=\"541\" class=\"img_ev3q\"></p></div><p>The customized login screen language is dynamically selected based on your user's preferred language and locale.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"additional-languages-and-locales\">Additional languages and locales<a href=\"#additional-languages-and-locales\" class=\"hash-link\" aria-label=\"Direct link to Additional languages and locales\" title=\"Direct link to Additional languages and locales\">​</a></h3><p>At the time of the release the supported locales are these, and more are coming. But if the one you are looking for isn't listed, just reach out to our <a href=\"https://authress.io/app/#/support\" target=\"_blank\" rel=\"noopener noreferrer\">support</a> to make a <a href=\"https://authress.io/app/#/support\" target=\"_blank\" rel=\"noopener noreferrer\">language or locale support request</a>.</p><p>Current list:</p><ul><li><code>af</code> - Afrikaans</li><li><code>bn</code> - Bengali</li><li><code>da</code> - Danish</li><li><code>de</code> - German</li><li><code>de-AT</code> - German | Austria</li><li><code>de-DE</code> - German | Germany</li><li><code>de-CH</code> - German | Switzerland</li><li><code>en</code> - English</li><li><code>en-AU</code> - English | Australia</li><li><code>en-CA</code> - English | Canada</li><li><code>en-GB</code> - English | United Kingdom</li><li><code>en-US</code> - English | United States</li><li><code>es</code> - Spanish </li><li><code>es-AR</code> - Spanish | Argentina</li><li><code>es-CL</code> - Spanish | Chile </li><li><code>es-MX</code> - Spanish | Mexico</li><li><code>es-ES</code> - Spanish | Spain</li><li><code>fr</code> - French</li><li><code>fr-BE</code> - French | Belgium</li><li><code>fr-CA</code> - French | Canada</li><li><code>fr-FR</code> - French | France</li><li><code>fr-CH</code> - French | Switzerland</li><li><code>it</code> - Italian </li><li><code>it-IT</code> - Italian | Italy</li><li><code>it-CH</code> - Italian | Switzerland </li><li><code>ja-JP</code> - Japanese</li><li><code>pl-PL</code> - Polish</li><li><code>pt</code> - Portuguese</li><li><code>pt-BR</code> - Portuguese | Brazil</li><li><code>pt-PT</code> - Portuguese | Portugal</li><li><code>uk-UA</code> - Ukrainian</li></ul><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/settings?focus=branding\" target=\"_blank\" rel=\"noopener noreferrer\">Configure the login screen</a></li><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Add an identity connections</a></li><li><a href=\"/knowledge-base/docs/authentication/user-authentication\">User login experience</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2025/02/10/login-ui-translations-every-language",
            "title": "Managed Login UI supports 26+ Languages",
            "summary": "The Authress managed login UI is available in the language your users expect. With 26+ languages supported already and more to come.",
            "date_modified": "2025-02-10T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/2025/01/21/light-dark-theme-login-ui",
            "content_html": "<p>Authress has automated away the Login configuration experience. Instead of having to build your own login screen, Authress supports a managed version for you to configure.</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Customized login box\" src=\"/knowledge-base/assets/images/customize-login-cbc3867c621711cfca7ecf904b92d87a.png\" width=\"1188\" height=\"857\" class=\"img_ev3q\"></p></div><p>The customized login screen is dynamically generated from account configuration. And allows further customization based on:</p><ul><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Identity Connections</a></li><li><a href=\"https://authress.io/app/#/settings?focus=branding\" target=\"_blank\" rel=\"noopener noreferrer\">Your company brand</a></li><li><a href=\"https://authress.io/app/#/settings?focus=tenants\" target=\"_blank\" rel=\"noopener noreferrer\">Customer SSO domains</a></li><li>Plus additional customization options.</li></ul><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"multiple-theme-support\">Multiple theme support<a href=\"#multiple-theme-support\" class=\"hash-link\" aria-label=\"Direct link to Multiple theme support\" title=\"Direct link to Multiple theme support\">​</a></h3><p>Previously the managed login screen had only one set of colors that could be applied. With this release, the managed UI supports the css function <code>light-dark()</code> via the <code>color-scheme: light dark</code>. This means that whatever the color scheme preference of your users is, the managed login UI will automatically update to display your selected theme.</p><p>The light and the dark theme configurations are now available via the Authress Management Portal</p><p><img loading=\"lazy\" alt=\"Dark theme configuration\" src=\"/knowledge-base/assets/images/light-dark-theme-a2d3649a148c4029d3c1fc2fa4a88477.gif\" width=\"1001\" height=\"829\" class=\"img_ev3q\"></p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/settings?focus=branding\" target=\"_blank\" rel=\"noopener noreferrer\">Configure the login screen</a></li><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Add an identity connections</a></li><li><a href=\"/knowledge-base/docs/authentication/user-authentication\">User login experience</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2025/01/21/light-dark-theme-login-ui",
            "title": "Automatic Dark Mode Support is here",
            "summary": "The Authress managed login UI now supports dynamic light-dark mode based on the user's preferences.",
            "date_modified": "2025-01-21T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/2024/09/22/jwt-session-token-configuration-expiry",
            "content_html": "<p>Authress <a href=\"/knowledge-base/docs/authentication/user-authentication#tenants\">Tenant selection</a> enables your users to be automatically redirected to their own corporate identity provider during authentication.</p><p>Authress optimizes for the User Experience. To do this, Authress attempts to keep your users logged even when the token expires. This is known as <a href=\"/knowledge-base/docs/authentication/user-authentication/user-sessions#session-management-and-silent-authentication\">Silent Authentication</a> By default, Authress generated JWTs expiry after <code>24 hours</code>, and session expiry after <code>30 days</code>. This may not be long enough or too long in some circumstances.</p><p>To handle compliance and regulatory requirements. Authress now enables changing the default token and auth session expiries to meet your customers' exact needs. With this release, the Authress Tenant token configuration, can be provided to change one or both of these lifetimes. This configuration is available either through the <a href=\"/knowledge-base/docs/SDKs\">SDKs</a> and the <a href=\"https://authress.io/app/#/api?route=overview\" target=\"_blank\" rel=\"noopener noreferrer\">Authress API</a> or through the Authress Management Portal in the <a href=\"https://authress.io/app/#/settings?focus=tenants\" target=\"_blank\" rel=\"noopener noreferrer\">SSO Tenant Provider configuration</a>.</p><p>When configuring an SSO Tenant in the Authress Management Portal, navigate to the advanced tenant configuration, and specify values for the  <code>Token Configuration</code>:</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Tenant token configuration\" src=\"/knowledge-base/assets/images/tenant-token-configuration-7eb1abc597d58bb03164f6bd405e18ad.png\" width=\"873\" height=\"709\" class=\"img_ev3q\"></p></div><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h2><ul><li><a href=\"https://authress.io/app/#/settings?focus=tenants\" target=\"_blank\" rel=\"noopener noreferrer\">SSO Tenant Management</a></li><li><a href=\"/knowledge-base/docs/authentication/user-authentication#tenants\">Authress Tenants in-depth guide</a></li><li><a href=\"/knowledge-base/docs/authentication/user-oauth-authentication-quick-start\">Authentication with Authress</a></li><li><a href=\"/knowledge-base/docs/authentication/user-authentication/user-sessions#changing-token-or-session-expiry\">Session Management</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2024/09/22/jwt-session-token-configuration-expiry",
            "title": "Customize Token and Auth Session Expiry",
            "summary": "Change the default token and login session expiry for every tenant.",
            "date_modified": "2024-09-22T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/2024/07/08/automatic-tenant-domain-selection",
            "content_html": "<p>Authress <a href=\"/knowledge-base/docs/authentication/user-authentication#tenants\">Tenant selection</a> enables your users to be automatically redirected to their own corporate identity provider during authentication. Some users will prefer public federated providers, such as <a href=\"/knowledge-base/docs/authentication/connecting-providers-idp/setup-google-login\">Login with Google</a>, but for those where SSO provides critical security, tenants are the preferred solution. Authress supports custom Tenant and Identity Provider selection based on either the <code>Tenant ID</code> or the <code>Tenant Lookup Identifier</code>. Often these might be a commonly available customer <strong>subdomain</strong> or a custom domain for your platform. In some cases, you might have customers with multiple email domains in the same organization or customer tenant. Common examples include when a customer has multiple business units and each business unit has their own email domain. Users from either business unit who should be part of the same tenant, should be automatically mapped based on any number of different email domains.</p><p>With this release Authress now supports multiple domains, by default up to 10 different eTLDs. This configuration is available either through the <a href=\"/knowledge-base/docs/SDKs\">SDKs</a> and the <a href=\"https://authress.io/app/#/api?route=overview\" target=\"_blank\" rel=\"noopener noreferrer\">Authress API</a> or through the Authress Management Portal in the <a href=\"https://authress.io/app/#/settings?focus=tenants\" target=\"_blank\" rel=\"noopener noreferrer\">SSO Tenant Provider configuration</a>.</p><p>When configuring an SSO Tenant in the Authress Management Portal, now, the option to select the <code>Tenant's email domains</code> is now available:</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Multiple email domains\" src=\"/knowledge-base/assets/images/tenant-email-domains-d5fa53a9ec65a503a1dc3fee02d5d5cd.png\" width=\"514\" height=\"509\" class=\"img_ev3q\"></p></div><p>This functionality will be activated when one of your users in one of your tenants attempts to log in with their email in the <a href=\"https://authress.io/app/#/settings?focus=branding\" target=\"_blank\" rel=\"noopener noreferrer\">Authress Managed Login Screen</a>. In this case, we can see <code>company.com</code> being entered, and the correct tenant will be selected based on that email:</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Customizeable login box\" src=\"/knowledge-base/assets/images/login-box-3ca992379486cae52d776db0c9ff8647.png\" width=\"467\" height=\"527\" class=\"img_ev3q\"></p></div><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h2><ul><li><a href=\"https://authress.io/app/#/settings?focus=tenants\" target=\"_blank\" rel=\"noopener noreferrer\">SSO Tenant Management</a></li><li><a href=\"/knowledge-base/docs/authentication/user-authentication#tenants\">Authress Tenants in-depth guide</a></li><li><a href=\"/knowledge-base/docs/authentication/user-oauth-authentication-quick-start\">Authentication with Authress</a></li><li><a href=\"/knowledge-base/docs/authentication/user-authentication/customizing-your-login-box\">Login Box Configuration</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2024/07/08/automatic-tenant-domain-selection",
            "title": "Tenant email domain auto selection",
            "summary": "Select the correct Authress user tenant automatically based on the user's specified email address",
            "date_modified": "2024-07-08T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/2024/03/15/automatic-identity-and-user-linking",
            "content_html": "<p>Link user identities automatically when the user signs up for a more seamless user experience. Starting today, Authress provides a new configuration option allowing for the automatic linking of user identities. When a user signs up with a new account, if that account identity passes our first level security checks and matches an already existing user identity saved in Authress, then Authress can link these.</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Identity Connection Configuration\" src=\"/knowledge-base/assets/images/connection-configuration-78db357ce036f3ce24707ece1e890a89.png\" width=\"1428\" height=\"1025\" class=\"img_ev3q\"></p></div><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"linking-identities\">Linking identities<a href=\"#linking-identities\" class=\"hash-link\" aria-label=\"Direct link to Linking identities\" title=\"Direct link to Linking identities\">​</a></h2><p>User identity linking supports the following three modes.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"disabled\">Disabled<a href=\"#disabled\" class=\"hash-link\" aria-label=\"Direct link to Disabled\" title=\"Direct link to Disabled\">​</a></h3><p>Do not link identities and do not allow users to link identities manually. This options should be used by default in <strong>Business Contexts</strong>, when user identities and data is owned by a business.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"explicit\">Explicit<a href=\"#explicit\" class=\"hash-link\" aria-label=\"Direct link to Explicit\" title=\"Direct link to Explicit\">​</a></h3><p>Allow users to link identities by utilizing the Link Identity API via <code>loginClient.linkIdentity()</code> call in the <a href=\"https://www.npmjs.com/package/@authress/login\" target=\"_blank\" rel=\"noopener noreferrer\">Authress Login SDK</a>. More details about how to do this can be found under <a href=\"/knowledge-base/docs/authentication/linked-user-accounts\">linking user identities</a> in the Authress Knowledge Base.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"automatic\">Automatic<a href=\"#automatic\" class=\"hash-link\" aria-label=\"Direct link to Automatic\" title=\"Direct link to Automatic\">​</a></h3><p>Authress will attempt to automatically link user identities when available. Authress will utilize the email address of the identities as well as other key properties to decide if it is safe to link. In the case that it is Authress will automatically link the identity.</p><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h2><ul><li><a href=\"https://www.npmjs.com/package/@authress/login\" target=\"_blank\" rel=\"noopener noreferrer\">Authress Login SDK</a></li><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Identity linking configuration</a></li><li><a href=\"/knowledge-base/docs/authentication/linked-user-accounts\">Linking user accounts deep dive</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2024/03/15/automatic-identity-and-user-linking",
            "title": "Automaticly link user identities on signup",
            "summary": "Link user identities automatically when the user signs up for a more seamless user experience.",
            "date_modified": "2024-03-15T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/2024/02/22/audit-trail-dashboard",
            "content_html": "<p>Authress automatically provides an audit trail of access to all your resources. Every authorization request and every user login is tracked and streamed to one of our <a href=\"/knowledge-base/docs/account-management/aws-event-bridge-audit-trail\">cloud technology partners</a>. For example AWS and GCP both have first class integrations, and you can review their <a href=\"/knowledge-base/docs/account-management/aws-event-bridge-audit-trail\">respective guides</a>.</p><p>There are many types of events, such as <strong>Login</strong> and <strong>User Authorized</strong>. These events are now available in the <a href=\"https://authress.io/app/#/settings?focus=audit-streams&amp;tab=trail\" target=\"_blank\" rel=\"noopener noreferrer\">Authress Management Portal</a>. The dashboard contains a list of the most recent requests to Authress and their result as well as aggregates for the types of requests, their responses, and your most frequently used resources:</p><p><img loading=\"lazy\" alt=\"Authress authorization metrics\" src=\"/knowledge-base/assets/images/audit-trail-dashboard-634d5801e14e8a0b3dcb9a5d9160d989.png\" width=\"1404\" height=\"941\" class=\"img_ev3q\"></p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/settings?focus=audit-streams&amp;tab=trail\" target=\"_blank\" rel=\"noopener noreferrer\">See the audit trail</a></li><li><a href=\"/knowledge-base/docs/account-management/aws-event-bridge-audit-trail\">Audit trial integrations</a></li><li><a href=\"https://authress.io/app/#/settings?focus=audit-streams&amp;tab=configuration\" target=\"_blank\" rel=\"noopener noreferrer\">Configure a new integration</a></li><li><a href=\"https://us-east-1.console.aws.amazon.com/events/home?region=us-east-1#/partners/authress.io?page=overview\" target=\"_blank\" rel=\"noopener noreferrer\">AWS EventBridge guide</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2024/02/22/audit-trail-dashboard",
            "title": "Audit Trail Dashboard",
            "summary": "Authress dynamic audit trail dashboard is now in preview",
            "date_modified": "2024-02-22T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/multifactor-security-keys",
            "content_html": "<p>Authress supports new configuration for security keys, multifactor authentication, and passkeys.</p><p>Until now, you've been accustomed with the Authress <a href=\"https://authress.io/app/#/settings?focus=branding\" target=\"_blank\" rel=\"noopener noreferrer\">authentication login box</a>.</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Customized login box\" src=\"/knowledge-base/assets/images/customize-login-cbc3867c621711cfca7ecf904b92d87a.png\" width=\"1188\" height=\"857\" class=\"img_ev3q\"></p></div><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"mfa-hardware-and-software-keys\">MFA Hardware and software keys<a href=\"#mfa-hardware-and-software-keys\" class=\"hash-link\" aria-label=\"Direct link to MFA Hardware and software keys\" title=\"Direct link to MFA Hardware and software keys\">​</a></h3><p>Authress now supports Hardware and software keys with any connection, users can add any number of additional keys to their account to be used as a second factor. These can be and should be used when any federated or social provider is enabled and your users don't want to trust solely a single provider for their identity. Additionally, in some regulated spaces, you might need a FIPS certified strategy for authentication.</p><p>User configured security keys:</p><p><img loading=\"lazy\" alt=\"Security Keys\" src=\"/knowledge-base/assets/images/security-keys-6d342eb9e9dd097da231ecd1df7906d4.png\" width=\"548\" height=\"541\" class=\"img_ev3q\"></p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"authress-security-keys\">Authress Security Keys<a href=\"#authress-security-keys\" class=\"hash-link\" aria-label=\"Direct link to Authress Security Keys\" title=\"Direct link to Authress Security Keys\">​</a></h3><p>Next, Authress also supports this same MFA strategy. To improve the security of your Authress account itself, you can add multiple MFA keys to your login, through the <strong>Security Keys</strong> profile option via the Authress Management Portal:</p><p><img loading=\"lazy\" alt=\"Authress Security Keys\" src=\"/knowledge-base/assets/images/authress-security-keys-b16caa3627bec2e20785a6a38ec7eb02.png\" width=\"897\" height=\"383\" class=\"img_ev3q\"></p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"passwordless-passkey-support\">Passwordless Passkey support<a href=\"#passwordless-passkey-support\" class=\"hash-link\" aria-label=\"Direct link to Passwordless Passkey support\" title=\"Direct link to Passwordless Passkey support\">​</a></h3><p>Lastly, we've enabled Passkeys as a first factor as well. Now, those same security keys can be used to authenticate users without needing a username and password. Passkeys are the only truly safe passwordless authentication strategy.</p><p>Enable passkeys for your available login connections in one step on the Authress <a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Identity Connections</a> screen.</p><p><img loading=\"lazy\" alt=\"Enable passkeys support\" src=\"/knowledge-base/assets/images/enable-passkeys-d82b0774f98dd29d1bafc956b211e201.png\" width=\"589\" height=\"313\" class=\"img_ev3q\"></p><h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h2><ul><li><a href=\"https://authress.io/app/#/settings?focus=branding\" target=\"_blank\" rel=\"noopener noreferrer\">Configure the login screen</a></li><li><a href=\"/knowledge-base/docs/authentication/user-authentication/adding-multifactor-authentication\">Setup user security keys</a></li><li><a href=\"https://authress.io/app/#/settings\" target=\"_blank\" rel=\"noopener noreferrer\">Add Authress Admin account security keys</a></li><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Add Passkeys authentication for your users</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/multifactor-security-keys",
            "title": "Multifactor Security Keys + Passkey support",
            "summary": "Authress supports new configuration for security keys, multifactor authentication, and passkeys.",
            "date_modified": "2023-12-15T10:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/2023/10/24/user-id-expressions",
            "content_html": "<p>Authress supports authentication and authorization among other first-class features. Where possible, it is better to accept these identity providers through Authress using an <a href=\"/knowledge-base/docs/authentication/user-oauth-authentication-quick-start\">Identity Connection</a>.</p><p>However, you may wish to continue using your existing authentication provider with Authress when switching to Authress authentication is not possible. In these cases, because most identity providers do not support granular authorization and permissions management, it is a common augment your existing authentication and identity provider (IdP) with <a href=\"/knowledge-base/docs/category/authorization\">Authress Authorization and access control</a>.</p><p>This configuration in Authress is called <a href=\"/knowledge-base/docs/authentication/oidc-trusted-identities\">OIDC External Trusted Identities</a>, and starting today, these identities can be used to generate custom user IDs.</p><p>Until now, when using an external trusted identity, the User ID was required to be the <code>sub</code> claim of the provider's generated JWTs. Now it can be any claim found in the JWT and that resultant User ID can also have a custom prefix.</p><p>This helps disambiguate different providers that have overlapping User ID spaces, allowing you to better restrict access to a single unique user ID.</p><p>Check out the new <code>User ID Expression</code> attribute available both through the API and in the Authress Management Portal:</p><p><img loading=\"lazy\" alt=\"External Identity Provider configuration\" src=\"/knowledge-base/assets/images/user-id-expression-5678481dea7dfb0e7672650aea79f10d.png\" width=\"794\" height=\"559\" class=\"img_ev3q\"></p><p>This configuration would generate a User ID <code>google|1000-google-user-id</code>.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"/knowledge-base/academy/topics/access-control-strategies\">Access Control Strategies</a></li><li><a href=\"/knowledge-base/docs/authentication/oidc-trusted-identities\">OIDC External Trusted Identities</a></li><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Add a new connection</a></li><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Add a new External Trusted Identity Provider</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2023/10/24/user-id-expressions",
            "title": "Custom User ID Expressions",
            "summary": "Enable customizing third party authentication for Authress now with prefixes and user ID Expressions.",
            "date_modified": "2023-10-24T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/2023/10/07/groups-records-soft-limits",
            "content_html": "<p>The default limit for the number of allowed groups and access records has been increased from 100,000 to <strong>2 million</strong>. This change applies for both <a href=\"/knowledge-base/docs/authorization/access-records/record-model-design#1-a-record-represents-the-permissions-that-a-user-or-a-group-has-to-a-list-of-resources\">Groups</a> and <a href=\"/knowledge-base/docs/authorization/access-records\">Access Records</a>.</p><p>Before this change, searching for Access Records or Groups using the search query dialogs in the <a href=\"https://authress.io/app/#/settings?focus=groups\" target=\"_blank\" rel=\"noopener noreferrer\">Authress Management portal</a>, might not have returned exactly the correct results. However, starting today, a high usage of access records or groups when searching will now be a much better experience. It's important to clarify, more complex queries will always take more time to complete.</p><p>If you're interested in using this improved functionality via one of our <a href=\"https://authress.io/app/#/api?route=overview\" target=\"_blank\" rel=\"noopener noreferrer\">SDKs</a> as well, we would love to hear about it.</p><p>We still plan to roll out additional improvements in the near future, so stay tuned. As always, if you run into any issues with the portal, please reach out to our development team via our <a href=\"https://authress.io/app/#/support\" target=\"_blank\" rel=\"noopener noreferrer\">Support Page</a> so we can get those issues resolved.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"/knowledge-base/docs/authorization/access-records/record-model-design#1-a-record-represents-the-permissions-that-a-user-or-a-group-has-to-a-list-of-resources\">Groups</a></li><li><a href=\"/knowledge-base/docs/authorization/access-records\">Access Records</a></li><li><a href=\"https://authress.io/app/#/api\" target=\"_blank\" rel=\"noopener noreferrer\">Authress API</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2023/10/07/groups-records-soft-limits",
            "title": "Soft limit increase for Groups/Access Records",
            "summary": "The default limit for the number of allowed groups and access records has been increased.",
            "date_modified": "2023-10-07T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/2023/09/19/ux-improvements",
            "content_html": "<p>Through our ongoing efforts to make the <a href=\"https://authress.io/app/\" target=\"_blank\" rel=\"noopener noreferrer\">Authress Management Portal</a> easier to use, nicer to use, prettier to use. We've introduced the following improvements.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"user-explorer-icons\">User Explorer Icons<a href=\"#user-explorer-icons\" class=\"hash-link\" aria-label=\"Direct link to User Explorer Icons\" title=\"Direct link to User Explorer Icons\">​</a></h3><p>Until now, when one of your users had a <code>picture</code> claim associated with their user identity, it would not show in the portal. Now all safe user icons will be automatically displayed.</p><p><img loading=\"lazy\" alt=\"User Explorer Icons\" src=\"/knowledge-base/assets/images/user-explorer-icons-00d6ed394acc6c34f91f2cb43ca301c8.png\" width=\"1039\" height=\"371\" class=\"img_ev3q\"></p><p>Profile pictures will be displayed if the images for the user are sourced from one of the following locations:</p><ul><li>Google</li><li>Secure Gravatar</li><li>Slack Avatars</li><li>Authress identity pictures</li></ul><p>There are more coming to this list. However, not all pictures will be automatically shown. This is because not all image hosting locations are secure, and if a malicious image is uploaded to that location, and isn't validated, showing it to you in the management portal creates an attack surface. For this reason, be careful of media platforms that allow users images to be shown to you without taking the necessary security precautions. If there is a source location you would like added to this list and we can verify that provider is taking the necessarily precautions with shared images, it will be added.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"access-record-resource-hints\">Access Record Resource Hints<a href=\"#access-record-resource-hints\" class=\"hash-link\" aria-label=\"Direct link to Access Record Resource Hints\" title=\"Direct link to Access Record Resource Hints\">​</a></h3><p>Access Records resources dropdown will now dynamically populated with suggested resources. This makes it easier to filter and find the resource URI that are looking for. It also helps to avoid potentially guessing when the resource isn't present.</p><p><img loading=\"lazy\" alt=\"Access Record Resource Hints\" src=\"/knowledge-base/assets/images/access-record-resources-e1dc1da8fd584c8565ab15cd410f3667.png\" width=\"1406\" height=\"670\" class=\"img_ev3q\"></p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"resource-tags\">Resource Tags<a href=\"#resource-tags\" class=\"hash-link\" aria-label=\"Direct link to Resource Tags\" title=\"Direct link to Resource Tags\">​</a></h3><p>Just as <a href=\"/knowledge-base/docs/account-management/managing-multiple-environments\">environment</a> were displayed before, now all Authress related resource tags will be visible in the portal as well.</p><p><img loading=\"lazy\" alt=\"Resource Tags\" src=\"/knowledge-base/assets/images/all-tags-355e7453a462a3395211863f1290d76d.png\" width=\"676\" height=\"293\" class=\"img_ev3q\"></p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/\" target=\"_blank\" rel=\"noopener noreferrer\">Authress Management Portal</a></li><li><a href=\"https://authress.io/app/#/settings?focus=explorer\" target=\"_blank\" rel=\"noopener noreferrer\">User Explorer</a></li><li><a href=\"https://authress.io/app/#/settings?focus=records\" target=\"_blank\" rel=\"noopener noreferrer\">Access Records</a></li><li><a href=\"/knowledge-base/docs/account-management/managing-multiple-environments\">Environment Management</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2023/09/19/ux-improvements",
            "title": "UX Improvements",
            "summary": "We've found some UX improvements that were worth sharing.",
            "date_modified": "2023-09-19T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/2023/08/08/python-3.0-release",
            "content_html": "<p>The <a href=\"/knowledge-base/docs/SDKs/python\">Authress SDK for python</a> version 3.0 is now available. For details regarding the changes see the <a href=\"https://github.com/Authress/authress-sdk.py/blob/release/3.0/CHANGELOG.md\" target=\"_blank\" rel=\"noopener noreferrer\">SDK Changelog</a>.</p><p>The primary improvements are:</p><ul><li>Consistently named api resource paths in the SDK which align to the <a href=\"https://authress.io/app/#/api\" target=\"_blank\" rel=\"noopener noreferrer\">Authress API</a>.</li><li>And, the SDK now offers type checking through the <code>typings</code> package.</li><li>Further all available <a href=\"https://authress.io/app/#/api\" target=\"_blank\" rel=\"noopener noreferrer\">Authress endpoints</a> are available through the SDK.</li></ul><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"/knowledge-base/docs/SDKs/python\">Python SDK</a></li><li><a href=\"https://github.com/Authress/authress-sdk.py/tree/release/3.0#usage\" target=\"_blank\" rel=\"noopener noreferrer\">Installation Guide</a></li><li><a href=\"https://pypi.org/project/authress/\" target=\"_blank\" rel=\"noopener noreferrer\">PyPI package information</a></li><li><a href=\"https://authress.io/app/#/api\" target=\"_blank\" rel=\"noopener noreferrer\">Authress API</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/2023/08/08/python-3.0-release",
            "title": "Python SDK v3.0 Release",
            "summary": "Today marks the official release of the python 3.0 version of the Authress SDK.",
            "date_modified": "2023-08-08T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/access-analyzer-debugging",
            "content_html": "<p>The <a href=\"https://authress.io/app/#/settings?focus=analyzer\" target=\"_blank\" rel=\"noopener noreferrer\">Authress Access Analyzer</a> is our way of giving you the advanced tools you need to answer the complex authorization question you might have.</p><p>Questions such as:</p><ul><li>Does that user really have the correct permission to the resource?</li><li>What's that user's access right now?</li><li>What are all the resources the user has access to with this permission?</li></ul><p>While these actions are at the forefront of Authress authorization checks and done usually via one of the <a href=\"https://authress.io/app/#/api\" target=\"_blank\" rel=\"noopener noreferrer\">Authress SDKs</a>, getting answers to these questions directly in the Authress Management Portal, makes it so much easier.</p><p>This release includes two new features for the Access Analyzer.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"access-record-source\">Access Record Source<a href=\"#access-record-source\" class=\"hash-link\" aria-label=\"Direct link to Access Record Source\" title=\"Direct link to Access Record Source\">​</a></h3><p>When a user has access to a resource via an access record, the Access Analyzer now shows that linked access access record as well as the role that granted the access.</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Linked Access Record information\" src=\"/knowledge-base/assets/images/linked-access-record-ba9ee76d5c9388ccff89053a27195720.png\" width=\"576\" height=\"471\" class=\"img_ev3q\"></p></div><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"access-check-history\">Access Check History<a href=\"#access-check-history\" class=\"hash-link\" aria-label=\"Direct link to Access Check History\" title=\"Direct link to Access Check History\">​</a></h3><p>After each access check the Authress UI will now save and display these checks to make it easier to see what was just validated. This makes it possible to compare a list of authorization checks for anything that might not be working correctly.</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Authorization check history\" src=\"/knowledge-base/assets/images/access-check-history-f74a7598558e78ba74fe03923e99be84.png\" width=\"950\" height=\"342\" class=\"img_ev3q\"></p></div><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/settings?focus=analyzer\" target=\"_blank\" rel=\"noopener noreferrer\">Access Analyzer</a></li><li><a href=\"https://authress.io/app/#/api\" target=\"_blank\" rel=\"noopener noreferrer\">Authress SDKs</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/access-analyzer-debugging",
            "title": "Access Analyzer Improvements",
            "summary": "The Access Analyzer additionally supports a number of improvements to make it even easier to debug issues with authorization checks.",
            "date_modified": "2023-07-06T10:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/list-users-tenant-filter",
            "content_html": "<p>The Authress API endpoint for querying users <code>/v1/users</code> now accepts filtering by a <code>tenantId</code>. This enables custom user workflows based on your customer's accounts.</p><p>Your customers accounts can be grouped by an identifier known as a <a href=\"/knowledge-base/docs/authentication/tenants\">Tenant</a>. A Tenant is a logical source of users for your application. Usually Tenants map one-to-one with your customers. Each of your customer accounts has users that log into your application. During the use of your application there may be a need to fetch all the users that also belong to that same customer account.</p><p>This can now be done by passing in the <code>tenantId</code> query parameter to the <a href=\"https://authress.io/app/#/api?route=get-/v1/users\" target=\"_blank\" rel=\"noopener noreferrer\">List Users endpoint</a>.</p><p>Authress has automated away the Login configuration experience. Instead of having to build your own login screen, Authress supports a managed version for you to configure.</p><div class=\"image-lg\"><p><img loading=\"lazy\" alt=\"List Users API endpoint\" src=\"/knowledge-base/assets/images/list-users-api-ce60c41857c1b5bd71ec284853e5b82e.jpg\" width=\"1265\" height=\"674\" class=\"img_ev3q\"></p></div><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"/knowledge-base/docs/authentication/tenants\">Customer Tenants</a></li><li><a href=\"https://authress.io/app/#/settings?focus=tenants\" target=\"_blank\" rel=\"noopener noreferrer\">Create a customer tenant</a></li><li><a href=\"https://authress.io/app/#/api?route=get-/v1/users\" target=\"_blank\" rel=\"noopener noreferrer\">List Users endpoint</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/list-users-tenant-filter",
            "title": "Fetch all the users in a customer tenant",
            "summary": "The Authress API endpoint for users can now be filtered by a specific tenant ID. This enables custom workflows based on your customer accounts.",
            "date_modified": "2023-06-26T10:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/vanishing-keys",
            "content_html": "<p>Authress introduces <strong>Vanishing Keys</strong>. Vanishing Keys is an <a href=\"https://github.com/Authress/vanishing-keys#authress-vanishing-keys\" target=\"_blank\" rel=\"noopener noreferrer\">open source</a> one time secret store to enable ease of secret transfer.</p><p>In most cases, secrets should be generated and stored by the creator of the secret. And where possible secrets should only be generated at runtime. For this solutions such as a <a href=\"/knowledge-base/docs/usage-guides/aws-guides/encrypting-secrets-with-aws-kms\">Key Management Service</a> exists.</p><p>However, this is not always possible, and we need to transfer ownership of a secret from one person to another.</p><p>More details about how the Vanishing Keys service works is available in the documentation, but the important part of this new Authress service is that it provides 100% client side encryption. The secret and secret passphrase never leave your browser unencrypted.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"creating-a-secret\">Creating a Secret<a href=\"#creating-a-secret\" class=\"hash-link\" aria-label=\"Direct link to Creating a Secret\" title=\"Direct link to Creating a Secret\">​</a></h3><div class=\"image-sm\"><p><a href=\"https://vanish.authress.io\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" alt=\"Authress Vanishing Keys\" src=\"/knowledge-base/assets/images/vanish-3a76ec109b030f3c396a3db045c6e4ba.png\" width=\"703\" height=\"719\" class=\"img_ev3q\"></a></p></div><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"share-the-link\">Share the link<a href=\"#share-the-link\" class=\"hash-link\" aria-label=\"Direct link to Share the link\" title=\"Direct link to Share the link\">​</a></h3><div class=\"image-sm\"><p><a href=\"https://vanish.authress.io\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" alt=\"Authress Vanishing Keys\" src=\"/knowledge-base/assets/images/vanish-with-secret-671ccde6f8427d6a5f51a159cbcf3ac3.png\" width=\"718\" height=\"687\" class=\"img_ev3q\"></a></p></div><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"how-it-works\">How it works<a href=\"#how-it-works\" class=\"hash-link\" aria-label=\"Direct link to How it works\" title=\"Direct link to How it works\">​</a></h3><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Authress Vanishing Keys\" src=\"/knowledge-base/assets/images/vanish-diagram-a14b4ccb2393b49c1aa8dbd9cad0d15e.png\" width=\"1344\" height=\"908\" class=\"img_ev3q\"></p></div><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://vanish.authress.io\" target=\"_blank\" rel=\"noopener noreferrer\">Share a secret with Authress Vanishing Keys</a></li><li><a href=\"https://github.com/Authress/vanishing-keys#authress-vanishing-keys\" target=\"_blank\" rel=\"noopener noreferrer\">Open source service</a></li><li><a href=\"https://github.com/Authress/component-library.js/blob/main/src/components/vanishingKeys.js\" target=\"_blank\" rel=\"noopener noreferrer\">Client side encryption UI Component</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/vanishing-keys",
            "title": "Authress Vanishing Keys",
            "date_modified": "2023-06-10T10:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/multiple-custom-domains",
            "content_html": "<p>To enable increased security and reliability Authress offers the ability to set a <code>Custom Domain</code> for your account. A <a href=\"https://authress.io/app/#/settings?focus=domain\" target=\"_blank\" rel=\"noopener noreferrer\">Custom Domain</a> enables your services to interact with Authress on a domain that you control. Any domain you own can be set. That domain will be used for:</p><ul><li>API calls to Authress from the SDKs you configure</li><li>JWTs Authentication that Authress generates for your services</li></ul><p>Historically, only one domain could be configured per account. In most cases you will only want a single domain, since it can create complex additional scenarios to deal with. For example, if valid tokens created by Authress now can be signed with either of two possible domains, now your services need to deal with two possible JWT <code>Issuers</code>.</p><p>In some cases this is intentional though, or perhaps you are in the process of rebranding, and need more than one domain to be active at the same time. Because of that, Authress now offers support for multiple simultaneous domains.</p><p><a href=\"https://authress.io/app/#/settings?focus=domain\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" alt=\"Enable an Authress custom domain\" src=\"/knowledge-base/assets/images/custom-domains-772c3e3ff4be945ce561f7ec7c29b678.png\" width=\"988\" height=\"698\" class=\"img_ev3q\"></a></p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/settings?focus=domain\" target=\"_blank\" rel=\"noopener noreferrer\">Configure a custom domain</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/multiple-custom-domains",
            "title": "Additional Custom Domains",
            "date_modified": "2023-05-30T10:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/resource-multi-wildcard-support",
            "content_html": "<p>Starting today multiple wildcard support is globally available. Requests to check authorization can include multiple <code>✶</code> anywhere in the resourceUri. Requests to the authorization check endpoint accept resourceUris for example:</p><ul><li>In multiple places in the hierarchy: <code>/resources/✶/nested-resource/✶</code></li><li>Present in requests for namespaces: <code>namespace:✶/resources/lower-namespace:✶/nested-resource</code></li></ul><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"api-update-resource-list\">API update: Resource List<a href=\"#api-update-resource-list\" class=\"hash-link\" aria-label=\"Direct link to API update: Resource List\" title=\"Direct link to API update: Resource List\">​</a></h3><p>To further support this functionality the <a href=\"https://authress.io/app/#/api?route=get-/v1/users/-userId-/resources\" target=\"_blank\" rel=\"noopener noreferrer\">List user resources</a> endpoint now accepts a new parameter <code>Collection Configuration</code> that explicitly enables the type of collection result a request expects.</p><p>The original functionality was to only return immediate top level resource matches to a request. This functionality remains the default. When searching for <code>/resources/✶</code>, the result will be a list of matching resources: <code>[  'resources/001', 'resources/002', ...  ]</code>.</p><p>The endpoint now supports <code>INCLUDE_NESTED</code>.</p><p><img loading=\"lazy\" alt=\"API Resource List\" src=\"/knowledge-base/assets/images/api-resource-list-e54ee43c255b9da42ad9684563fe2176.png\" width=\"1010\" height=\"757\" class=\"img_ev3q\"></p><p>Specifying this value cases deeply nested resources to also be returned. A request for <code>/resources/✶</code>, will return: <code>[  'resources/001', 'resources/002/sub-resource/✶', 'resources/003/sub-resource/003'  ]</code>. And additionally requests can include multiple wildcards: <code>/resources/✶/sub-resources/✶</code>, will filter by both resources and sub-resources.</p><div class=\"theme-admonition theme-admonition-info alert alert--info admonition_LlT9\"><div class=\"admonitionHeading_tbUL\"><span class=\"admonitionIcon_kALy\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_S0QG\"><p>What's great about this new functionality is that users with access to <code>✶</code> will also successfully return results. Having access to all resources templates the result. <code>✶</code>, with a search for <code>/resources/✶</code> will return <code>[  '/resources/✶'  ]</code>, making it easier to utilize these results without adding extra filtering logic.</p></div></div><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/api?route=get-/v1/users/-userId-/resources\" target=\"_blank\" rel=\"noopener noreferrer\">List user resources API</a></li><li><a href=\"https://authress.io/app/#/settings?focus=records\" target=\"_blank\" rel=\"noopener noreferrer\">Access Records</a></li><li><a href=\"/knowledge-base/docs/category/authorization\">Authorization checks</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/resource-multi-wildcard-support",
            "title": "Use multiple wildcard in resource filters",
            "date_modified": "2023-05-16T12:52:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/login-box",
            "content_html": "<p>Authress has automated away the Login configuration experience. Instead of having to build your own login screen, Authress supports a managed version for you to configure.</p><div class=\"image-md\"><p><img loading=\"lazy\" alt=\"Customized login box\" src=\"/knowledge-base/assets/images/customize-login-cbc3867c621711cfca7ecf904b92d87a.png\" width=\"1188\" height=\"857\" class=\"img_ev3q\"></p></div><p>The customized login screen is dynamically generated from account configuration. And allows further customization based on:</p><ul><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Identity Connections</a></li><li><a href=\"https://authress.io/app/#/settings?focus=branding\" target=\"_blank\" rel=\"noopener noreferrer\">Your company brand</a></li><li><a href=\"https://authress.io/app/#/settings?focus=tenants\" target=\"_blank\" rel=\"noopener noreferrer\">Customer SSO domains</a></li><li>Plus additional customization options.</li></ul><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"standard-apps\">Standard Apps<a href=\"#standard-apps\" class=\"hash-link\" aria-label=\"Direct link to Standard Apps\" title=\"Direct link to Standard Apps\">​</a></h3><p>This is purely add-on functionality. Login for regular apps will continue the same as it has been, and your users will not see any difference. You can continue to directly overwrite the default Authress Login Box by passing the <code>connectionId</code> to <code>loginClient.authenticate()</code> call in the <a href=\"https://www.npmjs.com/package/@authress/login\" target=\"_blank\" rel=\"noopener noreferrer\">Authress Login SDK</a>.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"platform-extensions\">Platform Extensions<a href=\"#platform-extensions\" class=\"hash-link\" aria-label=\"Direct link to Platform Extensions\" title=\"Direct link to Platform Extensions\">​</a></h3><p>For platform extensions, the default login experience has just been upgraded. If you didn't already have a customized login screen for third party extensions, the Authress managed version will automatically be provided without any additional configuration necessary on your side.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/settings?focus=branding\" target=\"_blank\" rel=\"noopener noreferrer\">Configure the login screen</a></li><li><a href=\"/knowledge-base/docs/extensions\">Platform extensions</a></li><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Add an identity connections</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/login-box",
            "title": "Customize Authress Hosted Login",
            "summary": "The Authress login screen can now be customized to configure options creating the perfect branded experience with no code for your users..",
            "date_modified": "2023-03-21T10:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/terraform",
            "content_html": "<p>Authress now supports automated resource creation and configuration via <a href=\"/knowledge-base/docs/cicd/terraform\">Terraform</a>.</p><p><img loading=\"lazy\" alt=\"Terraform provider for Authress\" src=\"/knowledge-base/assets/images/terraform-branding-68030cf36e5fb0b7e76ed59e644bf354.png\" width=\"770\" height=\"463\" class=\"img_ev3q\"></p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"cicd-guides\">CI/CD Guides<a href=\"#cicd-guides\" class=\"hash-link\" aria-label=\"Direct link to CI/CD Guides\" title=\"Direct link to CI/CD Guides\">​</a></h3><p>To support a more streamlined integration, Authress offers guides for <a href=\"/knowledge-base/docs/cicd/terraform\">Terraform</a> as well as OIDC CI/CD guides for <a href=\"/knowledge-base/docs/cicd/github\">GitHub</a> and <a href=\"/knowledge-base/docs/cicd/gitlab\">GitLab</a>. These CI/CD guides make managing Authress resources securely a simple matter without needing to be a security expert.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"quick-setup-guide-for-oidc\">Quick setup guide for OIDC<a href=\"#quick-setup-guide-for-oidc\" class=\"hash-link\" aria-label=\"Direct link to Quick setup guide for OIDC\" title=\"Direct link to Quick setup guide for OIDC\">​</a></h3><p>Additionally, Authress has released a quick setup guide for OIDC. The guide steps through the flow to secure a CI/CD pipeline automatically without needing to create an Authress service client. Instead, Authress supports the dynamic credentials that are generated by your CI/CD platform to log into Authress. Follow the relevant OIDC CI/CD for more details.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/settings?focus=quick&amp;flow=oidc\" target=\"_blank\" rel=\"noopener noreferrer\">Quick setup for OIDC</a></li><li><a href=\"/knowledge-base/docs/cicd/terraform\">Authress guide to Terraform</a></li><li><a href=\"https://registry.terraform.io/providers/Authress/authress/latest/docs\" target=\"_blank\" rel=\"noopener noreferrer\">Terraform provider documentation</a></li><li><a href=\"/knowledge-base/docs/cicd/github\">GitHub configuration</a></li><li><a href=\"/knowledge-base/docs/cicd/gitlab\">GitLab configuration</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/terraform",
            "title": "The Authress Terraform provider is released",
            "summary": "The Authress Terraform provider is now available to be used to automatically create Authress resources directly from your CI/CD pipelines.",
            "date_modified": "2023-02-28T10:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/access-record-statement-users",
            "content_html": "<p>Starting today, the statements in an <a href=\"/knowledge-base/docs/authorization/access-records\">access record</a>, can now additionally specify both <code>users</code> and <code>groups</code>.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"user-based-access-records\">User based access records<a href=\"#user-based-access-records\" class=\"hash-link\" aria-label=\"Direct link to User based access records\" title=\"Direct link to User based access records\">​</a></h3><p>Historically, <code>users</code> and <code>groups</code> were only available as properties of the access record, which meant all <code>statements</code> applied to all <code>users</code> and all <code>groups</code>. This made it easy to support having one group of users with many statements. Additionally, access records could be directly associated with a <code>user</code> so that it was clear that changes to an access meant changes for that particular user.</p><p>To change a user's permissions, it was as simple as looking up the access record with the same ID as the user:</p><div class=\"language-js codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#f8f8f2;--prism-background-color:#272822\"><div class=\"codeBlockTitle_Ktv7\">Fetch an Authress access record</div><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-js codeBlock_bY9V thin-scrollbar\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#f8f8f2\"><span class=\"token keyword\" style=\"color:#66d9ef\">const</span><span class=\"token plain\"> record </span><span class=\"token operator\" style=\"color:#66d9ef\">=</span><span class=\"token plain\"> </span><span class=\"token keyword control-flow\" style=\"color:#66d9ef\">await</span><span class=\"token plain\"> authressClient</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">.</span><span class=\"token property-access\">records</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">.</span><span class=\"token method function property-access\" style=\"color:#e6db74\">getRecord</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">(</span><span class=\"token plain\">userId</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">)</span><span class=\"token punctuation\" style=\"color:#f8f8f2\">;</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"Copy code to clipboard\" title=\"Copy\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg class=\"copyButtonIcon_y97N\" viewBox=\"0 0 24 24\"><path d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg class=\"copyButtonSuccessIcon_LjdS\" viewBox=\"0 0 24 24\"><path d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div><p>And then making necessary changes to that record.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"resource-based-access-records\">Resource based access records<a href=\"#resource-based-access-records\" class=\"hash-link\" aria-label=\"Direct link to Resource based access records\" title=\"Direct link to Resource based access records\">​</a></h3><p>However, when multiple users each needed different access to the same resource, multiple access records would need to be configured. One for each set of permissions. This was because all statements in the access record applied to all users in the record. To have different permissions, separate records would be created, each with the separate set of users.</p><p>Now, access records can directly specify which statements should be applied to which users.</p><p>Instead of listing the users at the record level:</p><p><img loading=\"lazy\" alt=\"Access record users\" src=\"/knowledge-base/assets/images/users-screen-382a56643ab46a0c0605628b6f1fc5a3.png\" width=\"1007\" height=\"651\" class=\"img_ev3q\"></p><p>Toggle the <code>Enable statement level user assignment</code> switch:</p><p><img loading=\"lazy\" alt=\"Enable statement level user assignment switch\" src=\"/knowledge-base/assets/images/user-statement-switch-b6e4dfcb6f07de40f2d01c7fa402d5e3.png\" width=\"996\" height=\"205\" class=\"img_ev3q\"></p><p>And then enter the users in the statement section of the record. Each statement can have separate users:</p><p><img loading=\"lazy\" alt=\"Access record statement user selection\" src=\"/knowledge-base/assets/images/statement-users-9f4d3a044f0b97031c0248dd2cd22309.png\" width=\"996\" height=\"386\" class=\"img_ev3q\"></p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/setup?focus=records\" target=\"_blank\" rel=\"noopener noreferrer\">Edit access records</a></li><li><a href=\"https://authress.io/app/#/api?route=post-/v1/records\" target=\"_blank\" rel=\"noopener noreferrer\">API: Create record</a></li><li><a href=\"https://authress.io/app/#/api?route=overview\" target=\"_blank\" rel=\"noopener noreferrer\">Available SDKs</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/access-record-statement-users",
            "title": "Access record statements accept users and groups",
            "summary": "Authress access records can now specify users and groups at the statement level, enabling more granular access control for your resources.",
            "date_modified": "2022-12-27T10:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://authress.io/knowledge-base/release-notes/quick-setup-authentication",
            "content_html": "<p>A new menu item is available in Authress to quickly create new commonly used flows. These flows are knows as <code>Quick Setup Guides</code> and will be populated frequently used options.</p><p><img loading=\"lazy\" alt=\"Authress quick setup menu item\" src=\"/knowledge-base/assets/images/menu-item-5bd225cd16993ae987533b19e4851a7c.png\" width=\"1471\" height=\"597\" class=\"img_ev3q\"></p><p>See the <a href=\"https://authress.io/app/#/settings?focus=quick\" target=\"_blank\" rel=\"noopener noreferrer\">Quick setup guides</a>.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"quick-setup-guide-for-authentication\">Quick setup guide for authentication<a href=\"#quick-setup-guide-for-authentication\" class=\"hash-link\" aria-label=\"Direct link to Quick setup guide for authentication\" title=\"Direct link to Quick setup guide for authentication\">​</a></h3><p>The first released setup guide is for authentication. The guide steps through the flow to create an <a href=\"https://authress.io/app/#/settings?focus=applications\" target=\"_blank\" rel=\"noopener noreferrer\">application</a>, a <a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">connection</a> to an OAuth identity provider, and provides example UI code to directly log a user in.</p><p>On the completion of the flow you can already start managing user identities.</p><h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"related-resources\">Related resources<a href=\"#related-resources\" class=\"hash-link\" aria-label=\"Direct link to Related resources\" title=\"Direct link to Related resources\">​</a></h3><ul><li><a href=\"https://authress.io/app/#/settings?focus=quick&amp;flow=authentication\" target=\"_blank\" rel=\"noopener noreferrer\">Quick setup for authentication</a></li><li><a href=\"https://authress.io/app/#/settings?focus=applications\" target=\"_blank\" rel=\"noopener noreferrer\">Applications</a></li><li><a href=\"https://authress.io/app/#/settings?focus=connections\" target=\"_blank\" rel=\"noopener noreferrer\">Identity provider connection</a></li></ul>",
            "url": "https://authress.io/knowledge-base/release-notes/quick-setup-authentication",
            "title": "Quick Setup for Authentication released",
            "date_modified": "2022-11-28T12:52:00.000Z",
            "tags": []
        }
    ]
}