Environment / context
- Microsoft Entra External ID (External ID) as the CIAM provider for our tenant
- Okta configured as an OpenID Connect (OIDC) external identity provider in the External ID tenant
- Created an External ID user flow and added Okta as a custom OIDC IdP
- Next.js app using NextAuth v4 as the client
What I configured
Okta side:
- Created an OIDC Web Application in Okta Admin Console
- Grant type: Authorization Code
- Added the following redirect/callback URLs to the Okta app:
https://<mytenant>.ciamlogin.com/<tenantId>/federation/oauth2
https://<mytenant>.ciamlogin.com/<mytenant>.onmicrosoft.com/federation/oauth2
https://<mytenant>.ciamlogin.com/<tenantId>/oauth2/v2.0/authresp
https://<mytenant>.ciamlogin.com/<mytenant>.onmicrosoft.com/oauth2/authresp
Entra External ID side:
- External Identities → All identity providers → New OpenID Connect provider
- Filled in:
- Metadata URL:
https://<okta-domain>.okta.com/oauth2/default/.well-known/openid-configuration
- Client ID: Okta app client ID
- Client Secret: Okta app client secret
- Scope:
openid profile email
- Response type:
code
- Response mode:
form_post
- User flow type: Sign up and sign in
- Added the Okta OIDC provider to the user flow under Identity providers
Expected result
Okta should appear as a sign-in option on the External ID hosted login screen, the same way Google and Entra ID do when configured as OIDC providers.
Actual result
The Okta OIDC provider does not appear on the login screen presented by the External ID user flow, despite being configured under All identity providers and added to the user flow.
Notably, the following combinations are working in the same tenant and user flow:
- ✅ Google as OIDC external IdP — appears and works correctly
- ✅ Microsoft Entra ID as OIDC external IdP — appears and works correctly
- ✅ Okta as SAML-based external IdP — appears and works correctly
- ❌ Okta as OIDC-based external IdP — does not appear on login screen
This tells me the issue is not with the user flow itself, not with OIDC federation in general, and not with Okta as an IdP in general — it is specific to Okta running over the OIDC path inside External ID.
What I've already tried
- Verified Okta app has Authorization Code grant type and a valid client secret
- Added all four redirect URL variants (both tenant ID GUID and
onmicrosoft.com domain formats) to the Okta app registration
- Re-checked metadata URL, client ID, and client secret in the External ID OIDC provider config
- Confirmed the user flow type is Sign up and sign in (not a legacy B2C flow)
- Verified
response_modes_supported in Okta's discovery document includes form_post ✅
- Verified Okta's discovery document returns
email in claims_supported ✅
- Tried both Okta custom auth server (
/oauth2/default) and org-level issuer — neither makes the provider appear
- Compared Okta's OIDC discovery document against Google's and Entra's — no obvious disqualifying differences found
- Reviewed Microsoft docs on custom OIDC IdPs in External ID — configuration matches documented steps
- Confirmed the Okta SAML IdP works in the same user flow — so the problem is isolated to Okta + OIDC specifically
Questions
- Why does the Okta OIDC provider not appear on the External ID login screen despite being configured correctly and added to the user flow?
- Is there a known incompatibility between Microsoft Entra External ID's custom OIDC federation and Okta specifically — given that Google and Entra work as OIDC IdPs and Okta itself works as a SAML IdP in the same flow?
- Is there something in Okta's OIDC discovery document or token response format that External ID silently rejects, causing the provider to be hidden rather than throwing an explicit error?
- Are the redirect/callback URLs above the correct format for Okta → External ID OIDC federation?