Security Defaults & Per-user MFA Leftovers
The question it answers: Are security defaults on, and which members still have legacy per-user MFA enabled or enforced?
Microsoft recommends Conditional Access instead of the legacy per-user MFA setting. Users still ‘enabled’ or ‘enforced’ for per-user MFA get prompted on every sign-in regardless of your CA policies, and the two systems together are hard to reason about. Security defaults, if on, cannot coexist with Conditional Access policies.
At a glance
Section titled “At a glance”| Where in the app | Entra ID › Identity Hygiene › Security Defaults & Per-user MFA |
| Workload | Entra ID |
| Kind | Table · dashboard tile |
| Data | A scan: it runs only when someone presses Run scan (or calls the API’s scan action) and can take minutes. The last result is kept until the next scan. |
| Licence | No extra licence needed. |
| Report id (API and MCP) | entra.security.per-user-mfa-leftovers |
| An empty result means | No member has legacy per-user MFA enabled or enforced. |
Columns
Section titled “Columns”| Column | Key | Type |
|---|---|---|
| User | DisplayName | Link |
| UPN | UserPrincipalName | Text |
| Per-user MFA | PerUserMfaState | Status |
What it needs
Section titled “What it needs”Licence: No extra licence needed.
Application permissions on the IntensiveReports app registration (all permissions):
| Permission | API | What it allows | Note |
|---|---|---|---|
Policy.Read.All | Microsoft Graph | Read your organization’s policies | |
UserAuthenticationMethod.Read.All | Microsoft Graph | Read all users’ authentication methods | |
User.Read.All | Microsoft Graph | Read all users’ full profiles | |
User-LifeCycleInfo.Read.All | Microsoft Graph | Read all users’ lifecycle information |
Data sources it reads
GET /v1.0/policies/identitySecurityDefaultsEnforcementPolicyGET /beta/users/{id}/authentication/requirements (scan)
Through the API and MCP
Section titled “Through the API and MCP”GET /ir-api/v1/reports/entra.security.per-user-mfa-leftovers?size=100POST /ir-api/v1/reports/entra.security.per-user-mfa-leftovers/scanAn AI assistant reads it with the MCP tool get_report and the id entra.security.per-user-mfa-leftovers. The client needs the Run scan grant for Entra ID. See Using the API.