When calling the Azure IPAM Engine API using a service principal (client-credentials flow), the request fails with 403 Forbidden even though the service principal has been granted the correct App Role under “Expose an API”.
The access token contains a roles claim, but the API rejects it because IPAM appears to validate only delegated-permission (scp) tokens.
Expected Behavior
IPAM Engine API should accept tokens obtained via application permissions (client-credential flow), using the roles claim.
This would allow automation tools, DevOps pipelines, and backend services to call IPAM without interactive login.
Actual Behavior
Service principal token contains:
"aud": "<ENGINE_APP_ID>",
"roles": ["ipam-access-via-pipeline"]
API call returns: 403 Forbidden
Debug logs show token is parsed, but authorization fails because no scp claim is present.
If I request a token as a user (delegated grant), token contains scp, and the API works correctly.
This strongly suggests the engine checks only for scp and does not process roles.