OpenID for Verifiable Credential Issuance (OpenID4VCI)
The IDK implements the OpenID4VCI issuer: metadata, credential offers, wallet-facing protocol handlers for /credential, /credential_deferred, /nonce, /notification, the DI graph wiring, and in-memory stores for a self-contained issuer. The protocol primitives and basic handler extension points remain in the IDK OpenID4VCI issuer guide.
The EDK adds the enterprise issuance runtime around that protocol. The issuer gets claim values through a connector-native PipelineConfiguration: automatic integration is expressed as ConnectorInvocationBinding records bound to named OID4VCI lifecycle stages. A binding can enrich fields, export selected data, write evidence to a vault, send notifications, or orchestrate a connector route. The session has an encrypted attribute bag and connector-field map; the pipeline contract is connector invocation bindings, not a parallel source model.
The Mental Model
An EDK issuance is an IssuancePipelineSession. The session carries:
- an attribute bag: resolved fields that can become credential claims,
- connector fields: correlation and integration inputs such as
email,employee_id,identity_id, AS claims, or callback handles, - protocol status: where the session is in issuance, deferral, approval, and completion.
The session passes through OID4VCI phases. Connector invocations can run before or during offer creation, authorization, pre-authorized issuance, token exchange, credential request, pre-issue, deferred polling, post-issuance, and notification receipt. Each invocation sees the accumulated fields and can add fields for later phases.
When the wallet calls /credential, the EDK runs the credential-request and pre-issue connector phases, assembles claims from the bag, and hands the result to the IDK protocol handler to sign. If required data is not available synchronously, the wallet can receive a deferred response; later connector or callback work can complete the session before /credential_deferred returns the credential.
What the EDK Adds
A registered PipelineConfiguration per issuance flow. It declares invocationBindings, credential bindings, and expected initial connector fields. See Attribute Pipeline.
Connector invocation bindings. A binding connects an OID4VCI stage to a connector route, connector instance, or operation binding. It carries role, exchange mode, subset mapping, execution policy, logical context, governance metadata, Party anchors, and materialization policy. See Connector Invocations.
Pipeline session management endpoints. The EDK adds REST endpoints under /oid4vci/sessions/... for creating sessions, manually contributing attributes, evaluating completeness, approving issuance, failing an integration, and reading accumulated state. These endpoints are operator/backend surfaces; the wallet-facing OID4VCI endpoints remain protocol endpoints. See REST API.
Manual contribution surfaces. POST /api/oid4vci/v1/backend/sessions/{correlationId}/attributes and POST /api/oid4vci/v1/backend/credential/offers can push data into the session using compact groups. In those request bodies, contributorId is record provenance for manually supplied data. It is not the automatic integration contract; automatic runtime integration uses PipelineConfiguration.invocationBindings.
Async and deferred execution. Connector execution policies can be inline, optional, deferred async, or durable outbox. The EDK can hold /credential open for a configured sync window and fall through to deferred issuance when an integration cannot complete in time. Callback ingress is still secured by an opaque capability token scoped to one session and contribution.
Deferral and approval gates. Each credential binding carries deferral and approval policy. AWAITING_DEFERRED and AWAITING_APPROVAL are observable separately from the protocol-level deferred credential response.
Encrypted session persistence. Sessions carry sensitive data. The EDK provides plaintext mode for development, platform-encrypted mode under a tenant KEK, and client-bound mode tied to the session correlation id. See Persistence.
Tenant-aware issuer paths. Protocol endpoints can optionally be reached through a tenant slug path, while host-based tenant resolution continues to work.
How a Developer Builds an Issuer
-
Define credential designs. The credential design system is the source of truth for credential configurations, claim policy, status lists, and display/render data.
-
Register connector invocation bindings for the stages where issuance needs integration. A typical employee credential pipeline might bind
OID4VCI_STARTfor audit,OID4VCI_AUTHORIZATIONfor authenticated-user context,OID4VCI_TOKENto resolve an external identifier,OID4VCI_CREDENTIAL_REQUESTto fetch the HR record,OID4VCI_PRE_ISSUEfor final enrichment or policy state, andOID4VCI_POST_ISSUANCEfor vault retention. -
Register the
PipelineConfigurationwithinvocationBindings, credential bindings, and expected initial connector fields. -
Let the IDK/EDK protocol handlers run the phases at the correct OID4VCI moments. You only call the pipeline REST API when backend code needs to seed, observe, approve, or manually contribute to a session.
You write code only when you need a new connector implementation, a custom route executor, or a custom claim mapper.
Where Things Live
| Concern | Module |
|---|---|
| Issuer protocol service, DSL, handlers | com.sphereon.idk:lib-openid-oid4vci-issuer-public / -impl |
| Issuer REST endpoints | com.sphereon.idk:services-oid4vci-issuer-rest plus EDK tenant adapters |
| Pipeline session and command types | com.sphereon.edk:lib-credential-issuance-pipeline-public |
| Attribute bag and phase types | com.sphereon.idk:lib-attribute-flow-public |
| Connector invocation contracts | com.sphereon.edk:lib-connector-public |
| Pipeline command implementations and OID4VCI connector bridge | com.sphereon.edk:lib-credential-issuance-pipeline-impl |
| VDX durable connector registry, routes, grants, throttling, run lineage, and invocation binding REST/admin surface | com.sphereon.vdx:vdx-data-store-connector-* |
| Tenant-aware path adapter | com.sphereon.edk:lib-openid-oid4vci-issuer-rest-tenant |
| Service contracts | com.sphereon.edk:lib-openid-oid4vci-issuer-contract |
| Deployable container | com.sphereon.edk:services-oid4vci-issuer |
Next Steps
- Attribute Pipeline: phases, connector invocation bindings, session lifecycle, deferral, approval
- Connector Invocations: binding connector routes into OID4VCI phases
- REST API: pipeline session and callback endpoints
- Persistence: session store and encryption modes
- IDK OpenID4VCI Issuer Guide: protocol layer, metadata, offers, and handlers