Skip to main content
Version: v0.13

Enterprise Development Kit (EDK)

The Enterprise Development Kit (EDK) is Sphereon's proprietary extension to the Identity Development Kit (IDK). It provides enterprise-grade features for building scalable, multi-tenant identity services.

Architecture Overview

EDK Architecture Overview

What is the EDK?

The EDK is a modular set of libraries that extend the IDK with enterprise capabilities:

  • Party Persistence - Store parties, identities, contacts, and addresses in PostgreSQL, MySQL, or SQLite
  • Multi-tenant Database Routing - Route database operations to tenant-specific databases or schemas
  • Hierarchical Settings - Scope-aware configuration with APP > TENANT > PRINCIPAL inheritance
  • OID4VP Verification - Verify credentials from digital wallets via the Universal OID4VP REST API
  • Authorization Engine Integration - Integrate with policy decision points via OpenID AuthZEN
  • JWT Validation - Token validation with Ktor and Spring Boot integrations
  • eIDAS Signatures - EU-compliant digital signatures with DSS integration
  • Events System - EDK event types, subsystems, and rich filtering
  • Spring Boot Integration - First-class support for Spring Boot applications
  • Resilience Patterns - Circuit breakers, caching, and fallback policies

Modular Architecture

The EDK is designed as a collection of independent modules. Not all modules are JVM-only—the architecture supports different platform targets per module:

Module CategoryPlatformsDescription
Party PersistenceJVMPostgreSQL, MySQL, SQLite storage for parties/identities
Database RoutingJVMMulti-tenant connection routing and pooling
Settings PersistenceJVMHierarchical configuration storage
KV PersistenceJVMDatabase-backed key-value stores
OID4VP VerificationAllUniversal REST API for credential verification (core in IDK)
AuthorizationJVMPolicy engine integration (AuthZEN, Cedar, OPA)
JWT ValidationJVMToken validation for Ktor and Spring Boot
eIDAS SignaturesJVMEU-compliant digital signatures with REST API
EventsJVMEvent types, subsystems, and transmitters
Spring BootJVMSpring Boot auto-configuration
Future Platform Support

Some modules may gain multiplatform support in future releases. The modular design allows platform-specific implementations while sharing common interfaces.

EDK vs IDK

AspectIDKEDK
LicenseOpen Source (Apache 2.0)Proprietary
FocusCore identity primitivesEnterprise extensions
Party StorageIn-memory modelsPostgreSQL, MySQL, SQLite
Multi-tenancyConfiguration-based scopesFull database isolation
AuthorizationAuthZEN, Cedar, OPA
Spring BootBasic supportFull auto-configuration

Module Reference

Party Persistence

Store and query parties, identities, contacts, and addresses with multi-dialect support:

ModuleDescription
lib-data-store-party-persistence-apiUnified repository interfaces and models
lib-data-store-party-persistence-postgresqlPostgreSQL implementation
lib-data-store-party-persistence-mysqlMySQL implementation
lib-data-store-party-persistence-sqliteSQLite implementation

Database Routing

Route database operations based on scope (APP, TENANT, USER):

ModuleDescription
lib-data-store-db-routing-publicCore routing interfaces and models
lib-data-store-db-routing-configConfiguration-driven registry
lib-data-store-db-routing-databaseDatabase-backed registry
lib-data-store-db-routing-poolingHikariCP connection pool management

Settings Persistence

Store configuration with scope inheritance:

ModuleDescription
lib-conf-settings-persistence-apiRepository interfaces and caching
lib-conf-settings-persistence-postgresqlPostgreSQL implementation
lib-conf-settings-persistence-mysqlMySQL implementation
lib-conf-settings-persistence-sqliteSQLite implementation

KV Store Persistence

Database-backed key-value storage:

ModuleDescription
lib-data-store-kv-persistence-apiDatabase KV store implementation
lib-data-store-kv-persistence-postgresqlPostgreSQL backend
lib-data-store-kv-persistence-mysqlMySQL backend
lib-data-store-kv-persistence-sqliteSQLite backend

Authorization

Policy-based authorization:

ModuleDescription
lib-authz-policy-apiGeneric policy engine interface
lib-authz-authzen-apiOpenID AuthZEN protocol support
lib-authz-authzen-implAuthZEN implementation with resilience
lib-authz-authzen-cedarlingCedarling sidecar PDP adapter
lib-authz-authzen-springSpring Boot auto-configuration for AuthZEN

JWT Validation

Token validation with framework integrations:

