LogoLogo
ProductsCommunityGitHubShare Feedback
Wallet Kit
Wallet Kit
  • What is the Wallet Kit?
    • Introduction
    • Transition To The Community Stack
    • Self-Sovereign Identity
      • SSI | Basics
      • Technology & Concepts
    • Wallet Kit
      • Wallet Kit | Basics
        • Overview
        • Functionality
      • Architecture
    • Issuer & Verifier Portals
      • Functionality
      • Architecture
  • Getting started
    • Quick Start
    • CLI | Command Line Interface
    • REST APIs
      • Issuer Configuration
      • Credential Templates
      • Credential Issuance
      • Credential Verification
    • Dependency (JVM)
    • Frontend
    • Public deployments
    • Demo
    • Build
      • Docker Build
        • Docker
      • Local Build
  • Configuration and Setup
    • Wallet backend setup
    • Issuer portal setup
    • Verifier portal setup
  • Concepts
    • OpenID Connect (OIDC)
      • OIDC for Credential Issuance
      • OIDC for Verifiable Presentations (SIOP)
      • Issuance via OIDC for Verifiable Presentations (SIOP)
  • Ecosystems
    • IOTA
      • Tutorials
        • Login With IOTA
  • Community
    • Discord
    • Twitter
    • Newsletter
    • GitHub Discussions
  • DEVELOPER RELATIONS
    • Roadmap
    • Contribute
    • Share Feedback
    • Contact
  • Product Editions
    • Open Source | Always Free
    • Enterprise
    • Cloud Platform
Powered by GitBook
On this page
  • Data root
  • Issuer portal backend configuration
  • External URLs
  • Issuer DID
  • Known wallets
  • Configuration example
  • Issuer portal backend data storage
  • Binding address and port
  • Initializing issuer portal backend
  • EBSI/ESSIF anchored issuer DID
  • DNS/Web anchored issuer DID
  • Importing an external DID and key

Was this helpful?

Export as PDF
  1. Configuration and Setup

Issuer portal setup

PreviousWallet backend setupNextVerifier portal setup

Last updated 1 month ago

Was this helpful?

To setup the issuer portal backend a few things may need to be considered and some configuration may be required, depending on your situation.

Data root

Since the issuer portal backend is implemented in the same service as the wallet backend, refer to the wallet backend setup section for .

Issuer portal backend configuration

The configuration of the issuer portal backend can be adapted, by modifying the file

config/issuer-config.json

External URLs

Configure the URLs via which the issuer portal UI and backend API will be reachable from an external source, e.g. a web browser, or the wallet backend requesting credential issuance:

{
  "issuerUiUrl": "https://issuer.walt-test.cloud",
  "issuerApiUrl": "https://issuer.walt-test.cloud/issuer-api",
[...]
}

Issuer DID

Configure the DID used to sign issued credentials. Refer to for options to initialize a DID for the backend.

By default, the issuer backend will choose the first available DID in its data store. To enforce, which DID to use, set it in the issuer-config.json like so:

{
  [...]
  "issuerDid": "did:key:z6MkpooraZxqm99KwnMiRMzrVibVN5o5ow1BesLGFaG953RS",
  [...]
}

Known wallets

The issuer portal supports an issuance flow, that is triggered directly from the issuer portal into the SSI wallet. To support this kind of issuance flow, you need to configure the known wallets and how to connect to them:

This example shows the known wallet configuration for the walt.id web wallet, in issuer-config.json:

{
[...]
  "wallets": {
    "walt.id": {
      "id": "walt.id",
      "url": "https://wallet.walt-test.cloud",
      "presentPath": "api/wallet/siopv2/initPresentation/",
      "receivePath" : "api/wallet/siopv2/initPassiveIssuance/",
      "description": "walt.id web wallet"
    }
  }
}

Configuration example

Here's a complete example for the issuer-config.json:

{
  "issuerUiUrl": "https://issuer.walt-test.cloud",
  "issuerApiUrl": "https://issuer.walt-test.cloud/issuer-api",
  "issuerDid": "did:key:z6MkpooraZxqm99KwnMiRMzrVibVN5o5ow1BesLGFaG953RS",
  "wallets": {
    "walt.id": {
      "id": "walt.id",
      "url": "https://wallet.walt-test.cloud",
      "presentPath": "api/wallet/siopv2/initPresentation/",
      "receivePath" : "api/wallet/siopv2/initPassiveIssuance/",
      "description": "walt.id web wallet"
    }
  }
}

Issuer portal backend data storage

Data, such as dids and keys, are currently stored in the issuer subfolder, like so:

<data_root>/data/issuer

In the future various options to configure the issuer data storage may be provided.

Binding address and port

Initializing issuer portal backend

To set up an issuer portal backend, it is crucial to define the DID by which issued credentials should be signed.

The wallet backend intergrates a subset of commands from the walt.id SSI Kit, to accomplish simple key and DID management.

For simplicity the examples will use the command placeholder

waltid-walletkit

The actual command depends on your execution environment, in the case of the docker container this could translate to something like:

