Sync Entra ID Users to Smallstep
Prerequisites
You will need:
- A Smallstep team. Register here
- An Entra ID tenant with subscription P1 or higher
- Global Administrator access to the account
Features
The following provisioning features are supported:
- Push Groups and New Users
- Push Profile or Group Updates
- Push User Deactivation
- Reactivate Users
Step by step instructions
Step 1. Create an Entra ID enterprise application
- In Entra ID, visit Browse Entra Gallery and choose “+ Create your own application”.
- Name the application and use the default “Non-gallery” option.
- If the "Smallstep SSH" Marketplace app is shown, do not choose it.
- In your new Enterprise Application, visit Manage → Users and groups.
- Assign the groups or users you’d like to sync to Smallstep. You may want to create new groups for Smallstep users.
Step 2. Enable SSO
In Entra ID
- Your Enterprise Application comes with an App Registration.
- Go to App registrations and find your Smallstep application in the list. It may be under the "All Applications" tab.
- On the application overview, save the Application (client) ID and Directory (tenant) ID for later.
- In the App Registration, visit “Manage → Certificates & secrets”
- Create a new Client Secret
- Set the client secret description and expiry as desired
- Save the Client Secret Value for later
- Go to the API Permissions blade
- Choose Microsoft Graph
- Choose Delegated Permissions
- Under OpenID Permissions, select
email,openid, andprofile. - Choose "Grant Admin Consent" for all permissions
- Under OpenID Permissions, select
- Go to the "Token configuration" blade
- Choose Add Optional Claim
- ID token type
- Select email and preferred_username
- Choose Add
- Go to Manage -> Authentication blade and choose + Add Redirect URI
- Choose type "Web" and enter the URL:
https://api.smallstep.com/auth/openid/callback - Choose "Configure"
- Choose type "Web" and enter the URL:
- Now choose the Settings tab in the Authentication blade.
- Under Supported Account Types, select multi-tenant.
- Only the users
- Choose Save
- Finally, return to the Overview blade.
- Select 🌐Endpoints and copy the OpenID Connect metadata document URL for later.
In Smallstep
- Go to Connect an Entra ID IdP
- Fill the Client ID, Client Secret, Tenant ID, and OIDC metadata URL you saved.
Step 3. Enable user provisioning
- Smallstep will send you a SCIM URL and Secret Token.
- In Entra ID, return to your Smallstep Enterprise Application.
- Go to Manage → Provisioning
- Create a new provisioning configuration.
- For Admin Credentials:
- Use Bearer Authentication
- Supply the SCIM Tenant URL and Secret Token you received from Smallstep.
- Choose Test Connection and make sure that it works.
- Save.
Step 4. Turn on provisioning
- Return to the Provisioning panel.
- Choose Start Provisioning.
Step 5. Adjust user attribute mappings
-
In your Smallstep Enterprise Application, the Manage → Attribute Mappings blade should now be accessible. Choose it.
-
Choose “Provision Microsoft Entra ID Users"
-
The mappings you’ll want for Smallstep are:

Most of these are part of the default mappings.
Two of them need to be customized:
externalIdshould map toobjectId. This is a unique ID representing the user that is not reusable.emails[type eq "work"].valueshould map to the expressionCoalesce([mail],[userPrincipalName]). Entra maps this attribute tomailby default, including in the screenshot above; change the Mapping type from Direct to Expression to replace it.
Why not map
emails[type eq "work"].valuestraight tomail? Microsoft documents that themailattribute "is only populated if the user has a Microsoft Exchange Mailbox," and Entra skips null attributes rather than sending them. Users without a mailbox — contractors, service accounts, shared and bot accounts — therefore sync to Smallstep with no email address at all. Smallstep matches SSO logins by email address, so those users appear in your directory looking correctly provisioned, but signing in fails with "You are not authorized to access this account."Coalescefalls back touserPrincipalName, which every user has, so nobody syncs without an email address. -
Remove any other default attributes that are not in the list above. The only attributes you need to send to Smallstep are:
userNamedisplayNameemails[type eq "work"].valuename.givenNamename.familyNameexternalId
-
Save your user attribute mappings.
-
Change "Provisioning Status" to "On", and save the settings.
-
If you changed a mapping on a configuration that had already synced users, choose Restart provisioning in the Provisioning panel. Entra only sends users it considers changed, so users that synced under the old mappings are not re-sent otherwise. To check the new mapping against a single user first, use Provision on demand.
It may take up to 40 minutes to enable provisioning.
Step 6. Confirm the directory connection
- Return to the Smallstep dashboard.
- In the Users tab, you should now see your Entra ID users
- Sign out
- You should be offered the option to sign in with SSO.
- Finally, let Smallstep know which of your SSO users should be team Owners or Admins in Smallstep.
- Admins have dashboard read/write privileges (users, devices, etc.)
- Owners have all the same privileges as Admins, with the additional privilege that Owners can create Admins.
Don't see your users and groups? Microsoft's SCIM service may add a 40-minute delay after you set it up. You can force an update by clicking Restart provisioning in the Provisioning panel. Even then, it may take a minute to sync with Smallstep.
A synced user can't sign in with SSO? If a user reaches Smallstep after signing in to Entra but is told "You are not authorized to access this account," check that user in the Users tab. If they have no email address listed, they were provisioned without one and Smallstep can't match them to the account they signed in with. Correct the
emails[type eq "work"].valuemapping in Step 5, then Restart provisioning.
Last updated on February 3, 2026
Introducing
Device Identity
Ensure that only company-owned devices can access your enterprise's most sensitive resources.