ModuleDescription
lib-oauth2-jwt-validation-apiJWT validation API (in IDK)
lib-oauth2-jwt-validation-implJWT validation implementation (in IDK)
lib-oauth2-jwt-validation-ktorKtor server plugin for JWT validation
lib-oauth2-jwt-validation-springSpring Boot auto-configuration for JWT validation

eIDAS Signatures

EU-compliant digital signatures:

ModuleDescription
lib-eidas-signature-client-publicSignature client interfaces and models
lib-eidas-signature-client-implClient implementation with IDK integration
lib-eidas-signature-client-dssEU DSS integration for eIDAS compliance
lib-eidas-signature-rest-apiOpenAPI-generated REST models
lib-eidas-signature-rest-server-publicServer interfaces and domain models
lib-eidas-signature-rest-server-implHTTP adapters and endpoint commands
lib-eidas-signature-rest-server-persistence-postgresqlPostgreSQL storage
lib-eidas-signature-rest-server-persistence-mysqlMySQL storage
lib-eidas-signature-rest-server-persistence-sqliteSQLite storage
lib-eidas-signature-rest-clientREST client for remote signing services

Events

Event system extensions with persistence and framework support:

ModuleDescription
lib-events-event-apiEDK event types, subsystems, and transmitter interfaces
lib-events-event-persistence-apiEvent persistence interfaces and models
lib-events-event-persistence-postgresqlPostgreSQL event storage
lib-events-event-persistence-mysqlMySQL event storage
lib-events-event-persistence-sqliteSQLite event storage
lib-events-event-springSpring Boot auto-configuration for events

DID REST Services

Expose DID operations as REST APIs compatible with DIF Universal standards:

ModuleDescription
lib-did-rest-registrar-serverUniversal Registrar compatible API for create/update/deactivate
lib-did-rest-resolver-serverUniversal Resolver compatible API for DID resolution (in IDK)

The EDK extends the IDK's DID capabilities with a full REST API for DID lifecycle management. See DID Services for details.

Spring Boot

ModuleDescription
spring-supportSpring Boot auto-configuration (in IDK)

Requirements

  • JDK 17 or higher (for JVM modules)
  • Kotlin 2.0 or higher
  • Spring Boot 3.5 (for Spring Boot integration)
  • Database: PostgreSQL 14+, MySQL 8+, or SQLite 3.35+

Installation

The EDK is distributed through Sphereon's Maven repository. Contact Sphereon for access credentials.

// build.gradle.kts
repositories {
maven("https://nexus.sphereon.com/repository/sphereon-releases/") {
credentials {
username = System.getenv("SPHEREON_MAVEN_USER")
password = System.getenv("SPHEREON_MAVEN_PASSWORD")
}
}
}

dependencies {
// Party persistence
implementation("com.sphereon.edk:lib-data-store-party-persistence-postgresql:0.13.0")

// Database routing
implementation("com.sphereon.edk:lib-data-store-db-routing-public:0.13.0")
implementation("com.sphereon.edk:lib-data-store-db-routing-config:0.13.0")

// Settings persistence
implementation("com.sphereon.edk:lib-conf-settings-persistence-postgresql:0.13.0")

// Authorization
implementation("com.sphereon.edk:lib-authz-authzen-impl:0.13.0")

// Spring Boot integration
implementation("com.sphereon.edk:idk-spring-support:0.13.0")
}

Quick Start

1. Create a Spring Boot Application

import com.sphereon.spring.annotation.EnableSphereonRestApi
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
@EnableSphereonRestApi
class IdentityServiceApplication

fun main(args: Array<String>) {
runApplication<IdentityServiceApplication>(*args)
}

2. Configure Application Properties

# application.yml
sphereon:
app:
id: identity-service
profile: ${spring.profiles.active:development}

rest-api:
auth:
tenant-header: X-Tenant-ID
principal-header: X-User-ID

spring:
datasource:
url: jdbc:postgresql://localhost:5432/identity
username: identity
password: ${DB_PASSWORD}

3. Use Party Persistence

import com.sphereon.data.store.party.persistence.api.repository.IdentityRepository
import com.sphereon.data.store.party.persistence.api.router.TenantDatabaseRouter
import jakarta.inject.Inject
import jakarta.inject.Singleton

@Singleton
class PartyService @Inject constructor(
private val router: TenantDatabaseRouter
) {
suspend fun getIdentities(tenantId: String): List<Identity> {
val database = router.getDatabaseForTenant(tenantId)
return database.identityQueries.listIdentities(tenantId).executeAsList()
}
}

Next Steps

Support

The EDK is a proprietary product. For support inquiries, contact Sphereon at support@sphereon.com.