# Configure Phishing-Resistant MFA Policy in Entra ID

<table class="MsoNormalTable" id="bkmrk-field-details-docume" title=""><tbody><tr><td>**Field**

</td><td>**Details**

</td></tr><tr><td>Document Type

</td><td>How-To Guide / Runbook

</td></tr><tr><td>Applies To

</td><td>Microsoft Entra ID, Microsoft 365, Azure portals, Cloud Apps integrated with Entra ID

</td></tr><tr><td>Audience

</td><td>Entra ID / Security Administrators (2nd Line / Systems Admin / Security Ops)

</td></tr><tr><td>Author

</td><td>AK. Udofeh

</td></tr><tr><td>Last Updated

</td><td>March 2026

</td></tr></tbody></table>

##### **Overview**

This document explains how to configure a **phishing-resistant MFA** Conditional Access policy using **Authentication Strengths** in Microsoft Entra ID. It covers report-only testing, scope control, and safe enforcement for privileged roles and high-value applications.

##### **Background**

- Standard Conditional Access policies using **“Require multi-factor authentication”** allow weaker methods (SMS, phone call, basic app OTP) which are still vulnerable to phishing and adversary-in-the-middle attacks.
- Organisations need to ensure that privileged accounts and sensitive applications can only be accessed with **phishing-resistant** methods such as FIDO2 security keys or other certified resistant mechanisms.
- Without Authentication Strength-based policies, admins cannot reliably enforce use of only strong, passwordless MFA for high-risk scenarios.

Basic steps that do **not** resolve this:

- Enabling MFA per user or via a simple Conditional Access “Require MFA” without specifying authentication strength.<span aria-label="Require phishing-resistant multifactor authentication for administrators" class="inline-flex" data-state="closed">​</span>
- Relying solely on security defaults for tenants with advanced security requirements.

Other affected services/systems:

- Admin portals (Entra admin centre, Azure portal, Exchange admin centre), Microsoft 365 apps, and any SSO-integrated SaaS app federated via Entra ID will be subject to this policy when in scope.

##### **Usecase**

- Older Conditional Access policies were designed before **Authentication Strengths** and only distinguished “MFA vs no MFA”, not **which** MFA methods are acceptable.<span aria-label="Require phishing-resistant multifactor authentication for administrators" class="inline-flex" data-state="closed">​</span>
- Attackers now commonly bypass weak MFA using real-time phishing and token replay, so stronger, phishing-resistant methods must be enforced where feasible.

##### **Desired End State**

1. Admins enable passwordless / phishing-resistant methods (Authenticator phone sign-in, FIDO2, etc.).
2. Admins create Conditional Access policies that require **Phishing-resistant MFA strength** or **Passwordless MFA strength** for sensitive scenarios.
3. Users in scope can satisfy the policy only with compliant strong methods; weaker methods are rejected.<span aria-label="Require phishing-resistant multifactor authentication for administrators" class="inline-flex" data-state="closed">​</span>

What currently breaks:

- Existing CA policies allow weak MFA methods, so users can still sign in with SMS or legacy app codes, leaving privileged access exposed to phishing.

Known triggers:

- High-risk user roles (Global Admin, Security Admin, Exchange Admin, etc.).
- Access to high-value applications, admin portals, or from risky locations/devices.

##### **Before You Start**

