Başlarken
Solidus kimlik doğrulamasını uygulamanıza 5 dakikada entegre edin. Bu kılavuzun sonunda bir DID oluşturmuş, doğrulanabilir bir kimlik bilgisi düzenlemiş ve onu doğrulamış olacaksınız — hepsi canlı testnet üzerinde.
Ön koşullar
- Node.js 18+
- Bir paket yöneticisi (npm, yarn veya pnpm)
SDK’yı Kurun
npm install @solidus-network/sdk @solidus-network/auth @noble/ed25519@solidus-network/sdk, DID işlemlerini, kimlik bilgisi düzenlemeyi ve zincir sorgularını sağlar.
@solidus-network/auth, kimlik doğrulama meydan okumalarını ve sunum doğrulamasını yönetir.
@noble/ed25519, Solidus’un imzalama için kullandığı Ed25519 anahtar çiftlerini üretir.
1. Bir Anahtar Çifti Üretin
Solidus üzerindeki her kimlik bir Ed25519 anahtar çiftiyle başlar. Açık anahtar, DID adresinizin temelini oluşturur; özel anahtar işlemleri ve kimlik bilgilerini imzalar.
import * as ed25519 from '@noble/ed25519'
// Generate a new private key (32 random bytes)
const privateKey = ed25519.utils.randomPrivateKey()
const publicKey = await ed25519.getPublicKeyAsync(privateKey)
// Hex-encode for SDK configuration
const privateKeyHex = Buffer.from(privateKey).toString('hex')
const publicKeyHex = Buffer.from(publicKey).toString('hex')
console.log('Private key:', privateKeyHex)
console.log('Public key:', publicKeyHex)Özel anahtarınızı gizli tutun. Ona erişimi olan herkes, ilişkili DID’i kontrol eder.
2. Bir SDK Örneği Oluşturun
Anahtar çiftinizle bir SDK örneği oluşturarak Solidus testnet’ine bağlanın.
import { createSdk } from '@solidus-network/sdk'
const sdk = createSdk({
mode: 'testnet',
rpcUrl: 'https://rpc.solidus.network',
signerPrivateKey: privateKeyHex,
})SDK örneği, tüm protokol işlemleri — DID’ler, kimlik bilgileri ve zincir sorguları — için giriş noktanızdır.
3. Bir DID Oluşturun
Merkeziyetsiz Kimlik Tanımlayıcı (DID), zincir üzerindeki kimliğinizdir. Bir tane oluşturmak,
Solidus testnet’ine bir işlem gönderir. did.create(), SDK’nın yapılandırılmış
signerPrivateKey’inin sahip olduğu açık anahtarı kaydeder — aynı anahtarın açık anahtarını iletin.
const did = await sdk.did.create(publicKeyHex)
console.log('DID created:', did.id)
// Output: did:solidus:testnet:7Hk3mRtQZv...Döndürülen DID, adresin açık anahtarınızın bir BLAKE3 hash’inden türetildiği
did:solidus:<network>:<address> biçimiyle W3C DID standardını izler.
4. Bir DID Çözümleyin
Herhangi bir DID’i, o kimlikle ilişkili açık anahtarları ve doğrulama yöntemlerini içeren DID Belgesini almak için sorgulayabilirsiniz.
const document = await sdk.did.resolve(did.id)
console.log('DID Document:', JSON.stringify(document, null, 2))Belge, diğer tarafların bu DID’den gelen imzaları doğrulamak için kullandığı doğrulama yöntemlerini, kimlik doğrulama anahtarlarını ve iddia (assertion) yöntemlerini içerir.
5. Bir Kimlik Bilgisi Düzenleyin
Doğrulanabilir Kimlik Bilgileri, iddiaların kriptografik kanıtlarıdır. Burada basit bir e-posta kimlik bilgisi düzenliyoruz — üretimde, KYC seviyeleri gibi kimlik bilgileri gerçek doğrulamadan sonra düzenlenir.
const credential = await sdk.credentials.issue({
subjectDid: did.id,
issuerDid: did.id,
issuerPrivateKey: privateKeyHex,
type: ['VerifiableCredential', 'EmailCredential'],
claims: {
email: '[email protected]',
verified: true,
},
expiresInDays: 365,
})
console.log('Credential issued:', credential.id)
console.log('Proof type:', credential.proof.type)Kimlik bilgisi özel anahtarınızla imzalanır ve hash’i zincir üzerinde sabitlenir; bu, kimlik bilgisinin blok zincirinde hiçbir kişisel veri depolanmadan düzenlendiğine dair değişmez bir kayıt oluşturur.
6. Bir Kimlik Bilgisini Doğrulayın
Herhangi bir taraf, kimliği üzerinden bir kimlik bilgisini doğrulayabilir — SDK bunu zincir üzerinde arar ve imzasını, son kullanma tarihini ve iptal durumunu kontrol eder.
const result = await sdk.credentials.verify(credential.id)
console.log('Valid:', result.valid)
console.log('Checks:', result.checks)
// Output: Valid: true
// Checks: { signature: true, expiry: true, revocation: true }Doğrulama tamamen güvensizdir (trustless) — doğrulayanın düzenleyiciyle iletişime geçmesine gerek yoktur. Yalnızca kimlik bilgisi kimliğine ve Solidus ağına erişime ihtiyaç duyarlar.
7. Kimlik Doğrulama Akışı
@solidus-network/auth, kullanıcılardan DID’lerinin sahipliğini kanıtlamalarını isteyerek onların
kimliğini doğrulamanızı sağlar. Akışın üç adımı vardır: bir meydan okuma oluşturmak, bir sunumu
imzalamak ve sunumu doğrulamak. createChallenge ve verifyPresentation, istemci/doğrulayıcı
sınıfları değil, düz fonksiyonlardır — aşağıdaki “doğrulayan tarafı” ve “kullanıcı tarafı” yalnızca
her fonksiyon çağrısının gerçekte nerede çalıştığını gösterir (arka ucunuz mu, kullanıcının cihazı
mı).
import { createChallenge, verifyPresentation } from '@solidus-network/auth'
// --- Verifier side: create a challenge for the user's DID ---
const challenge = createChallenge(did.id)
// challenge = { id, did, nonce, issuedAt, expiresAt }
// Send challenge.id and challenge.nonce to the user...
// --- User side: build and sign a Verifiable Presentation ---
// (Signing is application-specific — construct the presentation object per
// the VerifiablePresentation shape and sign challenge.nonce with the user's
// private key; see the @solidus-network/auth reference for the exact format.)
const presentation = {
'@context': ['https://www.w3.org/2018/credentials/v1'],
type: ['VerifiablePresentation'],
holder: did.id,
proof: {
type: 'Ed25519Signature2020',
created: new Date().toISOString(),
challenge: challenge.nonce,
proofPurpose: 'authentication',
verificationMethod: `${did.id}#key-0`,
jws: '...', // detached JWS over the presentation, signed with the user's private key
},
}
// --- Verifier side: verify the presentation ---
const verification = await verifyPresentation(
challenge,
presentation,
async (verificationMethodId) => {
// Resolve the DID to get its public key
const doc = await sdk.did.resolve(did.id)
// ...decode the matching verificationMethod's publicKeyMultibase to raw bytes
return publicKeyBytes
},
)
console.log('Authenticated:', verification.valid)
console.log('Checks:', verification.checks)Doğrulayan, kullanıcının özel anahtarını hiçbir zaman görmez. Yalnızca kullanıcının DID’i kontrol ettiğini kanıtlayan imzalanmış bir sunum alır.
Tam Örnek
İşte tüm akışın tek bir betikteki hâli.
import * as ed25519 from '@noble/ed25519'
import { createSdk } from '@solidus-network/sdk'
import { createChallenge } from '@solidus-network/auth'
async function main() {
// Key generation
const privateKey = ed25519.utils.randomPrivateKey()
const publicKey = await ed25519.getPublicKeyAsync(privateKey)
const privateKeyHex = Buffer.from(privateKey).toString('hex')
const publicKeyHex = Buffer.from(publicKey).toString('hex')
// SDK setup
const sdk = createSdk({
mode: 'testnet',
rpcUrl: 'https://rpc.solidus.network',
signerPrivateKey: privateKeyHex,
})
// Create DID
const did = await sdk.did.create(publicKeyHex)
console.log('DID:', did.id)
// Issue credential
const credential = await sdk.credentials.issue({
subjectDid: did.id,
issuerDid: did.id,
issuerPrivateKey: privateKeyHex,
type: ['VerifiableCredential', 'EmailCredential'],
claims: {
email: '[email protected]',
verified: true,
},
expiresInDays: 365,
})
console.log('Credential:', credential.id)
// Verify credential (by ID)
const result = await sdk.credentials.verify(credential.id)
console.log('Valid:', result.valid)
// Authentication — create a challenge for the DID to answer
// (see the @solidus-network/auth reference for signing + verifyPresentation)
const challenge = createChallenge(did.id)
console.log('Challenge nonce:', challenge.nonce)
}
main().catch(console.error)Sonraki Adımlar
- Solidus Nasıl Çalışır — protokol tasarımını anlayın
- Derinlemesine DID’ler — DID belgesi yapısı, anahtar türetme, yaşam döngüsü
- Doğrulanabilir Kimlik Bilgileri — kimlik bilgisi türleri, seçici ifşa, iptal
- Ağ ve Testnet — RPC yöntemleri, gezgin, faucet