docker run -p 8080:8080 -e WALTID_DATA_ROOT=/data -v $PWD:/data waltid/walletkit

To manage keys and dids for the issuer, use the config command, with the command flag --as-issuer, or its shortcut -i:

waltid-walletkit config --as-issuer --help

The following examples show typical use cases and scenarios of setting up an issuer backend for various ecosystems.

EBSI/ESSIF anchored issuer DID

Create a new _Secp256k1_** key**

waltid-walletkit config --as-issuer key gen -a Secp256k1

Sample output

[...]
Key "528435baadfd49559b1fe141f43bd258" generated.

Create a new _did:ebsi_

waltid-walletkit config --as-issuer did create -m ebsi -k 528435baadfd49559b1fe141f43bd258

Sample output

[...]
DID created: did:ebsi:zetpTbH5RwCcQVAfAXGFKyF
[...]

Register the DID on the EBSI blockchain

echo "[bearer-token from above mentioned onboarding page]" > bearer-token.txt

waltid-walletkit config --as-issuer essif onboard --did did:ebsi:zetpTbH5RwCcQVAfAXGFKyF bearer-token.txt
waltid-walletkit config --as-issuer essif auth-api --did did:ebsi:zetpTbH5RwCcQVAfAXGFKyF
waltid-walletkit config --as-issuer essif did register --did did:ebsi:zetpTbH5RwCcQVAfAXGFKyF

Set the _issuerDid_** config property**

issuer-config.json

{
  [...]
  "issuerDid": "did:ebsi:zetpTbH5RwCcQVAfAXGFKyF",
  [...]
}

DNS/Web anchored issuer DID

Create a new _did:web_

Run the following command, replacing the _domain** (-d) and **path_** (-p) arguments**, matching your web server on which you can publish the did document:

waltid-walletkit config --as-issuer did create -m web -d "walt.id" -p "my-issuer"

Observe the command output:

[...]
Results:

DID created: did:web:walt.id:my-issuer

DID document (below, JSON):

{
    "assertionMethod" : [
        "did:web:walt.id:my-issuer#f72884caa5d641aca30353ce65b2bc07"
    ],
    "authentication" : [
        "did:web:walt.id:my-issuer#f72884caa5d641aca30353ce65b2bc07"
    ],
    "@context" : "https://www.w3.org/ns/did/v1",
    "id" : "did:web:walt.id:my-issuer",
    "verificationMethod" : [
        {
            [...]
        }
    ]
}

Install this did:web at: https://walt.id/.well-known/my-issuer/did.json

Publish the DID document on the web server

Copy the DID document from the above command output, and publish it on your web server, on the path printed by that same command.

The DID document in this example should be resolvable from this URL:

https://walt.id/.well-known/my-issuer/did.json

The domain and path will be different in your case.

Set the _issuerDid_** config property**

issuer-config.json

{
  [...]
  "issuerDid": "did:web:walt.id:my-issuer",
  [...]
}

Importing an external DID and key

If you want to use an existing DID, that you own, for issuance, you can import it, given that you have access to the associated private key and DID document. If the DID is resolvable through the standard mechanism of the given DID method, only the private key is required.

The private key should be available in JWK or PEM format.

Import private key from JWK file

In this example, we import a private key from the file priv.jwk:

waltid-walletkit config --as-issuer key import priv.jwk

Output

[...]
Results:

Key "e18e5427f7da48ce813e27ab3e5f66ad" imported.

Now we can import the DID, either by importing the DID document from a local JSON file, OR by resolving it from a public registry or likewise, depending on the DID method.

Option 1: Resolve and import DID

In this example, we import a did:key, for which the DID document can be derived without external DID registry, and associate it with the previously imported key ID:

waltid-walletkit config --as-issuer did import -k e18e5427f7da48ce813e27ab3e5f66ad -d did:key:z6MkovU6u4EpvADNVtxL21T9ocYzK8BDKyXtArskfbZkGsNe

Option 2: Import DID document

In case, the DID document cannot be resolved or derived, we can also import the DID document from a local JSON file:

waltid-walletkit config --as-issuer did import -k e18e5427f7da48ce813e27ab3e5f66ad -f /path/to/did.json

The relevant output for both import options, will look similar to this:

Output

[...]
DID imported: did:key:z6MkovU6u4EpvADNVtxL21T9ocYzK8BDKyXtArskfbZkGsNe

Set the _issuerDid_** config property**

issuer-config.json

{
  [...]
  "issuerDid": "did:key:z6MkovU6u4EpvADNVtxL21T9ocYzK8BDKyXtArskfbZkGsNe",
  [...]
}

Since the issuer portal backend is implemented in the same service as the wallet backend, refer to the wallet backend setup section for .

Get the bearer token from , and then execute these commands:

Also refer to

Also refer to

Also refer to

https://app-pilot.ebsi.eu/users-onboarding/v2
Issuer DID configuration
Issuer DID configuration
Issuer DID configuration
Initializing issuer portal backend
details
details