Tổng quan
Môi trường SSI
Giới thiệu
Hướng dẫn SSI theo vai trò. Đi từng bước qua ba vai trò, xem ranh giới dữ liệu và so sánh ví dụ giữa các SDK web, server và mobile.
SSI trở nên dễ hiểu hơn khi trách nhiệm của từng vai trò được phân định rõ. Bên phát hành tạo thực chứng, bên nắm giữ lưu VC trong kho bảo mật trên điện thoại, còn bên xác minh yêu cầu và kiểm tra bản trình bày thực chứng (VP).
Lưu ý quan trọng
[Bên phát hành kiểm tra và ký VC] -> [Bên nắm giữ lưu VC trên thiết bị di động] -> [Người dùng đồng ý và tạo VP] -> [Bên xác minh kiểm tra VP]
Khái niệm chính
Bên phát hành
Kiểm tra dữ liệu nguồn, ký thực chứng và gửi đề nghị nhận VC qua DIDComm.
Bên nắm giữ
Lưu thực chứng trong một kho bảo mật duy nhất trên điện thoại và quyết định khi nào chia sẻ thuộc tính.
Bên xác minh
Chỉ yêu cầu những thuộc tính cần thiết rồi kiểm tra chữ ký, giá trị thử thách và trạng thái thực chứng.
Sổ đăng ký DID
Đăng tải và phân giải tài liệu DID qua CertNet, did:web, ION hoặc sổ đăng ký nội bộ.
Ranh giới thực chứng
Giới thiệu
Identra phân tách rõ trách nhiệm: bên phát hành tạo VC, điện thoại của bên nắm giữ là kho duy nhất, còn bên xác minh chỉ yêu cầu và xác minh VP.
Quy tắc quan trọng nhất
Nền tảng web và máy chủ không bao giờ nhận SDK dành cho bên nắm giữ. Các môi trường này không được nhập, xuất hoặc sao lưu VC của người dùng.
Sổ đăng ký DID không bị giới hạn ở CertNet
CertNet là nhà cung cấp mặc định trong môi trường thử nghiệm. Cùng một SDK có thể công bố và phân giải tài liệu DID trên CertNet, did:web, ION hoặc sổ đăng ký nội bộ tùy chính sách triển khai.
Lưu ý quan trọng
SDK minh họa, chưa dùng trong môi trường thực tế. Tên gói và giao diện trong phần Tổng quan này chỉ là tài liệu mẫu.
Phát hành thực chứng
Bên phát hành
BƯỚC 01 trong 03 bước của luồng SSI theo vai trò.
Ai tạo thực chứng và đoạn mã chạy ở đâu?
Tổ chức phát hành kiểm tra dữ liệu, ký VC và gửi cho người dùng. Họ có thể tích hợp trên web nội bộ, máy chủ hoặc ứng dụng.
Ranh giới dữ liệu và khóa
Khóa ký của tổ chức phải được bảo vệ phù hợp với môi trường chạy, ưu tiên HSM trên máy chủ.
Bảng tham chiếu
| Môi trường chạy | SDK ví dụ | Khi nào dùng |
|---|---|---|
| Web client | @identra/web với Browser JavaScript hoặc TypeScript | Công cụ phát hành nội bộ có chính sách khóa được kiểm soát |
| Server | @identra/node hoặc identra-go | Dịch vụ ký được bảo vệ bằng HSM hoặc KMS được quản lý |
| Ứng dụng mobile | @identra/react-native, Android SDK hoặc iOS SDK | Ứng dụng phát hành nội bộ được quản lý |
Các bước của luồng
- Khởi tạo: Khởi tạo SDK cho môi trường đang chạy.
- Tạo DID: Tạo hoặc nạp DID của bên phát hành trên DID registry đã chọn.
- Ký VC: Ký thực chứng cho DID của người nhận.
- Gửi đề nghị: Gửi đề nghị cấp thực chứng qua kết nối DIDComm.
Ví dụ mã
1. Chọn môi trường chạy
2. Chọn SDK và ngôn ngữ
import { Identra } from '@identra/web';
// SDK minh họa, chưa dùng trong môi trường thực tế.
const identra = new Identra({
environment: 'sandbox',
didRegistry: {
defaultProvider: 'certnet',
providers: ['certnet', 'did:web', 'ion', 'internal-ledger']
},
mediatorUrl: 'https://mediator.sandbox.identra.dev'
});
// Chạy ở phía bên phát hành: web, máy chủ hoặc ứng dụng nội bộ.
const issuer = await identra.issuer.create({
did: 'did:identra:university',
keyProtection: 'platform-secure-storage'
});
// Tài liệu DID có thể được công bố lên nhiều sổ đăng ký; CertNet chỉ là nhà cung cấp mặc định trong môi trường thử nghiệm.
await issuer.publishDidDocument({
registries: ['certnet', 'did:web']
});
const credential = await issuer.issue({
// DID của bên nắm giữ được lấy sau khi thiết lập kết nối hoặc tra cứu từ hệ thống nghiệp vụ.
subjectDid: 'did:identra:holder',
type: 'UniversityDegree',
claims: { degree: 'Information Technology', graduationYear: 2026 }
});
// Thực chứng không đi qua mã QR; mã QR chỉ dùng để khởi tạo kết nối DIDComm.
await issuer.didcomm.sendCredentialOffer({ credential, connectionId });Chi tiết
DID của bên nắm giữ được lấy sau khi thiết lập kết nối hoặc tra cứu từ hệ thống nghiệp vụ. Thực chứng không đi qua mã QR; mã QR chỉ dùng để khởi tạo kết nối DIDComm.
Xác minh thực chứng
Bên xác minh
BƯỚC 03 trong 03 bước của luồng SSI theo vai trò.
Bên xác minh tin vào VP bằng cách nào?
Bên xác minh nhận VP, lấy DID của bên nắm giữ và bên phát hành, phân giải tài liệu DID qua nhà cung cấp sổ đăng ký tương ứng như CertNet, did:web hoặc ION rồi kiểm tra chữ ký, mã thử thách và trạng thái thu hồi.
Ranh giới dữ liệu và lưu trữ
Bên xác minh có thể chạy trên web, máy chủ hoặc ứng dụng nhưng không được lưu VC như bên nắm giữ.
Hướng dẫn
- Tạo yêu cầu: Tạo yêu cầu trình xuất kèm mã thử thách chống phát lại.
- Hiển thị QR: Hiển thị mã QR chứa lời mời DIDComm.
- Nhận VP: Nhận VP qua kết nối vừa thiết lập.
- Phân giải và xác minh: Phân giải DID của bên nắm giữ và bên phát hành qua nhà cung cấp sổ đăng ký rồi xác minh.
Ví dụ mã
1. Chọn môi trường chạy
2. Chọn SDK và ngôn ngữ
import { Identra } from '@identra/web';
// SDK minh họa, chưa dùng trong môi trường thực tế.
const identra = new Identra({
environment: 'sandbox',
didRegistry: {
defaultProvider: 'certnet',
providers: ['certnet', 'did:web', 'ion', 'internal-ledger']
},
mediatorUrl: 'https://mediator.sandbox.identra.dev'
});
// Chạy ở phía bên xác minh: web, máy chủ hoặc ứng dụng.
const verifier = await identra.verifier.create({
did: 'did:identra:jobs-example'
});
const request = await verifier.createPresentationRequest({
credentialType: 'UniversityDegree',
// Chỉ yêu cầu những thuộc tính cần thiết để giảm lượng dữ liệu bên nắm giữ phải chia sẻ.
fields: ['degree', 'graduationYear'],
challenge: crypto.randomUUID()
});
const qrDataUrl = await verifier.createQr(request);
const presentation = await verifier.didcomm.waitForPresentation(request.id);
const result = await verifier.verify({
presentation,
// SDK phân giải tài liệu DID từ nhà cung cấp sổ đăng ký tương ứng.
resolveDid: (did) => identra.didRegistry.resolveDidDocument(did),
checkCredentialStatus: true
});
if (result.verified) grantAccess();Trang này có hữu ích không?
Cho chúng tôi biết ý kiến của bạn để cải thiện tài liệu.