Prerequisites
- Enterprise SSO already configured, using the same Okta app integration — see Okta SAML
- Directory Sync enabled for your Modem organization, and the owner role in it
- Administrator access to your Okta org, with permission to configure provisioning
Setup
Generate a token in Modem
Turn on SCIM provisioning for the app
Configure the SCIM connection
Test the credentials
Enable the provisioning actions
- Create Users
- Update User Attributes
- Deactivate Users
Assign people
Push the groups that should grant roles
Map the groups to Modem roles
Matching the SSO identity
Modem links a provisioned directory record to the person signing in by comparing the SCIMexternalId with the SAML NameID. Okta populates externalId with its own immutable user id, so the SAML app has to assert that same id:
- In the app’s SAML Settings, Application username must be Custom with the expression
user.id. This is what the Okta SAML guide sets, and it is the setting that decides the NameID value. - Do not use
user.emailoruser.loginfor either side. Email addresses change.
Confirming they match
The check is a single round trip, and it is worth doing before you roll out:Provision one person
Have them sign in
https://app.modem.dev to sign in with Continue with SSO.Check the count
Attribute mapping
Modem reads a small, standard set. The defaults in Okta’s SCIM 2.0 template are already correct; nothing has to be added.roles, entitlements — is accepted and stored, and is not used to decide anyone’s access.
Testing the whole cycle
Assign
Promote
Sign in
Unassign
Reassign
Troubleshooting
Test Connector Configuration fails with 401
Test Connector Configuration fails with 401
Bearer prefix itself, so
paste only the token value.Test Connector Configuration fails with 404 or cannot reach the endpoint
Test Connector Configuration fails with 404 or cannot reach the endpoint
https://app.modem.dev/api/auth/scim/v2, with no trailing slash. Okta appends /Users and /Groups itself.A user provisions, then signing in creates a second account
A user provisions, then signing in creates a second account
externalId and the NameID disagree. Set the app’s Application username to the custom expression user.id and confirm as
described in Confirming they match.Push Groups fails on a large group
Push Groups fails on a large group
Unassigning someone leaves their Modem access in place
Unassigning someone leaves their Modem access in place
A pushed group is not in Modem's mapping list
A pushed group is not in Modem's mapping list
Provisioning stops working after about a year
Provisioning stops working after about a year