Hi All,
We have been testing phishing-resistant MFA (passkeys) rollout across our tenant and have hit blockers on two different approaches. Wondering if anyone in the community has seen either of these and has workarounds or insight.
Background
Goal: enforce phishing-resistant MFA (passkeys) across the tenant via Conditional Access.
Attempt 1: Single CA policy
Started with one CA policy requiring passkey/phishing-resistant MFA for specific targeted accounts, report-only at first, then enabled for enforcement.
Testing hit the classic catch-22, the account had no passkey yet, so it couldn't satisfy the policy needed to register one:
- First attempt: "We ran into an error. Sorry, we couldn't add your account right now. Please try again."

- Retried, got the setup prompt, completed passkey creation successfully. Then got "Passkey not registered. This might be due to a timeout, a cancelled request, or a private browsing window."

- Next sign-in attempt: "Additional authentication is required to complete this sign-in," followed by "An unexpected error has occurred."

- Even though the device had saved the passkey locally, login kept failing and wouldn't let the passkey be used.
Attempt 2: Per-Torben Sørensen's 3-policy method
Implemented the approach documented by Per-Torben Sørensen (Microsoft MVP), using three CA policies working together:
- An enforcement policy requiring phishing-resistant MFA for the pilot group across all apps, excluding 6 first-party system apps (AADReporting, Azure Credential Configuration Endpoint Service, Microsoft App Access Panel, My Profile, My Signins, Windows Azure Active Directory), since these are part of the registration/sign-in plumbing itself.
- A registration bootstrap policy targeting the "Register security information" user action specifically, requiring a custom auth strength ("Passkey Registration Bootstrap": one-time-use TAP + Passkey/FIDO2 + Windows Hello for Business), letting a user with zero registered methods get into the registration flow using a TAP.
- A gap-fill policy targeting the same 6 excluded apps, requiring the same bootstrap auth strength for them so they are not left unprotected.
This solved the original catch-22 cleanly. But we hit a timeout issue during registration. Checking Entra sign-in logs: CA shows success and sign-in shows successful, meaning TAP satisfied the registration bootstrap policies, but something downstream failed with invalid_grant.

Following up on the sign-in failure logs to identify and exclude the blocking resource, we found the blocking resources were Microsoft Graph's audeince "Service principal not found" (Application Id 62060984-07ca-4b01-802e-d9c0e90718d8). We are not sure what this app actually is, since there is no corresponding service principal in our tenant to resolve a name. Also another one listed as and Microsoft Password Reset Service but Entra returns UnsupportedFirstPartyApplication when trying to add either to a CA exclusion list.

Attempt 3: Registration Campaign instead of CA
Given the CA blockers, we pivoted to using the built-in Registration Campaign to nudge users toward passkey setup instead, relying on Entra's system-preferred authentication method to prefer passkey once registered, without needing CA enforcement at all.
Setup:
- Authentication method: Passkey (FIDO2)
- Days allowed to snooze: 0
- Limited number of snoozes: Enabled
- Include scoped to a dedicated test group
- Passkey (FIDO2) enabled tenant-wide, Allow self-service setup enabled
But users aren't being nudged for passkey at all. Both brand-new and existing test accounts are prompted to set up Microsoft Authenticator push instead, regardless of the campaign's targeted method being explicitly set to Passkey (FIDO2). This happens identically for new and existing accounts, and isn't a timing issue (ran for 2+ hours with no change).
We suspect this may be related to our Default passkey profile having Enforce attestation = Yes and Passkey types = Device-bound, but as per Microsoft documentation, this restriction shouldn't apply except for 21Vianet tenants, so we are not confident that's actually the cause here.
Where we are at
Stuck on both paths simultaneously. CA enforcement blocked by invalid_grant and unexcludable/unidentified apps, and the Registration Campaign fallback not nudging users for passkey at all. Has anyone else run into either of these? Any workarounds, diagnostic steps, or insight would be genuinely appreciated.