Entra External ID (CIAM) custom domain — OIDC discovery `issuer` field not updating to custom domain after 3+ days

Brad-3588 40 Reputation points
2026-07-21T09:33:10.0633333+00:00

Service: Microsoft Entra External ID (CIAM)

Feature: Custom URL domain for CIAM tenant

Summary:

I enabled a custom URL domain on a CIAM (External ID) tenant. DNS (CNAME to Azure Front Door) and TLS (Azure Managed Certificate) have been live and resolving correctly since activation. The OIDC discovery document is reachable at the custom domain and three of its four key fields have already updated to reflect it — but the issuer field has not, after more than 3 days.

Discovery doc URL pattern:

`https://

Microsoft Security | Microsoft Entra | Microsoft Entra ID

Answer accepted by question author
Saravana Kumar D 170 Reputation points Microsoft External Staff Moderator
2026-08-21T10:05:13.3633333+00:00

Hello @Brad-3588

Based on your confirmation and the findings from the Microsoft Entra External ID product team, this behavior is expected and works by design. 

The team confirmed that the OIDC issuer for a CIAM tenant remains tied to the tenant identity and continues to use the Microsoft-managed issuer endpoint, even after a custom URL domain has been successfully configured.

In other words, seeing the issuer continue to reference the tenant's Microsoft-managed issuer endpoint is expected.

The custom domain only affects user-facing endpoints such as the authorization endpoint, token endpoint, logout endpoint, and the browser sign-in experience. It does not change the issuer value returned in the OpenID Connect discovery document.

As a result, the following state is the expected final outcome:

  • Discovery document is accessible through the custom domain.
  • Authorization, token, and logout endpoints use the custom domain.
  • The issuer continues to reference the tenant's Microsoft-managed issuer endpoint.

This is not related to propagation delays, a backend issue, or a tenant configuration problem, and no additional action is required on the tenant.

For applications consuming the metadata, we recommend trusting the issuer returned by the discovery document and avoiding validation logic that requires the issuer host to match the custom domain host.

For customers using MSAL.js with a custom domain and encountering ClientAuthError: endpoints_resolution_error, ensure that both the custom domain and the corresponding issuer host returned by the metadata endpoint are included in the knownAuthorities configuration. This allows MSAL to trust the issuer returned by the metadata endpoint.

 
Thank you.

Was this answer helpful?

2 people found this answer helpful.
0 comments No comments

2 additional answers

Sort by: Most helpful
  1. Michele Ariis 7,315 Reputation points MVP Volunteer Moderator
    2026-07-21T09:40:17.65+00:00

    Hi Brad; after more than three days, with DNS, TLS and the other discovery endpoints already updated, I would not consider this a normal propagation delay; it looks more like the custom domain activation has only been partially applied on the backend.

    The issuer value must remain consistent with the authority used by the client; otherwise MSAL correctly rejects the metadata during endpoint discovery; Microsoft describes the custom URL domain as replacing the default ciamlogin.com host for the authentication endpoints, so having only the issuer still referencing the default domain appears inconsistent with the expected configuration.

    I am not aware of any documented way to view the propagation status or manually trigger a refresh for the issuer metadata; I would first test the discovery document without any local or CDN cache, for example from another network and with a unique query string, and confirm that Azure Front Door is not caching the metadata response.

    If the issuer still points to ciamlogin.com, I think a support case is the correct next step; include the tenant ID, custom domain, activation time, full discovery document, response headers and correlation details from the MSAL failure; keeping production temporarily configured with the default authority also seems like the safest workaround, rather than disabling issuer validation.

    Was this answer helpful?

    1 person found this answer helpful.

  2. Brad-3588 40 Reputation points
    2026-08-16T13:50:40.9566667+00:00

    Resolved — the issuer staying on ciamlogin.com is by design, not a propagation bug.

    Microsoft's Entra External ID product team confirmed this via support case the OIDC issuer for a

    CIAM tenant is tied to the tenant, not the hostname. It will always be

    https://{tenantId}.ciamlogin.com/{tenantId}/v2.0, regardless of any custom URL domain. A custom domain only changes the

    user-facing endpoints (authorization_endpoint, token_endpoint, end_session_endpoint, and the browser address bar) — it

    does not, and never will, change the issuer.

    So the state I described — 3 of 4 discovery fields on the custom domain, issuer still on ciamlogin.com — is the

    correct, intended end state, not partial propagation. There is nothing to wait for and nothing to fix on the

    tenant/backend side. (Thanks to @Michele Ariis and @Sindhuja Dasari for the help getting this escalated.)

    What this means for relying parties (the actual fix):

    Your app must accept the ciamlogin.com issuer. A discovery-based library reads it from the metadata automatically — so

    do not hard-code the custom domain as the expected issuer, and don't validate issuer == authority host.

    If you're on MSAL.js and hitting ClientAuthError: endpoints_resolution_error with a custom domain, the specific fix is

    to add the tenant's ciamlogin GUID issuer host to knownAuthorities. As of @azure/msal-browser ≥ 5.11 (PR #8595, "Rule

    5"), the issuer host is trusted only if it's listed there:

    const pca = new PublicClientApplication({

    auth: {
    
      clientId: "<client-id>",
    
      // custom domain in the path uses the tenant ID (GUID), per the custom-URL-domain docs
    
      authority: "https://login.contoso.com/<tenant-id>",
    
      knownAuthorities: [
    
        "login.contoso.com",           // your custom domain host
    
        "<tenant-id>.ciamlogin.com"    // the ciamlogin issuer host every token actually carries
    
      ]
    
    }
    ```  });
    
      The default *.ciamlogin.com authority works without the extra entry because it's a built-in trusted Microsoft host; a
    
      custom domain host is not, so the ciamlogin issuer host must be listed explicitly.
    

    Was this answer helpful?


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.