- A running PingFederate 11.x or later installation with the Outbound Provisioning role licensed.
- An external RDBMS (PostgreSQL, MySQL, Oracle, or SQL Server) to back the PingFederate Provisioner Data Store. Required for any non-trivial install — the embedded H2 store should only be used for local testing.
- An Active Directory (or other LDAP) directory containing the users you want to provision, reachable from PingFederate over LDAP/LDAPS. A read-only service account with permission to query the user subtree is sufficient.
- PingFederate’s runtime must be able to reach your Infisical deployment over HTTPS at the SCIM URL Infisical issues. If PingFederate runs in a different network zone than Infisical, ensure firewall rules and DNS resolution are in place before continuing.
- On the Infisical side, the organization must already have SAML or OIDC SSO configured and at least one verified email domain (Settings → Organization → Email Domains).
Install the PingFederate SCIM Connector Add-on
.zip.
2. Install the connectorExtract the .zip. Inside you’ll find a dist/ directory containing a single jar named
pf-scim-quickconnection-<version>.jar.Stop PingFederate and copy that jar into <pf-install>/server/default/deploy/. Leave PingFederate stopped — the next step edits another config file.Enable the Outbound Provisioning runtime in PingFederate
<pf-install>/bin/run.properties and change:STANDALONE for a single-node install. For high availability, see Ping’s Deploying provisioning failover guide.Start PingFederate.server.log for connector load errors. Cancel out of the wizard once you’ve confirmed; you’ll return to it in a later step.
Configure the Provisioner Data Store
- Create an empty schema in your RDBMS for PingFederate’s provisioner state.
-
Run the schema script that matches your RDBMS against that schema. The scripts ship with PingFederate and live at
<pf-install>/server/default/conf/provisioner/sql-scripts/:provisioner-mssql.sql— SQL Serverprovisioner-mysql.sql— MySQLprovisioner-oracle.sql— Oracleprovisioner-postgresql.sql— PostgreSQL
-
Install the JDBC driver for your database. PingFederate only bundles the H2 driver — other databases require you to download the driver
.jarfrom the vendor and copy it into<pf-install>/server/default/lib/, then restart PingFederate. If you skip this step, the Add Data Store step will fail with “You must provide a valid driver class name” even when the class name is correct. -
In the PingFederate admin console: System → Data Stores → Add Data Store → JDBC. Configure the connection and save.
-
Go to System → Server → Protocol Settings → Outbound Provisioning and select the JDBC data store you just created as the Provisioner Data Store. Save.
Add your LDAP directory as a Data Store


- LDAP Type: select Active Directory (or Generic / Oracle Directory Server / etc. for non-AD directories). The LDAP Type affects which attribute behaviors PingFederate assumes (binary handling for AD’s
objectGUID, etc.) — picking the wrong one will silently produce incorrect change detection.

- Hostname: your AD / LDAP server (e.g.
ad.corp.example.com). For HA, add multiple hosts. Click Add to commit each hostname into the list. - Use LDAPS (recommended) or Use StartTLS: enable one if your directory supports TLS. If using LDAPS, ensure the directory’s CA certificate is trusted by PingFederate (Security → Certificate & Key Management → Trusted CAs).
- Authentication Method: Simple.
- User DN: a service account DN with read access to the user subtree, e.g.
CN=pf-svc,OU=Service Accounts,DC=corp,DC=example,DC=com. - Password: the service account password.

Generate a SCIM token in Infisical
Press Configure and then Create to generate a SCIM token for PingFederate.
Copy the SCIM URL and New SCIM Token — you’ll paste them into PingFederate’s SP Connection in a later step.
The token is shown once and cannot be retrieved again.
Create the SP Connection
1. Connection Template tabSelect USE A TEMPLATE FOR THIS CONNECTION → from the dropdown, pick SCIM Connector → Next.
2. Connection Type tab- Check Outbound Provisioning.
- The Type dropdown that appears next to Outbound Provisioning should say SCIM Connector.
-
Click Next.
-
Partner’s Entity ID (Connection ID): e.g.
infisical-scim. -
Connection Name: e.g.
Infisical SCIM. - Leave the rest (Base URL, Company, Contact, Application metadata) empty or default.
-
Click Next.

Configure the SCIM target
| Field | Value |
|---|---|
| SCIM URL | The SCIM URL you copied from Infisical in Step 5 |
| SCIM Version | 2.0 |
| Authentication Method | OAuth 2 Bearer Token |
| Access Token (under OAUTH 2 BEARER TOKEN) | The SCIM token you copied from Infisical |
| Unique User Identifier | userName |
| Filter Expression | userName eq "%s" |
| Authorization Header Type | leave blank (defaults to Bearer) |
| Users API Path / Groups API Path | leave blank (defaults to /Users and /Groups) |
| Results Per Page | 1000 |
| Provisioning Options → User Create / User Update / User Disable-Delete | all checked |
| Provision Disabled Users | unchecked |
| Remove User Action | Disable for a first run (changes deprovisioned users to inactive in Infisical rather than hard-deleting them). Switch to Delete later if you want true hard deprovisioning. |
| Group Name Source | Common Name |
| Use PATCH for Group Updates | Optional, but recommended if you provision groups. |