<div class="group relative my-[1em]" id="bkmrk-check-where-confirm-"><div class="w-full overflow-auto scrollbar-subtle rounded-lg border md:max-w-[90vw] border-subtlest ring-subtlest divide-subtlest bg-raised"><table class="[&_tr:last-child_td]:border-b-0 my-0 w-full table-auto border-separate border-spacing-0 text-sm font-sans rounded-lg [&_tr:last-child_td:first-child]:rounded-bl-lg [&_tr:last-child_td:last-child]:rounded-br-lg"><thead class=""><tr><th class="border-subtlest p-sm min-w-[48px] break-normal border-b text-left align-bottom border-r last:border-r-0 font-bold bg-subtle first:border-radius-tl-lg last:border-radius-tr-lg">**Check**</th><th class="border-subtlest p-sm min-w-[48px] break-normal border-b text-left align-bottom border-r last:border-r-0 font-bold bg-subtle first:border-radius-tl-lg last:border-radius-tr-lg">**Where**</th></tr></thead><tbody><tr><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Confirm passwordless / phishing-resistant methods are configured and piloted (Authenticator phone sign-in, FIDO2, etc.)</td><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">See the previous document and Entra &gt; Protection &gt; Authentication methods</td></tr><tr><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Ensure you have break-glass accounts excluded from Conditional Access</td><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Entra admin centre &gt; Users / Groups list<span aria-label="Plan a phishing-resistant passwordless authentication deployment ..." class="inline-flex" data-state="closed">​</span></td></tr><tr><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Verify you have **Conditional Access Administrator** or equivalent permissions</td><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Entra admin centre &gt; Roles and administrators<span aria-label="Get started with a phishing-resistant passwordless ..." class="inline-flex" data-state="closed">​</span></td></tr><tr><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Identify target scope (directory roles/groups/apps) and rollout phases</td><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Security design docs/identity architecture</td></tr><tr><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Confirm security defaults or conflicting policies won’t block testing</td><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Entra &gt; Protection &gt; Conditional Access &gt; Policies<span aria-label="Require phishing-resistant multifactor authentication for administrators" class="inline-flex" data-state="closed">​</span></td></tr></tbody></table>

</div></div>##### **Implementation Steps** 

##### **1. Create a Report-Only Phishing-Resistant Policy**

