PS HarriJaakkonen :~/Blog/Posts> cat ./microsoft-entra-external-id-ga-features-part-1.html

Microsoft Entra External ID: What Made It to GA (November 2025 – February 2026) — Part 1

Microsoft Entra External ID GA Features November 2025 to February 2026

What changed and what's worth knowing

Microsoft Entra External ID has had a busy six months. Between November 2025 and February 2026, Microsoft shipped several features that moved from preview to general availability — some of them genuinely useful, a few that fill gaps that should have been there from the start. This two-part post covers what hit GA in Part 1, and what's still sitting in public preview in Part 2.

I want to be practical about this: not every GA announcement changes how you should build things today. Some of these features are table stakes. Others open up scenarios that weren't possible before — particularly around machine-to-machine auth and regional data residency. I'll flag which is which.

What is Entra External ID? It's Microsoft's CIAM (Customer Identity and Access Management) platform for external tenants. You use it when you need to give customers, partners, or external users their own branded sign-in experience — separate from your corporate Microsoft 365 identity. Think: customer portal, consumer app, partner extranet.

Workforce tenants vs external tenants

Before getting into features, it's worth being clear about what an "external tenant" actually is, because Microsoft uses "tenant" for everything and it gets confusing fast.

Your Microsoft 365 subscription uses a workforce tenant — that's where employees sign in, where Exchange Online lives, where your Conditional Access policies protect corporate apps. You don't want customers in there.

An external tenant is a separate Microsoft Entra ID directory created specifically for your customer-facing applications. It has its own branding, its own user base, its own policies. The two are isolated from each other by default.

Workforce tenant vs external tenant — two separate directories Workforce tenant Employees & IT staff Microsoft 365, Exchange, Teams Corporate Conditional Access policies Managed devices (Intune, Autopilot) Customers do NOT sign in here Keep corporate and customer identities in separate directories isolated External tenant (Entra External ID) Customers, consumers, partners Custom branded sign-in experience External-facing Conditional Access Social logins + local accounts Billed by Monthly Active Users (MAU) 50,000 free MAU included per month then pay-per-active-user
Workforce and external tenants are separate Microsoft Entra directories. Customers never sign into your corporate tenant.

The MAU billing model is worth understanding early on. You get 50,000 free MAUs per month on External ID. After that, it's billed per active user per month — a user counts if they authenticate at least once in that calendar month. This is fundamentally different from workforce licensing, which is per-licensed seat regardless of activity.

November 2025: regional data residency goes GA

The first significant GA of this period was regional expansion. Microsoft brought the External ID Go-Local add-on to Australia and Japan. This matters for organisations with data residency requirements under local regulations — Australia's Privacy Act, Japan's APPI, or industry-specific compliance frameworks that require customer data to stay within national borders.

Before this, External ID data resided in US or EU regions only. If you were building a customer portal for an Australian bank or a Japanese e-commerce platform, you either accepted US/EU residency or looked at alternatives. Neither option was ideal.

The Go-Local add-on keeps your external tenant's data — user profiles, authentication logs, session data — in the selected geography. With Australia and Japan now available, the supported regions are: United States, European Union, Australia, and Japan.

GA — November 2025: External ID Go-Local add-on now available in Australia and Japan. Covers user data, authentication events, and audit logs. Paid add-on on top of base External ID pricing. Configure the data residency location during external tenant creation — it can't be changed after the fact.

One thing to know about Go-Local: The data residency commitment applies to user data at rest. Network traffic for authentication still routes through Microsoft's global infrastructure. If your compliance requirement is specifically about data storage location rather than network routing, Go-Local covers it. If you need full in-country network path, that's a different conversation involving private connectivity options.

January 2026: three features hit GA together

Session controls via Conditional Access

Session controls in Conditional Access manage what happens after a user authenticates — not just whether they get in, but how long their session lasts and whether the browser remembers them. This was already available in workforce tenants; it's now GA for external tenants too.

Two controls matter here:

  • Sign-in frequency forces re-authentication after a set number of hours or days, regardless of whether the session token is still valid. Useful for sensitive apps — banking portals, healthcare, anything where indefinite sessions are a risk.
  • Persistent browser session controls whether the "Stay signed in?" prompt appears and whether sessions survive browser restarts. For a consumer shopping app, persistence is fine. For a healthcare portal handling patient records, probably not.