Click Next to move on to the channel configuration.Configure the SCIM channel
1. Channel Info-
Channel Name:
infisical-users(or any identifier). -
Max Threads:
1for dev, increase for production as needed. -
Timeout (Secs):
60(default).
-
Active Data Store: select the LDAP data store you configured in Step 4.
| Field | Value (AD) | Value (Generic LDAP / OpenLDAP) |
|---|---|---|
| Entry GUID Attribute | objectGUID | entryUUID |
| GUID Type | Binary | Text |
| Member of Group Attribute | memberOf | memberOf (if the memberof overlay is enabled) — otherwise leave blank |
| Group Member Attribute | member | member |
| User Objectclass | user | inetOrgPerson |
| Group Objectclass | group | groupOfNames |
| Changed Users/Groups Algorithm | USN (AD-specific) or Timestamp | Timestamp |
| USN Attribute (only if USN algorithm) | uSNChanged | n/a |
| Timestamp Attribute (only if Timestamp algorithm) | whenChanged | modifyTimestamp |
| Account Status Attribute | userAccountControl | varies by directory (e.g. pwdAccountLockedTime if password policy overlay) |
| Account Status Algorithm | Flag | Flag |
| Default Status | true (users active by default) | true |
| Flag Comparison Value | 514 (the disabled bit) | varies |
| Flag Comparison Status | false (when flag matches, user is inactive) | false |


member for Group Member Attribute as a safe default if you don’t plan to use the values.-
Base DN: the search root for both users and groups — it must contain both (use a common ancestor like the domain root if they’re in different OUs). e.g.
CN=Users,DC=corp,DC=example,DC=comfor AD. - Users → Group DN: leave blank, or set to a group to provision only its members.
-
Users → Filter: AD
(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))(enabled users); OpenLDAP(objectClass=inetOrgPerson). -
Groups → Filter (only if provisioning groups): AD
(objectClass=group); OpenLDAP(objectClass=groupOfNames)— scope it (e.g.(&(objectClass=group)(cn=infisical-*))) or you’ll also pull AD’s built-in groups. Leave Group DN and Nested Search empty (Infisical doesn’t support nested groups).
sn is defined on the person class and inherited
by inetOrgPerson. So mapping familyName requires selecting Root Object Class = person, not inetOrgPerson.
If the attribute you expect is missing from the dropdown, try a parent object class.| SCIM Field | Root Object Class (AD) | Attribute (AD) | Root Object Class (LDAP) | Attribute (LDAP) |
|---|---|---|---|---|
userName | user | userPrincipalName (or mail) | inetOrgPerson | mail |
workEmail | user | mail | inetOrgPerson | mail |
givenName | user | givenName | inetOrgPerson | givenName |
familyName | user | sn | person | sn |
active doesn’t need an explicit mapping — PingFederate derives it from the Account Status Attribute settings in Source Settings.

userName’s email domain must be a verified email domain for your Infisical organization
(Settings → Organization → Email Domains). If it isn’t, SCIM user creation is rejected with a
403 – "…not a part of the accepted domains…" and the user is not created — groups have no such check, so
you’ll see the group sync without its members. Verify the domain before provisioning.- Set Channel Status to
Active. - Scroll through the summary and confirm Source Settings, Source Location, and Attribute Mapping all reflect what you intended.
- Click Done.


Activate the SP Connection
On the parent SP Connection wizard’s Outbound Provisioning tab, click Next.
On Activation & Summary:- Set Connection Status to
Active. - Review the summary.
- Click Save.


Verify provisioning works
<pf-install>/log/provisioner.log. Look for lines like:Connection refused or Service Unavailable errors, the SCIM URL host isn’t reachable from PingFederate — re-check Step 7.2. Infisical’s user listGo to Settings → Organization → Access Control → Users. Provisioned users appear as pending (invited) accounts.3. Infisical’s SCIM event logGo to Organization Settings → Provisioning → SCIM Events. Each successful POST/PUT/PATCH from PingFederate appears here with the SCIM payload — useful for diagnosing attribute-mapping mistakes.Troubleshooting
provisioner.log shows: Connection refused / Service Unavailable
provisioner.log shows: Connection refused / Service Unavailable
Sync runs successfully but Total users created is 0
Sync runs successfully but Total users created is 0
provisioner.log for Processed N users and Users added: N lines from the most recent cycle. A zero Users added count means the filter is too restrictive or change-detection thinks nothing has changed.To force a re-provision: delete the entry for that channel from the Provisioner Data Store’s tracking tables, then trigger a new sync. (For development only — never do this in production.)Only SCIM 1.1 Service Provider appears in the Connection Type dropdown
Only SCIM 1.1 Service Provider appears in the Connection Type dropdown
<pf-install>/server/default/deploy/, PingFederate was restarted after the copy, and server.log has no errors loading the connector.LDAP attribute isn't appearing in the Attribute Mapping edit dropdown
LDAP attribute isn't appearing in the Attribute Mapping edit dropdown
sn is defined on person, not inetOrgPerson or user. Change the Root Object Class to the parent class that actually defines the attribute.Provisioning runs but no users land in Infisical, no errors in the logs
Provisioning runs but no users land in Infisical, no errors in the logs
Inactive status. Both must be Active. Confirm in both Configure Provisioning → Manage Channels (channel status column) and SP Connections list (connection status column).