1. Sign in to [<span class="text-box-trim-both">**https://entra.microsoft.com**</span>](https://entra.microsoft.com/) as a Conditional Access or Security Administrator.
2. Go to **Entra ID &gt; Conditional Access &gt; Policies** and select **New policy**.
3. Name the policy clearly, for example: **`CA01 - Phishing-resistant MFA for Admins (Report-only)`.**
4. Under **Assignments &gt; Users**, select **Directory roles** and choose roles such as Global Administrator, Security Administrator, Exchange Administrator, and other privileged roles. ***(Ensure to exclude break glass and service accounts)***
5. Under **Cloud apps or actions**, select **All cloud apps** or a subset of high-value apps (Exchange Online, SharePoint Online, Entra admin centre, Azure portal).
6. Under **Conditions**, configure any additional conditions as needed (e.g. include all device platforms initially, or exclude trusted Workload identities).<span aria-label="How to Set Up Microsoft Entra Conditional Access Auth Strength for" class="inline-flex" data-state="closed">​</span>
7. Under **Access controls &gt; Grant**, choose **Require authentication strength** and select **Phishing-resistant MFA strength**.<span aria-label="Require phishing-resistant multifactor authentication for administrators" class="inline-flex" data-state="closed">​</span>
8. Set **Enable policy** to **Report-only**.

<p class="callout warning"> This allows sign-ins to proceed but logs whether they would satisfy the policy.<span aria-label="How to Enforce Phishing-Resistant MFA in Microsoft Entra ID (Step ..." class="inline-flex" data-state="closed">​</span></p>

 9. Click **Create** to save the policy.<span aria-label="How to Enforce Phishing-Resistant MFA in Microsoft Entra ID (Step ..." class="inline-flex" data-state="closed">​</span>

##### **2. Monitor Report-Only Results**

1. Allow at least some days of normal usage for covered users.
2. In the Entra admin centre, go to **Entra ID &gt; Conditional Access &gt; Insights and reporting** and review the policy’s impact.<span aria-label="Plan a phishing-resistant passwordless authentication deployment ..." class="inline-flex" data-state="closed">​</span>
3. Use filters such as **Policy not satisfied** to identify sign-ins that would be blocked if enforced (e.g. users still using SMS).<span aria-label="Plan a phishing-resistant passwordless authentication deployment ..." class="inline-flex" data-state="closed">​</span>
4. Export reports for further analysis and plan user remediation or enrolment in passwordless methods where required.<span aria-label="Plan a phishing-resistant passwordless authentication deployment ..." class="inline-flex" data-state="closed">​</span>

##### **3. Create / Adjust Production Enforcement Policy**

1. Duplicate the tested report-only policy or create a new production policy with the same conditions.
2. Under **Assignments &gt; Users**, keep scope limited initially (e.g. only core admin roles or a pilot group).

<p class="callout warning">Avoid tenant-wide enforcement until adoption is high.</p>

 3. Under **Assignments &gt; Users &gt; Exclude**, add:

- - Break-glass accounts.
    - Conditional Access / Global Admins used for emergency recovery (per your policy).

 4. Under **Access controls &gt; Grant**, ensure **Require authentication strength** is set to **Phishing-resistant MFA strength** (or a custom

 strength including FIDO2, etc.).

 5. Set **Enable policy** to **On**.

 6. Save the policy and notify in-scope admins to use their phishing-resistant methods going forward.<span aria-label="How to Enforce Phishing-Resistant MFA in Microsoft Entra ID (Step ..." class="inline-flex" data-state="closed">​</span>

##### **4. (Optional) Use Authentication Strength with Passwordless MFA**

- For broader user populations that may not yet be able to use fully phishing-resistant methods, create another Conditional Access policy:
    
    
    - **Grant &gt; Require authentication strength &gt; Passwordless MFA strength** for high-value apps, allowing strong but not necessarily certified phishing-resistant methods.<span aria-label="Require phishing-resistant multifactor authentication for administrators" class="inline-flex" data-state="closed">​</span>
- Apply similar report-only and enforcement phases to minimise disruption.

##### **Automated / Script Option (Graph PowerShell Example)**

<p class="callout warning">Example policy that creates a **report-only** Conditional Access policy requiring phishing-resistant MFA strength for key admin roles.</p>

```powershell
# Connect to Microsoft Graph with appropriate scopes
Connect-MgGraph -Scopes "Policy.Read.All","Policy.ReadWrite.ConditionalAccess"

# Built-in Phishing-resistant MFA authentication strength ID
$phishResistantStrengthId = "00000000-0000-0000-0000-000000000004"

# Define key admin roles (template IDs)
$adminRoles = @(
    "62e90394-69f5-4237-9190-012177145e10", # Global Administrator
    "194ae4cb-b126-40b2-bd5b-6091b380977d", # Security Administrator
    "29232cdf-9323-42fd-ade2-1d097af3e4de"  # Exchange Administrator
)

# Build the Conditional Access policy body
$policyParams = @{
    DisplayName = "Require phishing-resistant MFA for admins (Report-only)"
    State       = "enabledForReportingButNotEnforced" # Report-only mode
    Conditions  = @{
        Users = @{
            IncludeRoles = $adminRoles             # Target listed directory roles
        }
        Applications = @{
            IncludeApplications = @("All")         # All cloud apps
        }
    }
    GrantControls = @{
        Operator = "OR"
        AuthenticationStrength = @{
            Id = $phishResistantStrengthId        # Built-in Phishing-resistant MFA strength
        }
    }
}

# Create the Conditional Access policy
New-MgIdentityConditionalAccessPolicy -BodyParameter $policyParams

```

##### **Deployment notes:**

- Run as a privileged admin with permission to manage Conditional Access.
- Adjust `$adminRoles` and `IncludeApplications` to suit your environment.

**Expected output / success indicators:**

- `New-MgIdentityConditionalAccessPolicy` returns the created policy object with `state` set to `enabledForReportingButNotEnforced` and the correct authentication strength ID.<span aria-label="How to Set Up Microsoft Entra Conditional Access Auth Strength for" class="inline-flex" data-state="closed">​</span>

##### **Script Breakdown**

- `Connect-MgGraph` establishes a session with Microsoft Graph using scopes for Conditional Access policy management.<span aria-label="How to Set Up Microsoft Entra Conditional Access Auth Strength for" class="inline-flex" data-state="closed">​</span>
- `$phishResistantStrengthId` holds the known ID of the built-in **Phishing-resistant MFA strength**, which defines allowed methods such as FIDO2 keys.
- `$adminRoles` lists the directory role template IDs for privileged admin roles that will be included in the policy.<span aria-label="How to Set Up Microsoft Entra Conditional Access Auth Strength for" class="inline-flex" data-state="closed">​</span>
- `$policyParams` defines policy properties:
    
    
    - `DisplayName` gives a descriptive name.
    - `State` as `enabledForReportingButNotEnforced` places the policy in report-only mode.
    - `Conditions.Users.IncludeRoles` targets specific directory roles.
    - `Conditions.Applications.IncludeApplications = "All"` targets all cloud apps.
    - `GrantControls.AuthenticationStrength.Id` references the phishing-resistant MFA strength.
- `New-MgIdentityConditionalAccessPolicy` sends the policy definition to Graph and creates the policy in Entra ID.

##### **Troubleshooting**

**Users are blocked after policy enforcement**

- Use **Sign-in logs** to verify which policy blocked access and what authentication method was used.
- Check whether affected users have registered any phishing-resistant methods (FIDO2, etc.). If not, move them temporarily out of scope or provide registration guidance.

**Policy does not appear to have any effect**

- Confirm the policy is **Enabled** (not just in report-only) for enforcement scenarios.
- Verify the user and app in question are actually within **Assignments** and not excluded by another condition or exclusion.

**Graph script fails with insufficient privileges**

- Ensure the account running the script has Conditional Access Administrator or equivalent role and that Graph scopes include `Policy.ReadWrite.ConditionalAccess`.<span aria-label="How to Set Up Microsoft Entra Conditional Access Auth Strength for" class="inline-flex" data-state="closed">​</span>
- If using app-only auth, ensure the app registration has `Policy.ReadWrite.ConditionalAccess` application permissions and admin consent granted.

**Conflicts with existing policies**

- Review other Conditional Access policies in **What If** or simulation tools to check aggregate effect.<span aria-label="Require phishing-resistant multifactor authentication for administrators" class="inline-flex" data-state="closed">​</span>
- Consolidate overlapping policies or adjust priority/scope to avoid unexpected blocks.

##### **Expected Outcome**

<div class="group relative my-[1em]" id="bkmrk-item-detail-resoluti"><div class="w-full overflow-auto scrollbar-subtle rounded-lg border md:max-w-[90vw] border-subtlest ring-subtlest divide-subtlest bg-raised"><table class="[&_tr:last-child_td]:border-b-0 my-0 w-full table-auto border-separate border-spacing-0 text-sm font-sans rounded-lg [&_tr:last-child_td:first-child]:rounded-bl-lg [&_tr:last-child_td:last-child]:rounded-br-lg"><thead class=""><tr><th class="border-subtlest p-sm min-w-[48px] break-normal border-b text-left align-bottom border-r last:border-r-0 font-bold bg-subtle first:border-radius-tl-lg last:border-radius-tr-lg">**Item**</th><th class="border-subtlest p-sm min-w-[48px] break-normal border-b text-left align-bottom border-r last:border-r-0 font-bold bg-subtle first:border-radius-tl-lg last:border-radius-tr-lg">**Detail**</th></tr></thead><tbody><tr><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Resolution time</td><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">30–60 minutes to create report-only and enforcement policies plus a 7–10 day observation window</td></tr><tr><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">User impact</td><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Privileged users and scoped users must use phishing-resistant or passwordless MFA methods to access targeted apps; legacy MFA may no longer be accepted</td></tr><tr><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Recurrence risk</td><td class="border-subtlest px-sm min-w-[48px] break-normal border-b border-r last:border-r-0">Low once adopted; policies should be reviewed periodically as roles, apps, and methods evolve</td></tr></tbody></table>

</div></div>