Identifiers Overview
No matter your role in a credential-based interaction, you need an identifier. This page explains how the system uses identifiers and how to create the identifiers you need for your use cases.
Identifiers in Procivis One
The type of identifier you need is likely determined by the ecosystem in which you interact, for example: X.509 certificates for ISO mDOC and Access Certificates, keys for IETF SD-JWT VC, and DIDs for certain credential formats.
To enable you to work flexibly across different ecosystems, Procivis One uses "identifier" as an abstraction. Create the identifiers you need. When you engage in an interaction, use the identifier appropriate to that interaction.
Identifier creation workflow
Use identifiers to represent your organization:
For issuers and verifiers with complex, multi-tenant organizations working across international borders and identity ecosystems, this could entail creating multiple identifiers of different types, for many different organizations. You can create as many identifiers for as many different organizations as you need.
For holders: the system automatically generates dedicated key pairs for each credential issuance, so identifier management is typically not required for holding workflows. See the example Wallet Workflow with the SDK for an example.
Enabling types of identifiers
Use the identifier configuration object to enable or disable types of
identifiers. This determines which types of identifiers are available to
use in your solution.
Related guide: identifier reference
Choosing types of identifiers
Your required identifiers depend on the ecosystem in which you operate. As a shortcut, identify the credential format you will use. Retrieve the configuration through the API and check that format's capabilities.
For example, suppose you know you will be working with IETF SD-JWT VC and your configuration includes this:
"format": {
"SD_JWT_VC": {
"type": "SD_JWT_VC",
"display": "format.sdjwt_vc",
"order": 200,
"capabilities": {
"issuanceIdentifierTypes": [ // List of compatible identifier types for issuing this format
"KEY",
"DID"
],
"verificationIdentifierTypes": [ // List of compatible identifier types for verifying this format
"KEY",
"DID"
],
},
},
},
Then you know you can use keys or DIDs as an identifier, or both, but not certificates.
Supported identifiers
All identifiers in the system are one of the following type.
Certificates
X.509 certificates are commonly used to establish trust in identity by binding a public key to an entity through the signature of a trusted Certificate Authority (CA). Certificates are the required identifier type for ISO mDOC credential issuance.
To use a certificate as an identifier, you generate a Certificate Signing Request (CSR) using the system, obtain a signature from a CA (either external or your own CA infrastructure), then import the signed certificate as an identifier.
Related guide: Certificates
Certificate Authorities
Certificate Authority (CA) identifiers enable you to sign and issue certificates. You can either import an existing CA certificate chain or create a self-signed root CA directly through the system.
CA identifiers are used for issuing Access Certificates as required by EUDI wallet specifications, and can also be used to sign X.509 certificates through the signature endpoint for other certificate-based workflows.
Related guide: Certificates
Keys
Keys can be used:
- To create certificates
- Independently, as an identifier for certain credential models (like IETF SD-JWT VC)
Because keys can be used in different ways, use the api/key/v1 endpoint
to create and manage keys. When you want to use a key as an identifier,
create an identifier with the /api/identifier/v1 endpoint, referencing
an existing key with the POST call.
Related guide: Keys
DIDs
Decentralized Identifiers (DIDs) can be used as identifiers for certain
credential formats. Use the /api/identifier/v1 endpoint to create
and manage DIDs as an identifier.
Alternatively, the system has legacy DID endpoints at /api/did/v1 that
can be used to create and manage DIDs. When you use the POST method on
the DID endpoint, the system automatically creates an identifier.
Related guide: DIDs
Creating identifiers
To create an identifier, use the POST /identifier endpoint with your chosen identifier type. Each identifier consists of a name, organization, and the specific identifier configuration.
See the type-specific guides for detailed creation instructions:
- Certificates - For certificate and CA identifiers
- Keys - For key identifiers
- DIDs - For DID identifiers
Using identifiers
When you engage in an interaction, use the identifier appropriate to that interaction. You select your identifier at a different stage of interactions according to your role:
- Issuing
- Verifying
Reference your chosen identifier when you create a credential. When you issue that credential, your identifier will help the wallet holder know who you are via the trust management layer, and your identifier will be directly referenced in the issued credential.
Reference your chosen identifier when you create a proof request. When you share that request, your identifier will help the wallet holder know who you are via the trust management layer.
Identifier status
The status of all identifiers in the system is representated as either
ACTIVE or DEACTIVATED.
-
Keys and DIDs: all entities are active unless deactivated by the owner
-
Certificates: all entities are active unless none of the certificates in the chain are valid
Creating remote identifiers
You can create "remote" identifiers which are represented in the system
but not controlled by your Procivis One deployment. This is used when
adding entries to a trust list publication. Use
POST /api/identifier/v1/remote to create a remote identifier.
Auto-generated identifiers
For certain workflows, the system generates keys and identifiers on its own, without you making a direct call to create one. This includes:
- Accepting a credential issuance without specifying an identifier
- This is the recommended way to accept a credential offer
- See Autogenerate Keys for Credential Issaunce for more details
- Accepting or refreshing a batch credential
- The system generates a key for each batch item
- Remote keys and identifiers
- When you interact with others, the system creates their keys and identifiers in the database and marks these as auto-generated
- These keys and identifiers are both auto-generated and remote
- Creating a
did:webvh- When you create this DID, the system creates an Ed25519 key to generate a Data Integrity proof of the DID log
Filtering
For the /identifier and /key resources, use autogenerated and
isRemote parameters to identify on the detail endpoints:
GET /api/identifier/v1/{id}GET /api/key/v1/{id}
and to filter as a query parameter on the list endpoints:
GET /api/identifier/v1GET /api/key/v1
All keys and identifiers created by the system are autogenerated,
but some isRemote keys and identifiers can be created by users.
See Creating remote identifiers.