The EBSI decentralised network can be accessed via trusted EBSI nodes, each of which exposes its own publicly accessible endpoints. It's crucial that a Verifiable Credential isn't tied to a single node, or to a version of a service, as this would link the validity of the Verifiable Credential with the validity of the node or the version of a service it is exposing.
Uniform Resource Identifiers (URIs) RFC 3986 can be utilised to locate resources without tying them to a URI authority. This document outlines a URI scheme for identifying the content of Trust Registries, enabling all participants (Issuers, Holders, and Verifiers) to use their preferred EBSI node, whilst maintaining consistent identifiers.
EBSI URI Scheme
The EBSI URI scheme complies with RFC 3986, and employs the ABNF syntax and definitions from RFC 5234, and RFC 3986. All Verifiable Credentials that reference EBSI node resources must use the EBSI URI scheme instead of HTTP(S).
The EBSI URI Syntax ABNF Rules
ebsi-uri = "ebsi:" network service resource
network = 0*1( 1*unreserved ":" )
service = 1*( 1*unreserved ":" )
resource = path-abempty \[ "?" query \] \[ "#" fragment \]
Examples of ESBI URI syntax
ebsi:trusted-issuers-registry:/issuers/did:ebsi:zZeKyEJfUTGwajhNyNX928z/attributes/14bd0d26f3b05d825b91cede8b31068f4d3a3dfda7673e7d36ecfe9f9d402509
ebsi:pilot:did-registry:/identifiers/did:ebsi:zx23VhpbGYeqF2MRJk3HzPw
EBSI resource transformation rules
Only EBSI REST API resources may be transformed into EBSI URI.
The EBSI URI must not contain service versions in the service
component as it would lock the Verifiable Credential into that specific service version. The URI identified resource can be reached from multiple service versions, while the interpretation of the resource is same the content of the resource might differ. Resolvers of the EBSI URI must choose a version that they support.
Transforming EBSI URL into URI
The process of transforming an EBSI URL into a URI involves the following steps:
- Identify the Environment: Identify on which environment the
authority
belongs to and set it intonetwork
. This can be done with the help of Trusted Nodes List, which lists allapi_endpoint
's perenvironment
. Forproduction
environment thenetwork
shall be omitted. - Strip service version number: The
service
shall be the fullsegment
before the second/
, which might continue with a version number like/v4
. If a version number exists, it must be fully omitted. - Construct a URI: Concatenate the static
ebsi:
scheme withnetwork
,service
and rest of the URL without the leading and optional version number.
Transforming EBSI URI into URL
To help identifying the network
, service
and resource
, it is advisable to treat the value as a string and split it with /
. This results into two or more parts, where the first part contains colon concatenated ebsi:network:service
. The count of colons allows to identify if the network is for production (just one colon exists), or if some other environment (two colons exists).
The process of transforming an EBSI URI into a URL involves the following steps:
- Identify the Environment: The
network
component of EBSI URI is used to determine the environment. If thenetwork
is empty, it corresponds to theproduction
network. - Resolve the TNL: Once the correct environment is identified, the Trusted Nodes List shall be resolved. There will be a versioned TNL issued for each environment. The TNL contains
credentialSubject
with propertiesenvironment
andnodes
, where theenvironment
must match thenetwork
. - Select an API Endpoint: The
nodes
objects in the TNL can be used to select anyapi_endpoint
. It is advisable to pick multipleapi_endpoints
with a priority to cover any network issues. The chosen endpoint will containscheme
andauthority
parts of the URL. - Client driven service version: The
service
does not contain a service version number and clients must inject that if the specific service requires it. - Transform the URL: The
api_endpoint
is concatenated with and in order of:service
, client driven version suffix, and with everything contained in theresource
component.
This process ensures that the EBSI URI is correctly transformed into a valid EBSI node URL. It's important to note that the Trusted Nodes List is a crucial component in this transformation process as it provides the necessary mapping between the network
the EBSI domain used in the URL.
Examples
EBSI URI based:
ebsi:pilot:trusted-issuers-registry:issuers/did:ebsi:zZeKyEJfUTGwajhNyNX928z
TNL resolved node for Pilot environment:
https://api-pilot.ebsi.stsisp.ro/
After URL transformation:
https://api-pilot.ebsi.stsisp.ro/trusted-issuers-registry/v5/issuers/did:ebsi:zZeKyEJfUTGwajhNyNX928z