Try   HackMD

Configuring a Custom Identity Provider for Camunda BPM

Key Implementation Steps

1. Create Custom Identity Provider
To implement a custom identity provider, you'll need to:

  • Implement either ReadOnlyIdentityProvider or WritableIdentityProvider
  • Create a custom SessionFactory
  • Develop a ProcessEnginePlugin

Implementation Structure

public class MyCustomIdentityProviderFactory implements SessionFactory {
    public Class<?> getSessionType() {
        return ReadOnlyIdentityProvider.class;
    }

    public Session openSession() {
        return new MyCustomIdentityProviderSession();
    }
}

public class MyCustomProcessEnginePlugin implements ProcessEnginePlugin {
    @Override
    public void preInit(ProcessEngineConfigurationImpl processEngineConfiguration) {
        CustomIdentityProviderFactory customFactory = new CustomIdentityProviderFactory();
        processEngineConfiguration.setIdentityProviderSessionFactory(customFactory);
    }
}

Configuration Methods

1. XML Configuration
In the bpm-platform.xml file, add the custom plugin:

<process-engine name="default">
    <plugins>
        <plugin>
            <class>your.package.MyCustomProcessEnginePlugin</class>
        </plugin>
    </plugins>
</process-engine>

2. Spring Boot Configuration
For Spring Boot applications, use the @Component annotation and configuration properties:

@Component
@ConfigurationProperties(prefix="plugin.identity.custom")
public class CustomIdentityProvider extends ProcessEnginePlugin {
    // Custom implementation details
}

Key Considerations

Authentication and Authorization

  • The custom identity provider handles user authentication
  • Camunda's authorization system still manages permissions
  • Users and groups are not stored in Camunda's database

Supported Provider Types

  • Read-Only: Retrieve user and group information
  • Writable: Create, update, and delete users and groups
  1. Start with a simple implementation using hardcoded or stubbed methods
  2. Gradually add complexity to match your specific identity management requirements
  3. Ensure secure integration with your existing identity system

Important Notes:

  • Custom providers can connect to various sources (LDAP, REST APIs, databases)
  • Multi-tenancy may require additional custom logic
  • Always prioritize security in your implementation

Potential Integration Strategies

  • LDAP Integration
  • OAuth2/OpenID Connect
  • Custom REST-based authentication
  • Database-backed identity providers

Citations:
[1] https://docs.camunda.org/manual/7.22/user-guide/spring-boot-integration/spring-security/
[2] https://docs.cibseven.de/manual/1.0/installation/full/tomcat/configuration/
[3] https://forum.camunda.io/t/custom-identity-provider-for-tasklist/26219
[4] https://github.com/camunda/camunda-docs-manual/blob/master/content/user-guide/process-engine/identity-service.md
[5] https://docs.camunda.io/docs/components/best-practices/operations/securing-camunda-c7/
[6] https://docs.camunda.org/manual/7.22/user-guide/process-engine/multi-tenancy/
[7] https://camunda.com/blog/2021/11/qa-the-one-with-the-sso-implementation-in-camunda/
[8] https://docs.camunda.io/docs/self-managed/identity/user-guide/configuration/configure-external-identity-provider/
[9] https://groups.google.com/g/camunda-bpm-users/c/u4777peJYwM
[10] https://dzone.com/articles/springboot-embedded-camunda-single-sign-on-with-saml-idp-provider
[11] https://github.com/camunda-community-hub/camunda-platform-7-keycloak
[12] https://camunda.com/blog/2024/01/camunda-8-4-simplifying-installation-enhancing-user-experience/
[13] https://www.chakray.com/configure-single-sign-on-camunda-keycloak/
[14] https://groups.google.com/g/camunda-bpm-users/c/u4777peJYwM
[15] https://camunda.com/blog/2019/08/keycloak-identity-provider-extension/
[16] https://docs.camunda.io/docs/self-managed/identity/user-guide/configuration/configure-external-identity-provider/
[17] https://forum.camunda.io/t/custom-identity-provider-for-tasklist/26219
[18] https://forum.camunda.io/t/keycloak-camunda-identity-provider-plugin/31063
[19] https://github.com/camunda/camunda-docs-manual/blob/master/content/user-guide/process-engine/identity-service.md