Managing external identities to enable secure access for partners, customers, and other non-employees
In Azure AD B2C custom policies, MFA context (AMR/ACR) is not automatically normalized or propagated across multiple IdPs in a way that downstream apps like Salesforce can reliably consume. The recommended pattern is to explicitly control and emit the MFA indicator in the B2C-issued token, independent of how each upstream IdP represents MFA.
Key points based on the provided material:
- B2C MFA is its own step and protocol handler
When MFA is performed by Azure AD B2C itself (SMS/TOTP), it is implemented via a dedicated technical profile using the proprietary Azure MFA protocol handler:
This means that when B2C performs MFA, the fact that MFA occurred is known inside the user journey and can be surfaced as claims in later steps and in the final token.<TechnicalProfile Id="AzureMfa-SendSms"> <DisplayName>Send Sms</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureMfaProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> ... </TechnicalProfile> - External MFA providers and AMR/ACR expectations
For external providers (including external MFA providers or federated IdPs), Microsoft Entra ID expects:- The provider posts back an
id_tokento theredirect_uri. - The
id_tokencontains standard claims includingacrandamr:
Microsoft Entra ID validates these claims against the OIDC metadata and the requestedClaim Description acrAuthentication context class reference – must match one of the requested values and only one acrclaim should be returned.amrAuthentication methods reference – array with the method used. acrvalues. This is the pattern for integrating an external MFA provider and having Entra/B2C understand which authentication method was used. Reference: "Use Microsoft Entra MFA with an external MFA provider" shows the requiredid_tokenandacr/amrbehavior. - The provider posts back an
- Multiple IdPs: do not rely on automatic AMR/ACR preservation
With multiple federated IdPs, each IdP may:- Use different
acrvalues. - Use different
amrsemantics or omit them.
- Treat the upstream IdP’s
acr/amras input claims in the relevant technical profile. - Use claims transformations and/or orchestration logic to map those into a single, B2C-controlled claim (for example,
mfa_done = trueor a normalizedacrvalue) that is then emitted in the relying party (RP) policy.
amr/acrformat. - Use different
- Recommended pattern for B2C → Salesforce MFA signaling For a reliable MFA indicator and to avoid extra prompts in Salesforce:
- Perform or validate MFA in B2C
- Either use B2C’s own MFA technical profiles (SMS/TOTP) as part of the user journey, or
- Integrate an external MFA provider that returns
acr/amrin itsid_tokenas described in the Entra external MFA documentation.
- Normalize MFA into a dedicated claim
- In the custom policy’s orchestration steps, after the MFA step (B2C or external), use a claims transformation to set a normalized claim, for example:
-
authentication_methods_reference(string/array) with a value likemfa, or -
mfa_completed=true, or - a normalized
acrvalue such asurn:microsoft:entra:mfa.
-
- In the custom policy’s orchestration steps, after the MFA step (B2C or external), use a claims transformation to set a normalized claim, for example:
- Emit the normalized claim in the RP policy
- In the relying party file (for the Salesforce SAML/OIDC integration), include this normalized claim in
OutputClaimsso it appears in the token sent to Salesforce. - Configure Salesforce to treat that claim as the MFA indicator and to suppress additional MFA prompts when it is present and has the expected value.
- In the relying party file (for the Salesforce SAML/OIDC integration), include this normalized claim in
- Do not depend on raw upstream AMR/ACR
- Because different IdPs may send different
amr/acrvalues, always map them to the B2C-controlled claim before sending to Salesforce.
- Because different IdPs may send different
- Perform or validate MFA in B2C
- Is AMR preserved automatically or must it be explicitly set?
- For external MFA providers integrated via OIDC, Entra/B2C validates
acr/amrfrom the provider’sid_token, but does not guarantee that these raw values will be emitted unchanged to downstream apps. - For B2C-native MFA (AzureMfaProtocolProvider), MFA is known to the policy engine but again must be explicitly surfaced as an output claim.
- Therefore, for a multi-IdP scenario and for Salesforce integration, the MFA context must be explicitly set and emitted via claims transformations and
OutputClaims. Do not rely on automatic AMR/ACR preservation.
- For external MFA providers integrated via OIDC, Entra/B2C validates
Summary:
- Use B2C’s MFA technical profiles or an external MFA provider that returns
acr/amrin itsid_token. - Normalize MFA into a single B2C-controlled claim via claims transformations.
- Emit that claim in the RP policy so Salesforce receives a consistent MFA indicator and can skip additional MFA.
- AMR/ACR from upstream IdPs are not a reliable, automatically preserved signal; they should be explicitly mapped and output.
References:
- Use Microsoft Entra MFA with an external MFA provider
- Define a Microsoft Entra ID multifactor authentication technical profile in an Azure AD B2C custom policy
- Technical and feature overview of Azure Active Directory B2C
- Azure AD B2C custom policy overview
- Enable multifactor authentication in Azure Active Directory B2C (b2c-custom-policy)