You configure these through Conditional Access policies in the external tenant, scoped to specific apps or applied broadly. The policy settings are under Session controls in the CA policy editor — same location as workforce tenants.

GA — January 2026: Session Control Conditional Access policies in external tenants. Configure via Entra admin center → Protection → Conditional Access. Supports sign-in frequency and persistent browser session. Scope to specific app registrations or apply tenant-wide.

Client credentials flow (machine-to-machine)

This one's a genuine capability addition, not just parity with workforce tenants. The OAuth 2.0 client credentials grant is now GA in external tenants, which means your backend services, daemons, and APIs can authenticate to External ID using application credentials — without any user involved.

If you're building a multi-tenant SaaS product, you likely have backend systems that need to act on customer data without a human in the loop:

  • A billing service reading customer subscription state
  • A notification pipeline sending emails on behalf of customers
  • An analytics exporter that aggregates usage per customer account
  • A data sync job that runs overnight without user interaction

Before this was GA, External ID couldn't serve as the identity layer for these machine-to-machine scenarios. You'd bolt on a separate system for service-to-service auth — an unnecessary complication. Now the whole identity surface, user-facing and machine-facing, can run through External ID.

Licensing note: The client credentials flow in External ID requires the M2M Premium add-on. It's not in the base External ID pricing. The add-on is priced per application token rather than per user, so the cost model differs from MAU-based user authentication. If you have only a handful of backend services, the cost stays manageable. Worth running the numbers before committing.

OAuth 2.0 client credentials flow — M2M in external tenant Backend service daemon / scheduled job no user involved Entra External ID Validates app registration Issues JWT access token No user interaction Protected API your resource / service validates token claims 1. POST /token client_id + secret/cert 2. access_token (JWT) 3. Authorization: Bearer … 4. 200 OK (data) Requirements for client credentials in external tenant App registration in the external tenant with a client secret or certificate credential M2M Premium add-on enabled — not included in base External ID pricing (billed per app token) Token audience must match a registered API scope exposed via the app manifest Use app roles (not delegated permissions) — there is no user context in this flow Token lifetime: 1 hour by default — cache tokens until near expiry, don't fetch on every call
Client credentials flow: the backend service authenticates with app credentials, gets a token, then calls protected APIs directly — no user session involved.

Per-app branding themes

Before this, External ID branding was tenant-wide — one logo, one colour scheme, one background for every app in the tenant. That's workable for simple deployments, but it falls apart if you're running a white-label product or multiple distinct brands from a single external tenant.

The branding themes feature lets you create per-application branding configurations. Each app registration can be assigned its own theme with:

  • Logo and background image
  • Colour scheme (background, foreground, button accent colours)
  • Custom CSS overrides for finer control

There's a live preview in the Entra admin center. The old workflow was "configure, deploy, load the sign-in page, squint at it, repeat" — the preview removes that loop for most changes. You configure themes under External Identities → User experiences → Branding themes, then assign each theme to one or more app registrations.

GA — January 2026: Per-app branding themes in external tenants. Multiple themes supported per tenant. Live preview in Entra admin center. Supports logo, background, colours, and custom CSS. Assign a theme to an app registration via the Entra admin center or Graph API (branding resource under the application object).

February 2026: usability and auth flow improvements

Custom banned password lists

Microsoft already maintains a global banned password list covering common passwords, keyboard patterns, and known breached credentials. These are automatically blocked when users set passwords in Entra. The custom list extends that with strings specific to your organisation.

Your customers pick poor passwords. If your product is called "Contoso", a meaningful share of your customer base will try "Contoso1" or "ContosoPass123" or "contoso2024". Those aren't in Microsoft's global list — they're specific to you. Now you can block them.

You configure the custom list under Authentication methods → Password protection in the external tenant. You add strings rather than full passwords — the system derives variations automatically (case changes, common character substitutions like @ for a, 3 for e). Up to 1,000 custom entries. The change takes effect for new password creation and resets; it doesn't retroactively invalidate existing passwords.

GA — February 2026: Custom banned password lists in external tenants. Configure in Entra admin center → Authentication methods → Password protection. Variations of each banned string are automatically blocked. Applies to new password creation and password reset flows. Does not expire currently valid passwords.

Sign-in with username or alias

