Page cover image

Decentralized Identity Manager: Access Control and Management

1.1 Decentralized Identity Manager Overview

Decentralized Identity Manager (DIM) is a robust tool for managing and verifying digital identities on the blockchain. Designed to enhance privacy, security, and control, it allows users to manage digital identities with secure access permissions, authenticate users, and control data-sharing across decentralized applications (dApps).

This guide provides an overview of access control and identity management functions and includes sample code for managing decentralized identities (DIDs) using blockchain-based methods.


1.2 Code for Digital Identity Management on Blockchain

Prerequisites

  • Node.js and npm installed.

  • The following libraries installed:

npm install ethr-did did-jwt vc-js web3

1.2.1 Creating a Decentralized Identifier (DID)

const { EthrDID } = require('ethr-did');
const Web3 = require('web3');

// Initialize Web3 provider
const web3 = new Web3('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID');

// User's Ethereum private key
const privateKey = '0xYOUR_PRIVATE_KEY';
const publicKey = web3.eth.accounts.privateKeyToAccount(privateKey).address;

// Create a new DID for the user
const did = new EthrDID({ identifier: publicKey, privateKey });

console.log("User's DID:", did.did);

Output

User's DID: did:ethr:0xYourEthereumAddress

1.2.2 Issuing a Verifiable Credential (VC)

const { Ed25519KeyPair } = require('crypto-ld');
const { VerifiableCredential, signCredential } = require('vc-js');

// Generate a sample credential
const credential = {
  "@context": ["https://www.w3.org/2018/credentials/v1"],
  "id": "https://example.com/credentials/1872",
  "type": ["VerifiableCredential", "IdentityCredential"],
  "issuer": did.did,
  "issuanceDate": new Date().toISOString(),
  "credentialSubject": {
    "id": did.did,
    "name": "Alice",
    "email": "alice@example.com",
    "accessLevel": "Admin"
  }
};

// Sign the credential with the DID
const signedCredential = await signCredential({
  credential,
  suite: new Ed25519KeyPair({
    controller: did.did,
    privateKey
  })
});

console.log("Signed Credential:", JSON.stringify(signedCredential, null, 2));

1.2.3 Verifying Identity and Access Permissions

const { verifyCredential } = require('vc-js');

// Verify the signed credential
const isValid = await verifyCredential({
  credential: signedCredential,
  suite: new Ed25519KeyPair({
    controller: did.did,
    privateKey
  })
});

if (isValid) {
  console.log("Credential is valid, user identity confirmed.");
} else {
  console.log("Credential verification failed.");
}

1.2.4 Access Control Example: Identity-Based Resource Access

const accessControl = (credential, requiredLevel) => {
  const userAccessLevel = credential.credentialSubject.accessLevel;
  if (userAccessLevel === requiredLevel) {
    console.log("Access granted.");
  } else {
    console.log("Access denied. Insufficient permissions.");
  }
};

// Example use
accessControl(signedCredential, 'Admin');

Output

Access granted.

1.3 API for Identity Management and Integration

1.3.1 POST /identity/create

Request

curl -X POST "https://api.capsurelabs.com/identity/create" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"user_id": "12345"}'

1.3.2 POST /identity/issue_credential

Request

curl -X POST "https://api.capsurelabs.com/identity/issue_credential" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"did": "did:ethr:0xYourEthereumAddress", "credential_data": {"name": "Alice", "accessLevel": "Admin"}}'

1.3.3 POST /identity/verify

curl -X POST "https://api.capsurelabs.com/identity/verify" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"did": "did:ethr:0xYourEthereumAddress", "credential": <signedCredential>}'

Last updated