Layanan Kredensial
Modul Credential menyediakan alat untuk membuat, menerbitkan, mencabut, dan mengelola Kredensial yang Dapat Diverifikasi (VC) di blockchain IDCHAIN.
Ini menyederhanakan proses penerbitan kredensial sesuai W3C yang terkait dengan DID dan Skema Dokumen UID.
Ringkasan
Layanan Kredensial memungkinkan pengembang untuk:
- Minta pengesahan (siapkan kredensial yang tidak ditandatangani untuk ditandatangani oleh pengesahan).
- Keluarkan kredensial (tanda tangani dan simpan secara on-chain).
- Cabut kredensial (tandai sebagai tidak valid).
- Kelola ID kredensial dan berinteraksi dengan
publicCredentials.
Semua kredensial yang dikeluarkan mengikuti format VC IDCHAIN (UidCredentialV1) untuk interoperabilitas di seluruh aplikasi.
Referensi API
Minta Pengesahan
Credential.requestAttestation(claimerDid, uidDocument, content, attesterDid): Janji<UnsignedVc>
Membuat Kredensial Dapat Diverifikasi (VC) yang tidak ditandatangani untuk pengklaim, siap untuk ditandatangani oleh penguji.
Parameter:
claimerDid(Uid): DID URI subjek kredensial (pengguna/pengklaim).uidDocument(IUidDocument): Dokumen skema untuk kredensial.content(object): Bidang data untuk subjek kredensial.attesterDid(Uid): DID URI attester (penerbit).
Pengembalian:
UnsignedVc: Objek kredensial yang dapat diverifikasi tanpa bukti.
Contoh:
const unsignedVc = await Credential.requestAttestation(
userDid.uri,
schema,
{
NIK: "123456789",
Nama: "John Doe",
TTL: "2001-01-01",
status: "Married by choice",
},
attesterDid.uri
);
console.log("Unsigned Credential:", unsignedVc);
Mengeluarkan Pengesahan
Credential.issueAttestation(credential, submitterDid, submitterAccount): Promise<VerifiableCredential>
Menandatangani dan menerbitkan Kredensial yang Dapat Diverifikasi pada blockchain.
Parameter:
credential(UnsignedVc): Kredensial yang tidak ditandatangani untuk diterbitkan.submitterDid(UidDocument): Dokumen DID attester.submitterAccount(UidKeyringPair): Akun Blockchain diotorisasi untuk ditandatangani.
Pengembalian:
VerifiableCredential: Kredensial yang ditandatangani sepenuhnya dan dapat diverifikasi.
Contoh:
const vc = await Credential.issueAttestation(
unsignedVc,
attesterDid,
accountAttester
);
console.log("Issued Credential:", vc);
Cabut Kredensial
Credential.revokeCredential(verifier, verifierAccount, credential): Promise<VerifiableCredential>
Menandai kredensial sebagai dicabut di blockchain.
Parameter:
verifier(UidDocument): DID Dokumen pencabut (penerbit).verifierAccount(UidKeyringPair): Akun Blockchain dari verifikator.credential(Kredensial yang Dapat Diverifikasi): Kredensial yang akan dicabut.
Pengembalian:
VerifiableCredential: Kredensial yang diperbarui dengan status dicabut.
lemparan:
Error("Gagal mencabut kredensial: ...") jika operasi rantai gagal.
Contoh:
await Credential.revokeCredential(attesterDid, accountAttester, vc);
console.log("Credential revoked");
Cabut Kredensial Berdasarkan ID
Credential.revokeCredentialById(verifier, verifierAccount, credentialID): Janji<VerifyingCredential>
Menandai kredensial sebagai dicabut di blockchain.
Parameter:
verifier(UidDocument): DID Dokumen pencabut (penerbit).verifierAccount(UidKeyringPair): Akun Blockchain dari verifikator.credentialID(idchain:${string}): dapat diperoleh daricredentialStatusdari verifiedCredential
Pengembalian:
VerifiableCredential: Kredensial yang diperbarui dengan status dicabut.
lemparan:
Error("Gagal mencabut kredensial: ...") jika operasi rantai gagal.
Contoh:
await Credential.revokeCredentialById(attesterDid, accountAttester, `idchain:${...}`);
console.log("Credential revoked");
Contoh Penggunaan Lengkap
import {
Credential,
UidDocumentSchema,
AccountService,
DidService,
fromProperties,
Uid,
UidDocument,
} from "@idchain-sdk";
async function issueAndRevokeCredential() {
// Hasilkan akun dan DID
const { mnemonic: attesterMnemonic, account: attester } =
await AccountService.generateAccount();
const { mnemonic: userMnemonic, account: user } =
await AccountService.generateAccount();
const attesterDid = await DidService.createDidAttester(
attester,
{
authentication: { publicKey: attester.publicKey, type: "ed25519" },
keyAgreement: { publicKey: attester.publicKey, type: "x25519" },
assertionMethod: { publicKey: attester.publicKey, type: "ed25519" },
capabilityDelegation: { publicKey: attester.publicKey, type: "ed25519" },
},
async ({ data }) => ({
keyType: "ed25519",
signature: attester.sign(data),
})
);
const userDidInfo = await DidService.createDidClaimer(
user,
{
authentication: { publicKey: user.publicKey, type: "ed25519" },
},
async ({ data }) => ({
keyType: "ed25519",
signature: user.sign(data),
})
);
// Membuat dan menyimpan skema
const schema = fromProperties(
"KTP Schema",
{
NIK: { type: "string" },
Nama: { type: "string" },
TTL: { type: "string" },
status: { type: "string" },
},
"V1"
);
await UidDocumentSchema.storeSchema(attester, attesterDid.uri, schema);
// Minta kredensial
const unsignedVc = await Credential.requestAttestation(
userDidInfo.document.uri as Uid,
schema,
{ NIK: "987654321", Nama: "Alice", TTL: "1998-05-10", status: "Single" },
attesterDid.uri as Uid
);
// Terbitkan kredensial
const vc = await Credential.issueAttestation(
unsignedVc,
attesterDid as UidDocument,
attester
);
console.log("Credential issued:", vc);
// Cabut kredensial
await Credential.revokeCredential(attesterDid as UidDocument, attester, vc);
console.log("Credential revoked");
}
Penanganan Kesalahan
- Kegagalan pencabutan: Melempar dengan rincian dari blockchain (misalnya, jika hash kredensial tidak valid).
- DID yang belum terselesaikan: Setiap operasi DID (diterbitkan atau dicabut) akan gagal jika DID tidak dapat diselesaikan.
- Kesalahan tanda tangan: Akan muncul jika signersForDid tidak dapat menghasilkan tanda tangan yang valid.
Modul Terkait
- Layanan Verifikasi: Verifikasi kredensial dan presentasi yang dikeluarkan.
- Layanan Skema Dokumen UID: Tentukan skema yang digunakan oleh kredensial.