Date: 22nd May 2026
- Overview
- What is Workload Identity Federation?
- Why JWT Bearer Assertion for Provisioning?
- WIF Configuration Flow (3-Step Admin Setup)
- How the JWT Bearer Assertion Flow Works
- What Information ISVs Receive from Entra ID
- What ISVs Must Do to Support This
- SAP SuccessFactors Example
- JWT Bearer Assertion Request & Response Format
- Key Benefits
- Comparison: Legacy vs. Workload Identity Federation
- Security Considerations
- FAQ
- References
Workload Identity Federation (WIF) is a new authentication method that enables the Microsoft Entra Provisioning Service (SyncFabric) to authenticate to ISV SCIM endpoints without storing long-lived secrets (client secrets, passwords, or bearer tokens). Instead, it uses the OAuth 2.0 JWT Bearer Assertion profile (based on RFC 7523) to dynamically obtain short-lived access tokens by presenting a signed JWT assertion to the ISV's token endpoint.
This approach was first implemented for SAP SuccessFactors provisioning and is being extended to other ISV integrations in the Entra provisioning gallery.
Workload Identity Federation establishes a trust relationship between Microsoft Entra ID (as the identity provider) and an external application's token endpoint (the ISV/SaaS app). Instead of exchanging static credentials like a username/password or a long-lived OAuth bearer token, the flow works as follows:
- Microsoft Entra ID acts as a trusted token issuer
- The ISV's SCIM endpoint trusts tokens issued by Entra ID
- No secrets are stored in the provisioning configuration — the trust is based on cryptographic verification of signed JWT tokens
This is a fundamental shift from the traditional model where admins had to:
- Generate an API token in the ISV's admin console
- Paste that token into the Entra provisioning configuration
- Manually rotate the token before it expires
| Problem with Legacy Approach | How JWT Bearer Assertion Solves It |
|---|---|
| Static bearer tokens expire and cause provisioning outages | Short-lived tokens are obtained dynamically per provisioning cycle |
| Secrets stored in provisioning config can be leaked | No secrets stored — trust is based on federated identity |
| Manual token rotation burden on IT admins | Fully automated, zero-touch token lifecycle |
| Difficult to audit and track credential usage | JWT assertion events are logged in both Entra and ISV audit logs |
| No standard protocol — each ISV has custom token generation | Follows OAuth 2.0 JWT Bearer Assertion (RFC 7523) standard |
The administrator must perform 3 steps to set up the integration for their app. The administrator must have at least the Application Administrator role on the customer's tenant.
In the Entra App Gallery, the administrator:
- Creates an app for provisioning for that ISV and configures the Connectivity
- On the Connectivity Page, picks "Workload Identity Federation" as the auth method
- Clicks "Select Workload Identity" — customers can register a new Workload Identity App or reuse an existing one they have already used to set up with the ISV
After the access app is configured, the UX displays the following values to be copied to the ISV Portal:
| Value | Format |
|---|---|
| Issuer (iss) | https://sts.windows.net/<TenantID>/ |
| JWKS URL | Entra's published JWKS endpoint |
| Subject (sub) | {WorkloadIdentity_object_id} |
| Audience (aud) | api://{WorkloadIdentity_appid}/.default |
In the ISV portal, the administrator sets up a client for the ISV's SCIM endpoint. As part of setting up the auth integration, the administrator copies the values from Step 1 (issuer, JWKS URL, subject, audience) into the ISV portal.
The ISV portal will then display the following values, needed for Step 3:
| Value | Description |
|---|---|
| Client ID | An ID that identifies this specific integration for this customer on the ISV side |
| Token URL | The endpoint where the provisioning service can present the Entra-issued token to get an access token for the SCIM endpoint |
| SCIM URL | The endpoint to be used for users/groups provisioning |
Back in the Entra App Gallery:
- Copy Client ID, Token URL, and SCIM URL from the ISV portal to the Connectivity Page
- Click "Test Connection" — this invokes the backend to perform all the token exchange steps and validate the integration
- Save the configuration — the app is now ready to configure provisioning
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────┐
│ │ │ │ │ │
│ Microsoft │ 1. │ ISV Token Endpoint │ │ ISV SCIM │
│ Entra ID │────────>│ (OAuth 2.0) │ │ Endpoint │
│ Provisioning │ │ │ │ │
│ Service │<────────│ │ │ │
│ │ 2. │ │ │ │
│ │ └──────────────────────┘ │ │
│ │ │ │
│ │ 3. SCIM requests with access_token │ │
│ │─────────────────────────────────────────>│ │
│ │ │ │
│ │<─────────────────────────────────────────│ │
│ │ 4. SCIM response │ │
└─────────────────┘ └─────────────────┘
-
Entra ID Provisioning Service sends a JWT Bearer assertion request to the ISV's OAuth 2.0 token endpoint:
- Includes a
client_assertion— a signed JWT issued by Microsoft Entra ID - Uses grant type:
client_credentialswithclient_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer - The JWT assertion serves as proof of client identity — no client secret is needed
- Includes a
-
ISV's Token Endpoint validates the JWT assertion:
- Verifies the JWT signature using Microsoft's public OIDC keys
- Validates the
issuer,audience, andsubjectclaims - Issues an access token back to the Entra provisioning service
-
Entra Provisioning Service uses the issued access token as a Bearer token in SCIM API calls (GET, POST, PATCH, DELETE) to the ISV's SCIM endpoint
-
ISV's SCIM Endpoint processes the provisioning requests (create users, update attributes, disable accounts, etc.)
When Entra ID sends the JWT bearer assertion request, the JWT assertion (client_assertion) contains the following key claims:
| Claim | Description | Example Value |
|---|---|---|
aud (Audience) |
Workload Identity App ID | api://b5ba7a93-4452-4522-aeb4-a2b5da870c16 |
iss (Issuer) |
Customer Tenant eSTS endpoint | https://sts.windows.net/ce5f061f-abe6-4e40-9615-301f87bcb7f0/ |
sub (Subject) |
Workload Identity Object ID | d2f8ee76-c549-45b8-a143-f5b640669704 |
oid (Object ID) |
Workload Identity Object ID | d2f8ee76-c549-45b8-a143-f5b640669704 |
appid |
Workload Identity App ID | b5ba7a93-4452-4522-aeb4-a2b5da870c16 |
tid (Tenant ID) |
Customer Tenant ID | ce5f061f-abe6-4e40-9615-301f87bcb7f0 |
iat (Issued At) |
Token issue timestamp | 1772175916 |
nbf (Not Before) |
Token not valid before | 1772175916 |
exp (Expiration) |
Token expiry timestamp | 1772179816 |
ver |
Token version | 1.0 |
{
"aud": "api://b5ba7a93-4452-4522-aeb4-a2b5da870c16",
"iss": "https://sts.windows.net/ce5f061f-abe6-4e40-9615-301f87bcb7f0/",
"iat": 1772175916,
"nbf": 1772175916,
"exp": 1772179816,
"appid": "b5ba7a93-4452-4522-aeb4-a2b5da870c16",
"appidacr": "2",
"idp": "https://sts.windows.net/ce5f061f-abe6-4e40-9615-301f87bcb7f0/",
"oid": "d2f8ee76-c549-45b8-a143-f5b640669704",
"sub": "d2f8ee76-c549-45b8-a143-f5b640669704",
"tid": "ce5f061f-abe6-4e40-9615-301f87bcb7f0",
"ver": "1.0"
}Note
The iss and sub claims in the Entra-issued token identify the customer's tenant and the Workload Identity app object, respectively. The ISV validates these against the values provided during the 3-step configuration.
- OIDC Discovery Endpoint: ISVs can fetch Microsoft's signing keys from:
https://login.microsoftonline.com/{tenantId}/.well-known/openid-configuration - JWKS URI: Public keys for signature verification:
https://login.microsoftonline.com/{tenantId}/discovery/keys - Tenant ID: Identifies which customer tenant is provisioning users
ISVs need to implement three key capabilities to support Workload Identity Federation:
ISVs must validate the Entra-issued JWT assertion using Microsoft's published JWKS (JSON Web Key Set):
- Fetch signing keys from the JWKS endpoint provided during configuration
- Periodically check for key updates (keys may rotate at any time)
- Cache keys by
kid(Key ID) — match thekidin the JWT header to the correct public key for signature verification
The ISV portal must allow administrators to configure the expected claim values for each integration:
aud(Audience) — the audience value the ISV expects in incoming JWTssub(Subject) — the subject identifier for the Workload Identity- JWKS URL — the endpoint to fetch Microsoft's signing keys
These values are provided by the Entra portal during Step 1 of the configuration flow and entered by the administrator in Step 2.
After successful JWT validation, the ISV token endpoint should:
- Issue an access token with a lifetime between 1–6 hours
- Scope the token to SCIM operations for the identified customer
- Return the token in standard OAuth 2.0 format:
{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "scim"
}The Entra Provisioning Service sends the following request to the ISV's token endpoint:
POST /oauth2/token HTTP/1.1
Host: auth.isv-app.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id={client_id_from_ISV_portal}
&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
&client_assertion=<signed JWT from Microsoft Entra ID>
&scope=scim
Note: This follows RFC 7523 Section 2.2 — the JWT is used for client authentication with the
client_credentialsgrant type. Theclient_assertionparameter contains the Entra-issued JWT, andclient_assertion_typeindicates it is a JWT bearer assertion.
SAP SuccessFactors is the first application to support this new authentication model for SCIM provisioning from Microsoft Entra ID.
- Admin navigates to Entra Admin Center → Enterprise Applications → SAP SuccessFactors
- Selects "Provisioning" and chooses Workload Identity Federation as the authentication method (instead of basic auth or bearer token)
- Entra ID automatically:
- Creates a federated identity credential on the provisioning app's service principal
- Configures the JWT bearer assertion parameters (audience, issuer, subject mapping)
- No secrets to manage — the admin only provides the SuccessFactors SCIM endpoint URL
- Provisioning cycles automatically perform JWT bearer assertion authentication before each sync
- SAP's SCIM endpoint accepts the Entra-issued JWT via the JWT bearer assertion flow
- SAP validates the JWT against Microsoft's public OIDC keys
- SAP issues a scoped access token for provisioning operations
- No API keys or basic auth credentials are stored or exchanged
POST /oauth2/token HTTP/1.1
Host: auth.successfactors.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id={client_id_from_ISV_portal}
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ijk...
&scope=scim.readwrite{
"access_token": "sl.Adf8sHg7jKl3nM...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "scim.readwrite"
}GET /scim/v2/Users?filter=userName eq "john.doe@contoso.com"
Host: scim.successfactors.example.com
Authorization: Bearer sl.Adf8sHg7jKl3nM...- ✅ Zero secret management — no more bearer tokens to paste and rotate
- ✅ Reduced provisioning outages — no more expired token failures
- ✅ Simplified setup — just select the auth method and provide the SCIM URL
- ✅ Better security posture — short-lived tokens, no stored credentials
- ✅ Standards-based — uses OAuth 2.0 JWT Bearer Assertion (RFC 7523)
- ✅ Reduced support burden — fewer "expired token" support tickets
- ✅ Multi-tenant ready — tenant identification via JWT claims
- ✅ Audit trail — every JWT assertion grant is logged and traceable
- ✅ No long-lived credentials in provisioning configuration
- ✅ Cryptographic trust instead of shared secrets
- ✅ Full auditability of JWT assertion issuance and usage
- ✅ Automatic credential rotation built into the protocol
| Aspect | Legacy (Bearer Token / Basic Auth) | Workload Identity Federation |
|---|---|---|
| Authentication Type | Static bearer token or username/password | OAuth 2.0 JWT Bearer Assertion (RFC 7523) |
| Secret Storage | Token/password stored in Entra config | No secrets stored |
| Token Lifetime | Long-lived (months/years) | Short-lived (~1 hour per cycle) |
| Rotation | Manual, admin-driven | Automatic, per provisioning cycle |
| Outage Risk | High (expired tokens) | Minimal (dynamic token refresh) |
| Protocol Standard | Proprietary per ISV | RFC 7523 (JWT Bearer Assertion Profile) |
| Setup Complexity | Generate token in ISV → paste in Entra | Select auth method → done |
| Multi-Tenant Isolation | Token-per-tenant | JWT claims identify tenant |
| Audit Trail | Limited | Full JWT assertion logging |
-
JWT Signature Verification: ISVs MUST validate the JWT signature using Microsoft's published JWKS keys. Never accept unsigned or self-signed tokens.
-
Audience Validation: Always verify the
audclaim matches your registered application. Reject tokens with unexpected audiences. -
Issuer Validation: Confirm the
issclaim matches the expected Microsoft Entra ID issuer format:https://sts.windows.net/{tenantId}/ -
Token Expiry: Always check
expandnbfclaims. Reject expired or not-yet-valid tokens. -
Tenant Isolation: Use the
tidclaim to ensure provisioning operations are scoped to the correct customer tenant. Cross-tenant data leaks are a critical risk if this is not enforced. -
Rate Limiting: Implement rate limiting on the token endpoint to prevent abuse.
-
TLS Requirement: All JWT assertion and SCIM communications MUST use TLS 1.2 or higher.
The customer's tenant can be identified in two ways:
- The tenant ID may be embedded in the ISV's token URL path (e.g.,
https://auth.isv.com/{tenantId}/oauth2/token) - The
client_idin the request body uniquely identifies the customer's integration on the ISV side
ISVs should cache signing keys by kid (Key ID). When a JWT arrives, match the kid from the JWT header to a cached key. If no matching key is found, fetch the latest keys from the JWKS endpoint.
Keys can rotate at any time without prior notice. ISVs should not assume a fixed rotation schedule. Instead, use the kid field to detect when a new key is needed and fetch the updated key set from the JWKS endpoint.
If the JWKS endpoint is temporarily unavailable:
- Use cached keys if a matching
kidis found in the cache - Fail the request only if the JWT references a
kidthat is not in the cache and the JWKS endpoint cannot be reached
| Resource | Link |
|---|---|
| RFC 7523 — JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants | https://datatracker.ietf.org/doc/html/rfc7523 |
| RFC 7521 — Assertion Framework for OAuth 2.0 | https://datatracker.ietf.org/doc/html/rfc7521 |
| Microsoft Entra Workload Identity Federation | https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation |
| Configure Federated Identity Credentials | https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-create-trust |
| SCIM Provisioning with Microsoft Entra | https://learn.microsoft.com/en-us/entra/identity/app-provisioning/use-scim-to-provision-users-and-groups |
| SAP SuccessFactors Integration Reference | https://learn.microsoft.com/en-us/entra/identity/app-provisioning/sap-successfactors-integration-reference |
| Microsoft Identity Platform OIDC Metadata | https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration |
Last updated: May 22, 2026