Newly Created Custom Claims Providers don't trigger

Marc Jordan 45 Reputation points
2026-05-25T10:56:02.65+00:00

I have two customAuthenticationExtensions of type onTokenIssuanceStartCustomExtensionHandler in the same tenant pointing at the same backend host. One works end‑to‑end; the other fails at sign‑in with AADSTS1100001 / underlying 1003011 and Entra never makes the HTTP callout to my endpoint. Both extensions return errors: [] from POST /beta/identity/customAuthenticationExtensions/{id}/validateAuthenticationConfiguration. After exhaustive comparison via Graph the two are byte‑identical except for the appId GUIDs that have to differ.

End‑user error

AADSTS1100001: Non-retryable error has occurred.

Underlying error code: 1003011.

Runtime evidence from /beta/auditLogs/signIns appliedEventListeners

For every failing sign‑in:

{

"eventType": "onTokenIssuanceStart",

"handlerResult": {

  "customExtensionId": "00000000-0000-0000-0000-000000000000",

  "calloutDateTime": "0001-01-01T00:00:00Z",

  "numberOfAttempts": 0,

  "httpStatus": null,

  "errorCode": 1003011,

  "outcome": "ExtensionNotFound"

}
  }

numberOfAttempts: 0 and customExtensionId: 00000000-… indicate Entra never resolved the extension and so never attempted the HTTP callout. My backend logs confirm zero inbound requests for these correlation IDs.

The working CCP, on the same backend host, shows the expected:

{ "customExtensionId": "<real-guid>", "numberOfAttempts": 1, "httpStatus": 200, "errorCode": 0 }

validateAuthenticationConfiguration (both extensions)

POST /beta/identity/customAuthenticationExtensions/{id}/validateAuthenticationConfiguration

Returns { "errors": [], "warnings": [] } for both the failing and the working extension. So the validator believes consent / token acquisition for the resource is in order.

What I've compared via Graph (everything is identical except as noted)

Pulled live and diffed: application (v1.0 + beta), servicePrincipal, appRoleAssignments, oauth2PermissionGrants, customAuthenticationExtension, authenticationEventListener, plus the claimsMappingPolicy on the resource SP and customClaimsPolicy / claimsPolicy on the frontend SP.

The only differences between failing and working sides:

Field Failing Working
application.identifierUris contains the failing appId GUID contains the working appId GUID
customAuthenticationExtension.authenticationConfiguration.resourceId references failing resource references working resource
application.createdDateTime 2026-05-25 (today) 2026-05-21
application.createdByAppId aced0c89-3b79-49ab-b2f1-27b67d3f0054 aced0c89-3b79-49ab-b2f1-27b67d3f0054 (same)

endpointConfiguration.targetUrl, authenticationConfiguration.resourceId URI shape, clientConfiguration, claimsForTokenConfiguration, the authenticationEventListener.conditions.applications, and the SP consent grants are identical.

Repro

  1. Sign in to the bound frontend app (0eb42bd8-…).
  2. Auth completes against Entra; token issuance starts.
  3. Sign‑in fails with AADSTS1100001 / 1003011. No request hits my backend.
  4. The matching sign‑in row's appliedEventListeners[0].handlerResult is the JSON shown above.

What I've already ruled out

  • Consent: both extensions return errors: [] from validateAuthenticationConfiguration; appRoleAssignments show CustomAuthenticationExtension.Receive.Payload granted on the resource SP.
    • Endpoint: same backend host as the working CCP; identical URL, Backend healthy, same TLS certificate, returns 200 in well under the timeout for the working flow.
    • Listener wiring: authenticationEventListener.handler.customAuthenticationExtension.id correctly references the failing extension; priority, conditions.applications.includeApplications include the failing frontend appId.
    • Cache propagation: the failure persists more than 24 hours after creation/edit.
    • Configuration drift: a strict structural diff between the failing and working extensions/SPs/applications shows zero non‑cosmetic differences (full output available).
    Question Given:
  • validateAuthenticationConfiguration passes,
    • the structural Graph diff is empty,
    • runtime telemetry shows customExtensionId: 00000000-…, numberOfAttempts: 0, 1003011 (i.e. Entra is failing to resolve the extension before any HTTP attempt),
    what server‑side state (replication, indexing, secondary cache, internal id mapping, etc.) determines whether Entra resolves a customAuthenticationExtension at token issuance time, and how can I refresh / rebuild it without deleting and recreating the extension and re‑onboarding consumers? Is there a known issue affecting CCPs created on or around 2026‑05‑25 in my tenant? I can provide raw Graph dumps and additional correlation IDs on request.
Microsoft Security | Microsoft Entra | Microsoft Entra ID

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.