Standard External ID local accounts are email-based. Users sign in with the email address they registered with. That's fine for general consumer apps, but a lot of industry-specific CIAM scenarios need a different primary identifier:

  • A bank where customers sign in with their account number
  • An airline with a frequent flyer number as the customer identifier
  • A health portal where the patient ID is the login credential
  • An insurance portal where policy numbers identify customers
  • A retail loyalty program using membership numbers

The alias sign-in feature (GA February 2026) lets users with local accounts sign in using a secondary identifier instead of their email address. The alias is assigned to the user via the Microsoft Graph API — you update the identities collection on the user object and add a signInType of userName with an issuerAssignedId set to the alias value. Each user can have one alias, and it must be unique within the tenant.

A few constraints worth knowing: this only works for local accounts (email + password). Social identity providers and federated accounts can't use aliases — those are controlled by the external IdP, not External ID. And the alias is currently read-only from the user's perspective; they can't set it themselves through the self-service profile flow.

GA — February 2026: Username/alias sign-in for local accounts. Assign via Graph API (PATCH on the user's identities collection, signInType: "userName") or Entra admin center. Users sign in with either their email or alias — both work. Aliases are unique per tenant. Local accounts only — doesn't apply to social or federated identity providers.
Username / alias sign-in — how identities are stored User object — identities[ ] collection signInType: "emailAddress" issuerAssignedId: "anna@contoso.com" signInType: "userName" issuerAssignedId: "FF-8834421" ← alias Alias set via Graph API PATCH — not self-service Both sign-in methods work With email anna@contoso.com With alias FF-8834421 Same user account
A user can sign in with their email address or their assigned alias. Both identities resolve to the same account. The alias is set via Graph API, not self-service.

Device authorization grant flow

The OAuth 2.0 device authorization grant (RFC 8628) handles authentication for devices that don't have a usable browser or keyboard — smart TVs, IoT sensors, printers, CLI tools. The device displays a short code and a URL; the user goes to that URL on their phone or laptop, enters the code, authenticates normally, and the original device gets the access token. Credentials never touch the constrained device.

This flow has been available in workforce tenants for years (it's what az login uses when you're on a headless server). Making it GA in external tenants opens it up for customer-facing scenarios:

  • A smart TV streaming app where customers sign in to their subscription account
  • An industrial IoT console that authenticates against your customer identity system
  • A CLI tool you distribute to customers that needs to act on their behalf
  • A kiosk or shared device where typing credentials is impractical

The MFA requirement still applies — if your Conditional Access requires a second factor, the user completes it on the verification device (their phone), not on the constrained device. That's actually the right behaviour: the smart TV never needs to know your authenticator app exists.

GA — February 2026: Device authorization grant flow in external tenants. Standard RFC 8628 implementation. App registration needs the public client / native client redirect URI. Works with MFA — second factor completed on verification device. Token polling interval: 5 seconds. Default device code expiry: 15 minutes.

All six GA features at a glance

A quick reference covering all the GA features from this period — release date, who needs them, and whether they cost extra:

Feature GA Date Who needs it Extra cost?
Go-Local: Australia & Japan Nov 2025 Orgs with APPI / Australian Privacy Act data residency requirements Yes — Go-Local add-on
Session controls via Conditional Access Jan 2026 Apps needing timed re-authentication (banking, healthcare) No
Client credentials (M2M) Jan 2026 SaaS products with backend services needing app-only auth Yes — M2M Premium add-on
Per-app branding themes Jan 2026 Multi-brand or white-label products in a single external tenant No
Custom banned password lists Feb 2026 Any External ID deployment with local password accounts No
Username / alias sign-in Feb 2026 Banks, airlines, healthcare — non-email primary identifiers No
Device authorization grant Feb 2026 Smart TV apps, IoT, CLI tools authenticating on behalf of customers No (standard MAU billing)

Official Microsoft docs

Topic Microsoft Learn link
External ID overview learn.microsoft.com → External Identities overview
Username/alias sign-in learn.microsoft.com → Sign in with alias
Device authorization grant learn.microsoft.com → Device code flow
Custom banned passwords learn.microsoft.com → Password protection
What's new in Entra External ID learn.microsoft.com → What's new

What's still in preview

Not everything shipped GA in this period. The most interesting work-in-progress feature is just-in-time password migration — a way to migrate customers from an existing identity system to External ID without a bulk migration event. There's also WAF integration with Akamai and Cloudflare, and MFA Conditional Access authentication context for external tenants. Part 2 covers all of that in detail.