Skip to content

Outbound provisioning/sync user to external systems and applications (SCIM client) #6601

Description

@mffap

As an administrator, I want to configure outbound SCIM provisioning for users, manage SCIM servers, and define which users are provisioned to external systems, so that I can ensure users exist in external applications before SSO login attempts and maintain consistent user lifecycle management across multiple applications.

Description:

To support applications that require user pre-existence for SSO login and to enable consistent lifecycle management across multiple applications, we need to implement outbound SCIM provisioning for users.
This feature will allow administrators to configure SCIM servers, define which users are provisioned to external systems, and automatically synchronize user data.
By ensuring users exist in external systems before SSO login attempts, we can streamline the login process and prevent authorization issues.
Furthermore, by synchronizing user lifecycle events (e.g., deactivation, deletion), we can ensure that user access is consistently managed across all applications. The initial implementation will focus on the user resource.

Acceptance Criteria

  • SCIM Server Management:
    • Given: An administrator wants to configure outbound SCIM provisioning.
    • Then: The system should provide a management interface for SCIM servers, allowing administrators to:
      • Add new SCIM server configurations.
      • Configure SCIM server endpoints (URL).
      • Configure authentication credentials (e.g., API keys, tokens).
      • Test SCIM server connectivity.
      • Edit and delete existing SCIM server configurations.
  • User Provisioning Configuration:
    • Given: An administrator wants to define which users are provisioned.
    • Then: The system should provide configuration options to:
      • Select specific users or groups of users to be provisioned.
      • Define attribute mappings between ZITADEL user attributes and external SCIM server attributes.
      • Specify the provisioning behavior (e.g., create, update, delete).
      • Enable/disable provisioning for individual users or groups.
  • Automatic User Synchronization:
    • Given: A user is created, updated, or deleted in ZITADEL.
    • When: Outbound SCIM provisioning is enabled for the user.
    • Then: ZITADEL should automatically send SCIM requests to the configured external SCIM server to synchronize the user data.
  • Error Handling and Logging:
    • Given: An error occurs during outbound SCIM provisioning.
    • Then: The system should:
    • Log the error with detailed information.
    • Provide error notifications or alerts to administrators.
    • Implement a retry mechanism for failed provisioning attempts.
  • Data Consistency:
    • Given: User data is synchronized between ZITADEL and an external SCIM server.
    • Then: The user data should be consistent across both systems.
  • SCIM Standard and RFC Compliance:
    • Given: The outbound SCIM provisioning feature is implemented.
    • Then: The implementation must adhere to the SCIM standard framework and relevant RFCs, including:
  • Documentation:
    • Given: An administrator or developer accesses the system documentation.
    • Then: The documentation should explain:
      • How to configure outbound SCIM provisioning.
      • How to manage SCIM servers.
      • How to define user provisioning rules.
      • How to handle errors and troubleshoot issues.
  • Testing:
    • Given: The outbound SCIM user provisioning feature is implemented.
    • Then:
      • Unit tests should verify individual components of the provisioning logic.
      • Integration tests should verify the interaction between ZITADEL and external SCIM servers.
      • End-to-end tests should simulate user provisioning workflows, including creation, updates, and deletions.
      • Test cases should cover valid and invalid configuration scenarios.

Architecture

The implementation requires specific behaviours (such as searching for the user in the external SCIM endpoint, etc.) which cannot be implemented using the actions alone. On the other hand (as mentioned) likely a lot of vendors will not be fully compliant or need additional fields (custom schema) / very custom mapping.

  • Provide Standard SCIM Client with default Implementation/Mapping (analog generic idps)
  • With actions we allow customers to extend/customize the generic implementation
  • In the future we might provide specific implementations for specific providers
  • The handling of the subscribed events (I would start with predefined e.g User Added, User Updated, Delete etc, which also includes subresources such as metadata), will be handled using the existing queue as with event actions.
  • The server and provisioning configuration need to be possible on a instance and organization level, where the latter can be used to specifically create a configuration or partially overwrite the instance, e.g. when to provision.

Technical Considerations

Integrations / References

Additional Context

This feature might also be used for applications that don't support federated authentication (SAML, OpenID Connect). We strongly discourage use of such a feature to provision credentials. Instead users should look into a reverse-proxy / zero trust pattern to secure their applications.

Out of scope

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

Priority

None yet

Projects

Status
Gathering community feedback
Status
No status
Status
Gathering community feedback

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions