Verify an issued Verifiable Credential (VC)
Verify issued credentials using the BlockID SDK. Following the W3C Verifiable Credentials Data Model, developers can verify credentials from BlockID with 1Kosmos as the Issuer and the Driver's License data as the Identifier and Credential Subject.
The BlockID SDK allows users to verify credentials issued by 1Kosmos. Please see Request a Verifiable Credential (VC) for a Driver's License and Request a Verifiable Credential (VC) for an Employment Card for information on how to request an issued Verifiable Credential.
Prerequisites
Users first need to request a Verifiable Credential. Once a credential has been issued users can verify the credential data.
Please see the pages below for more information on how to request a verifiable credential for a Driver's License or Employment Card:
- Request a Verifiable Credential (VC) for a Driver's License
- Request a Verifiable Credential (VC) for an Employment Card
Verify an Issued Verifiable Credential (VC)
Parameters
dns
: tenant domain as shown in the dashboardcommunityName
: tenant community as shown in the dashboardlicenseKey
: tenant license key as shown in the dashboard
Request Format
All requests are plug-and-play, not copy-paste. Please ensure that you are replacing the parameters in the request format below with the actual values
Please use the following format outlined below to verify an issued Verifiable Credential:
- NodeJS
- Java
- PHP
- Add dependencies and set tenant info
const BIDTenant = require("blockid-nodejs-helpers/BIDTenant.js");
const BIDVerifiableCredential = require("blockid-nodejs-helpers/BIDVerifiableCredential.js");
const tenantInfo = {
dns: "<tenant dns>",
communityName: "<community name>",
licenseKey: "<user license key>",
};
- Add issued VC
let issuedVerifiableCredential = {
<"issued verified credential">
}
- Verify the issued VC
async function verifyCredential(issuedVerifiableCredential) {
let verifiedVCResponse = await BIDVerifiableCredential.verifyCredential(
tenantInfo,
issuedVerifiableCredential
);
console.log("verifiedVCResponse::::::", JSON.stringify(verifiedVCResponse));
return verifiedVCResponse;
}
verifyCredential(issuedVerifiableCredential);
- Set tenant info
BIDTenantInfo tenantInfo = new BIDTenantInfo("<tenant dns>", "<community name>", "<license key>");
- Add issued VC
Map<String, Object> issuedVerifiableCredential = <issued verified credential request object>;
- Verify the issued VC
BIDVerifiedResponse verifiedVCResponse = BIDVerifiableCredential.verifyCredential(tenantInfo, vc);
System.out.println("::::: verifiedVCResponse::" + verifiedVCResponse);
- Add dependencies and set tenant info
<?php
require_once("./BIDTenant.php");
require_once("./BIDVerifiableCredential.php");
$bidTenant = BIDTenant::getInstance();
$tenantInfo = array("dns" => "<tenant dns>", "communityName" => "<community>", "licenseKey" => "<license key>");
$keys = $bidTenant->getKeySet();
- Add issued VC
$documentVc = array(
"<issued verified credential request object>"
}
- Verify the issued VC
$verifiedVCResponse = BIDVerifiableCredential::verifyCredential($tenantInfo, $documentVc);
?>
Example Request
We've provided a complete example request below for reference:
The data shown here is from the Driver's License VC response Dummy information is provided in this example
- NodeJS
- Java
- PHP
const BIDTenant = require("blockid-nodejs-helpers/BIDTenant.js");
const BIDVerifiableCredential = require("blockid-nodejs-helpers/BIDVerifiableCredential.js");
let tenantInfo = {
dns: "blockid-trial.1kosmos.net",
communityName: "devx",
licenseKey: "9b074532-845b-4c75-ba3e-2b8950000000",
};
let issuedVerifiableCredential = {
"@context": [
"https://www.w3.org/2018/credentials/v1",
{
DriversLicenseCredential: "https://schema.org#DriversLicenseCredential",
documentId: "https://schema.org#documentId",
documentType: "https://schema.org#documentType",
firstName: "https://schema.org#firstName",
lastName: "https://schema.org#lastName",
dob: "https://schema.org#dob",
doe: "https://schema.org#doe",
doi: "https://schema.org#doi",
gender: "https://schema.org#gender",
street: "https://schema.org#street",
city: "https://schema.org#city",
state: "https://schema.org#state",
country: "https://schema.org#country",
zipCode: "https://schema.org#zipCode",
publicKey: "https://schema.org#publicKey",
},
"https://w3id.org/security/suites/ed25519-2020/v1",
],
id: "did:blockid:442ac157-4fb2-4dd3-99b3-ee4306deb5d1",
type: ["VerifiableCredential", "DriversLicenseCredential"],
issuer: { id: "did:blockid:dmv:USA:WA" },
issuanceDate: "2022-12-12T05:17:50.149Z",
expirationDate: "2027-06-20T00:00:00.000Z",
credentialSubject: {
documentId: "W599Z0673B",
documentType: "DL",
firstName: "CAMEMON",
lastName: "ABBA",
dob: "1963-06-20",
doe: "2027-06-20",
doi: "2021-06-05",
gender: "1",
street: "19821 NE 185TH ST",
city: "WOODINVILLE",
state: "WA",
country: "USA",
zipCode: "980779426",
id: "did:2a651b36-c582-46cb-995c-f60380104c70",
publicKey:
"aRnlolY2VlKAgOsdB2zmry0YzfiXYDt5GrCYyZIX4ITkNpMMuoTR/rKHuzDr7hKBhwBnAm+6LGnyuPSY/WK9XQ==",
},
proof: {
type: "Ed25519Signature2020",
created: "2022-12-12T05:17:50Z",
verificationMethod:
"did:key:blockid:z6MkvFNv22WzDetLgdzYidCFQJosD5Z9pDr9cmX7RtREuoji",
proofPurpose: "assertionMethod",
proofValue:
"z3sMWYFHUZeo11jysZMX2f2dVpubJ47Li6uJHYBUYCWR8UjCp3wszbfy6ZBmy9YBj4HAw2kF6zDyagqsUh43zZrRh",
},
statusUrl:
"https://blockid-trial.1kosmos.net/vcs/tenant/63627082d0b7e36525e281aa/community/63627302d0b7e36525e2828d/vc/did:blockid:442ac157-4fb2-4dd3-99b3-ee4306deb5d1/status",
};
async function verifyCredential(issuedVerifiableCredential) {
let verifiedVCResponse = await BIDVerifiableCredential.verifyCredential(
tenantInfo,
issuedVerifiableCredential
);
console.log("verifiedVCResponse::::::", JSON.stringify(verifiedVCResponse));
return verifiedVCResponse;
}
verifyCredential(issuedVerifiableCredential);
BIDTenantInfo tenantInfo = new BIDTenantInfo("blockid-trial.1kosmos.net", "devx", "9b074532-845b-4c75-ba3e-2b89598ad405");
Map<String, Object> contextData = new HashMap<>();
contextData.put("DriversLicenseCredential", "https://schema.org#DriversLicenseCredential");
contextData.put("documentId", "https://schema.org#documentId");
contextData.put("documentType", "https://schema.org#documentType");
contextData.put("firstName", "https://schema.org#firstName");
contextData.put("lastName", "https://schema.org#lastName");
contextData.put("dob", "https://schema.org#dob");
contextData.put("doe", "https://schema.org#doe");
contextData.put("doi", "https://schema.org#doi");
contextData.put("gender", "https://schema.org#gender");
contextData.put("street", "https://schema.org#street");
contextData.put("city", "https://schema.org#city");
contextData.put("state", "https://schema.org#state");
contextData.put("country", "https://schema.org#country");
contextData.put("zipCode", "https://schema.org#zipCode");
contextData.put("publicKey", "https://schema.org#publicKey");
List<Object> context = new ArrayList<Object>();
context.add("https://www.w3.org/2018/credentials/v1");
context.add(contextData);
context.add("https://w3id.org/security/suites/ed25519-2020/v1");
Map<String, Object> issuer = new HashMap<>();
issuer.put("id", "did:blockid:dmv:USA:WA");
Map<String, Object> credentialSubject = new HashMap<>();
credentialSubject.put("documentId", "W599Z0673B");
credentialSubject.put("documentType", "DL");
credentialSubject.put("firstName", "CAMEMON");
credentialSubject.put("lastName", "ABBA");
credentialSubject.put("dob", "1963-06-20");
credentialSubject.put("doe", "2027-06-20");
credentialSubject.put("doi", "2021-06-05");
credentialSubject.put("gender", "1");
credentialSubject.put("street", "19821 NE 185TH ST");
credentialSubject.put("city", "WOODINVILLE");
credentialSubject.put("state", "WA");
credentialSubject.put("country", "USA");
credentialSubject.put("zipCode", "980779426");
credentialSubject.put("id", "did:2d76124b-f85a-469e-8abe-a37a18927c0d");
credentialSubject.put("publicKey", "zGNlDjMb6XV7xLRZR6XF2XRdUd8eUN3ggn21ejyP5qbn6/q3LnXTBQZA2/4Y63y9/JbSGEsMVkyVH2/hW4YAVQ==");
Map<String, Object> proof = new HashMap<>();
proof.put("type", "Ed25519Signature2020");
proof.put("created", "2023-03-10T09:16:29Z");
proof.put("verificationMethod", "did:key:blockid:z6MkuVzvSAYanQX3uttMQjq9atr6KtMExNQFg1NFcn3cNKty");
proof.put("proofPurpose", "assertionMethod");
proof.put("proofValue", "z3e3YQFuiyMgM2zFHtE4jevWeHNLMg8NEkYNTxC4CsZtgAajmNH2HA4j2kgsJgJEZPTMFEv7SVXhMjYmUa7eaVAYk");
List<Object> type = new ArrayList<Object>();
type.add("VerifiableCredential");
type.add("DriversLicenseCredential");
Map<String, Object> vc = new HashMap<>();
vc.put("@context", context);
vc.put("id", "did:blockid:811d7d59-2f9a-4483-9cf0-745c35bca646");
vc.put("type", type);
vc.put("issuer", issuer);
vc.put("issuanceDate", "2023-03-10T09:16:29.129Z");
vc.put("expirationDate", "2027-06-20T00:00:00.000Z");
vc.put("credentialSubject", credentialSubject);
vc.put("proof", proof);
vc.put("statusUrl", "https://blockid-trial.1kosmos.net/vcs/tenant/63627082d0b7e36525e281aa/community/63627302d0b7e36525e2828d/vc/did:blockid:811d7d59-2f9a-4483-9cf0-745c35bca646/status");
BIDVerifiedResponse verifiedVCResponse = BIDVerifiableCredential.verifyCredential(tenantInfo, vc);
System.out.println("::::: verifiedVCResponse::" + verifiedVCResponse);
return verifiedVCResponse;
<?php
require_once("./BIDTenant.php");
require_once("./BIDVerifiableCredential.php");
$bidTenant = BIDTenant::getInstance();
$tenantInfo = array("dns" => "blockid-trial.1kosmos.net", "communityName" => "devx", "licenseKey" => "9b074532-845b-4c75-ba3e-2b8950000000");
$documentVc = array(
"@context" => array(
"https://www.w3.org/2018/credentials/v1",
array(
"DriversLicenseCredential" => "https://schema.org#DriversLicenseCredential",
"documentId" => "https://schema.org#documentId",
"documentType" => "https://schema.org#documentType",
"firstName" => "https://schema.org#firstName",
"lastName" => "https://schema.org#lastName",
"dob" => "https://schema.org#dob",
"doe" => "https://schema.org#doe",
"doi" => "https://schema.org#doi",
"gender" => "https://schema.org#gender",
"street" => "https://schema.org#street",
"city" => "https://schema.org#city",
"state" => "https://schema.org#state",
"country" => "https://schema.org#country",
"zipCode" => "https://schema.org#zipCode",
"publicKey" => "https://schema.org#publicKey"
),
"https://w3id.org/security/suites/ed25519-2020/v1"
),
"id" => "did:blockid:56a12d60-c83a-48c5-827b-73ffef20a1b6",
"type" => array(
"VerifiableCredential",
"DriversLicenseCredential"
),
"issuer" => array(
"id" => "did:blockid:dmv:USA:WA"
),
"issuanceDate" => "2023-02-03T06:56:42.427Z",
"expirationDate" => "2027-06-20T00:00:00.000Z",
"credentialSubject" => array(
"documentId" => "W599Z0673B",
"documentType" => "DL",
"firstName" => "CAMEMON",
"lastName" => "ABBA",
"dob" => "1963-06-20",
"doe" => "2027-06-20",
"doi" => "2021-06-05",
"gender" => "1",
"street" => "19821 NE 185TH ST",
"city" => "WOODINVILLE",
"state" => "WA",
"country" => "USA",
"zipCode" => "980779426",
"id" => "did:63dcb02508a8e",
"publicKey" => "zGNlDjMb6XV7xLRZR6XF2XRdUd8eUN3ggn21ejyP5qbn6/q3LnXTBQZA2/4Y63y9/JbSGEsMVkyVH2/hW4YAVQ=="
),
"proof" => array(
"type" => "Ed25519Signature2020",
"created" => "2023-02-03T06:56:42Z",
"verificationMethod" => "did:key:blockid:z6MkpsmsefXGKzeLR9JhpUzcoC6CuaNNnQKGLEniUiasus3b",
"proofPurpose" => "assertionMethod",
"proofValue" => "z4TKisLZubneqFLEQ7JSW5VbDxwhxjrkGZg3k5Ssav5NdKxj9feiEzE5X7rwepXzAmQyfnFKYJcUJp7B8nnyaY6S8"
),
"statusUrl" => "http://localhost:1342/tenant/63627082d0b7e36525e281aa/community/63627302d0b7e36525e2828d/vc/did:blockid:56a12d60-c83a-48c5-827b-73ffef20a1b6/status"
);
$verifiedVCResponse = BIDVerifiableCredential::verifyCredential($tenantInfo, $documentVc);
?>
Server Responses
Please review the responses below for expected output after verifying an issued VC. A successful request will include a "verified:true" response object.
Responses include dummy data as an example of a typical response
- 200 Successful Verification
- 200 Failed Verification
- 400
- 401
{
"verified": true,
"status": {
"subject": {
"did": "did:2a651b36-c582-46cb-995c-f60380104c70",
"publicKey": "aRnlolY2VlKAgOsdB2zmry0YzfiXYDt5GrCYyZIX4ITkNpMMuoTR/rKHuzDr7hKBhwBnAm+6LGnyuPSY/WK9XQ=="
},
"type": [
"VerifiableCredential",
"DriversLicenseCredential"
],
"_id": "6396b97e028c790013b4c144",
"vcID": "did:blockid:442ac157-4fb2-4dd3-99b3-ee4306deb5d1",
"tenantId": "63627082d0b7e36525e281aa",
"communityId": "63627302d0b7e36525e2828d",
"proof": {
"type": "Ed25519Signature2020",
"created": "2022-12-12T05:17:50Z",
"verificationMethod": "did:key:blockid:z6MkvFNv22WzDetLgdzYidCFQJosD5Z9pDr9cmX7RtREuoji",
"proofPurpose": "assertionMethod",
"proofValue": "z3sMWYFHUZeo11jysZMX2f2dVpubJ47Li6uJHYBUYCWR8UjCp3wszbfy6ZBmy9YBj4HAw2kF6zDyagqsUh43zZrRh"
},
"issueTS": 1670822270,
"expiryTS": 1813449600,
"status": "issued",
"issuer": {
"id": "did:blockid:dmv:USA:WA"
}
}
}
{
"verified": false,
"status": {
"subject": {
"did": "did:2a651b36-c582-46cb-995c-f60380104c70",
"publicKey": "aRnlolY2VlKAgOsdB2zmry0YzfiXYDt5GrCYyZIX4ITkNpMMuoTR/rKHuzDr7hKBhwBnAm+6LGnyuPSY/WK9XQ=="
},
"type": [
"VerifiableCredential",
"DriversLicenseCredential"
],
"_id": "6396b97e028c790013b4c144",
"vcID": "did:blockid:442ac157-4fb2-4dd3-99b3-ee4306deb5d1",
"tenantId": "63627082d0b7e36525e281aa",
"communityId": "63627302d0b7e36525e2828d",
"proof": {
"type": "Ed25519Signature2020",
"created": "2022-12-12T05:17:50Z",
"verificationMethod": "did:key:blockid:z6MkvFNv22WzDetLgdzYidCFQJosD5Z9pDr9cmX7RtREuoji",
"proofPurpose": "assertionMethod",
"proofValue": "z3sMWYFHUZeo11jysZMX2f2dVpubJ47Li6uJHYBUYCWR8UjCp3wszbfy6ZBmy9YBj4HAw2kF6zDyagqsUh43zZrRh"
},
"issueTS": 1670822270,
"expiryTS": 1813449600,
"status": "issued",
"issuer": {
"id": "did:blockid:dmv:USA:WA"
}
}
}
{
"error_code": 400,
"message":"Invalid Request"
}
{
"error_code": 401,
"message":"Unauthorized"
}