Skip to Content
Getting Started

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

Last updated on