This repository is meant to demonstrate how the Decentralized Identity concepts can be demonstrated in an ecosystem where a supplier collects a digital credential from an LEI issuer, and leverages the credential to build a relationship (and further credentials) from an IBM Food Trust Network founder, the Trust Your Supplier Network and the IBM Food Trust Network.
Play with these samples to learn how to integrate the openssi-websdk into your own website.
For more information on the technology enabling these samples, take a look at our docs.
The code used to run the samples you played with above is included, in its entirety, in this repository. You can quickly build your own sample websites from the templates we've provided.
-
Visit your agent account management page and provision six new agents,
leiissuer
,gleif
,iftfounder
,tys
,iftnetwork
andacme
. Make sure the box marking the new agents as issuers is checked for each. -
Find your account url and record the passwords for all of the agents that you created. You can find this information by visiting your account dashboard, clicking on each agent, clicking the
Add Device
on theGeneral
page for the agent, and clicking onManual Entry
in theRegister Device
popup panel. -
Double check that all of your agents are capable of issuing credentials. You can determine this via one of two methods:
- Open the account dashboard, click on the agent, and check the
Agent Role
under theGeneral
page.Agent Name: leiissuer Agent DID: WpAsRjUvWNdJhgcpcir1TL Agent Role: Issuer
- Use curl to check the agent's
role
, making sure it is set toTRUST_ANCHOR
. Use this curl command to check the agent's role:curl -u <agent_name>:<agent_password> <account_url>/api/v1/info
- Open the account dashboard, click on the agent, and check the
-
If any of the agents are not issuers, use the following
curl
command to update their role:curl -u <account_admin_agent_name>:<account_admin_agent_password> -X PATCH \ <account_url>/api/v1/identities/<agent_name> \ -H 'Content-Type: application/json' \ -d '{ "role": "TRUST_ANCHOR" }'
-
Install...
Build all the sample apps as docker images using the following command:
docker-compose build
-
Setup your
.env
file with the necessary parameters to connect.$ cp .env_template .env # edit your .env file $ cat .env ACCOUNT_URL=https://my-account.example.com LEI_ISSUER_AGENT_NAME=leiissuer LEI_ISSUER_AGENT_PASSWORD=**** GLEIF_AGENT_NAME=gleif GLEIF_AGENT_PASSWORD=**** ACME_AGENT_NAME=acme ACME_AGENT_PASSWORD=**** IFT_FOUNDER_AGENT_NAME=IFTFounder IFT_FOUNDER_AGENT_PASSWORD=**** TYS_AGENT_NAME=tys TYS_AGENT_PASSWORD=**** IFT_NETWORK_AGENT_NAME=iftnetwork IFT_NETWORK_AGENT_PASSWORD=**** COUCHDB_USER_NAME=admin COUCHDB_USER_PASSWORD=****
The couchdb requires an admin password. Choose one and populate the field.
-
Start the issuers.
docker-compose up -d
-
Browse to the localhost urls for the various issuers.
-
Read the setup documentation for each app.
-
Browse to the CouchDB UI to see what the apps are writing to the database.
There are several different parameters that are used to make the sample apps do what they do. You'll probably need to add, remove, or tweak these values in order to transform the samples into your own proof-of-concept application. Here's a complete list of the existing configuration parameters:
-
DB_CONNECTION_STRING
: The Couchdb service endpoint that the sample app will use to store user records.http://${COUCHDB_USER_NAME}:${COUCHDB_USER_PASSWORD}@couchdb:5984
in the Docker Compose file is what allows the samples to use thecouchdb
container in the Docker Compose environment. -
DB_USERS
: The name of the Couchdb database where user records will be stored. If the database is not present, the app will attempt to create it at startup. ex.lei_issuer_db
-
ACCOUNT_URL
: The URL that is assigned to an account on our Public Agency and associated with a single IBMid. The issuer agent should be registered under this account url. ex.https://<account_uuid>.staging-cloud-agents.us-east.containers.appdomain.cloud/
-
AGENT_NAME
: The name of the issuer agent on the Public Agency account. ex.leiissuer
-
AGENT_PASSWORD
: The password associate with the issuer agent. -
FRIENDLY_NAME
: The friendly name to attach to connection offers, credential offers, verification requests, etc. If not provided, the issuer's agent name will be used. ex.Big Blue Credit Union
-
AGENT_LOG_LEVEL
: The log level to set for theopenssi-websdk
. Defaults toinfo
. -
AGENT_ADMIN_NAME
: The agent name for the first agent on your Public Agency account. These agent credentials are used to create the issuer agent if it doesn't already exist. Due to performance issues with creating agents, using these parameters is not recommended or supported. -
AGENT_ADMIN_PASSWORD
: The password for the admin agent. -
CARD_IMAGE_RENDERING
: The type of rendering that should be used for credentials. Credential rendering only comes into play when the issuer's credential schema hascard_front
and/orcard_back
attributes. The available options are described below:-
none
: No credential rendering is performed and the image attributes are left blank on issued credentials. You should stick to this option while in development to keep log messages to a reasonable size. -
static
: Static images are used to fill in thecard_front
andcard_back
attributes when issuing credentials. This mode is useful when you don't yet have a true credential rendering service and want to issue credentials with placeholder images. If this mode is selected, there are additional configuration parameters that must be set:-
STATIC_CARD_FRONT_IMAGE
: A path to an image file to be used for thecard_front
attribute when issuing credentials. This image should be small (<= 4KB) for performance reasons. -
STATIC_CARD_BACK_IMAGE
: A path to an image file to be used for thecard_back
attribute when issuing credentials. This image should be small (<= 4KB) for performance reasons.
-
-
branding_server
: Credential images will be rendered by a remote service. The service used by the hosted samples apps is not currently exposed to the public, but you could study the inputs to that service from the sample code and build a service of your own. If this mode is selected, you have to provide information about the service and credential templates that should be used:-
BRANDING_SERVER_ENDPOINT
: A URL toPOST
credential attributes to in order to receive rendered credential images. -
BRANDING_SERVER_FRONT_TEMPLATE
: The template to reference when asking the branding service forcard_front
images. -
BRANDING_SERVER_BACK_TEMPLATE
: The template to reference when asking the branding service forcard_back
images.
-
-
-
MY_URL
: The public URL for the app. Not currently required or used. -
CONNECTION_IMAGE_PROVIDER
: The method for attaching images to connection requests. These connection images are most useful when used in conjunction with theFRIENDLY_NAME
to help users identify the source of incoming connection offers. The available options are:-
none
: No images will be attached to connection offers. This is the mode that should be used when developing, in order to keep log messages to a manageable size. -
static
: A static image will be attached to any connection offers. Additional required parameters for this mode include:-
CONNECTION_ICON_PATH
: The path to an image file. This image should be (<= 4KB) for performance reasons.
-
-
-
SESSION_SECRET
: The secret to use when creating and managing sessions for the sample app. -
LOGIN_PROOF_PROVIDER
: The method for building verification requests for the verifiable credential login functionality. The available options are:-
none
: Users will not be able to log in using verifiable credentials. -
file
: A proof request described in a file will be used to permit users to log in to their accounts. Required parameters for this mode include:-
LOGIN_PROOF_PATH
: The path to a file describing a login proof request. See the example files used by the samples.
-
-
-
SIGNUP_PROOF_PROVIDER
: The method for verifying credentials when a user attempts to sign up for an account. The options are as follows:-
none
: Users will not be able to sign up for accounts. -
account
: Users will be able to sign up for an account using a driver's license and proof of employment. To modify the signup behavior to your use case, you'll have to write a provider of your own. This mode requires the following additional parameters:-
SIGNUP_ACCOUNT_PROOF_PATH
: The path to a JSON file describing a signup proof request. This file should describe attributes from a driver's license and attributes from an employment badge.
-
-
-
SCHEMA_TEMPLATE_PATH
: The path to a JSON file describing the credential schema for the issuer. This parameter is configured in the Docker image file for each sample issuer and describes the locations of the driver's license, employment badge, and bank account schema files. -
- TRUSTED_CONNECTIONS
: Agents listed here do not require connections to be manually accepted. Connection requests will automatically be accepted. If there are no trusted agents, this field should be left blank. Trusted agents should be listed in a comma separated string, one after the other with no spaces. As an example: ${lei-issuer},${ift-network}when
SIGNUP_PROOF_PROVIDER === 'account'
. -
ADMIN_API_USERNAME
: The username to use to protect the admin UI/API. If this andADMIN_API_PASSWORD
are left blank, the admin panel will not be protected by authentication. -
ADMIN_API_PASSWORD
: The password to use to protect the admin UI/API.