Skip to content

স্বাক্ষর ও যাচাইকরণ

badges.ninja একটি সর্বজনীন ক্রিপ্টোগ্রাফিক পরিচয় প্রকাশ করে যাতে তৃতীয় পক্ষ ডিজিটাল স্বাক্ষর বহনকারী ক্রেডেনশিয়াল যাচাই করতে পারে। এটি Open Badges 3.0 / W3C Verifiable Credentials সমর্থনের ভিত্তি।

এই এন্ডপয়েন্টগুলি সর্বজনীন এবং কোনো প্রমাণীকরণের প্রয়োজন নেই। এগুলি https://api.badges.ninja এর সাপেক্ষে।

ইস্যুয়ার DID

প্ল্যাটফর্মের ইস্যুয়ার পরিচয় হল did:web শনাক্তকারী:

did:web:api.badges.ninja

did:web নিয়ম অনুসারে, এটি নিচের well-known পাথে পরিবেশিত DID ডকুমেন্টে রিজলভ হয়।

DID ডকুমেন্ট

GET /.well-known/did.json

DID ডকুমেন্ট ফেরত দেয় যা ইস্যুয়ারের সর্বজনীন সাইনিং কী (একটি Ed25519 JsonWebKey2020) কে তার assertionMethod হিসেবে প্রকাশ করে।

bash
curl https://api.badges.ninja/.well-known/did.json
json
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/jws-2020/v1"
  ],
  "id": "did:web:api.badges.ninja",
  "verificationMethod": [
    {
      "id": "did:web:api.badges.ninja#<kid>",
      "type": "JsonWebKey2020",
      "controller": "did:web:api.badges.ninja",
      "publicKeyJwk": { "kty": "OKP", "crv": "Ed25519", "x": "<base64url>" }
    }
  ],
  "assertionMethod": ["did:web:api.badges.ninja#<kid>"],
  "authentication": ["did:web:api.badges.ninja#<kid>"]
}

প্রতিক্রিয়ার কন্টেন্ট টাইপ হল application/did+json। ডকুমেন্টটি ক্যাশযোগ্য (এটি শুধুমাত্র কী রোটেশনের সময় পরিবর্তিত হয়)।

JWKS

যে যাচাইকারীরা DID রিজলিউশনের চেয়ে JWK Set আবিষ্কার পছন্দ করেন তাদের জন্য:

GET /.well-known/jwks.json
bash
curl https://api.badges.ninja/.well-known/jwks.json
json
{
  "keys": [
    {
      "kty": "OKP",
      "crv": "Ed25519",
      "x": "<base64url>",
      "kid": "<thumbprint>",
      "alg": "EdDSA",
      "use": "sig"
    }
  ]
}

kid হল সর্বজনীন কীর RFC 7638 thumbprint এবং এটি DID ডকুমেন্টের verificationMethod id-এর ফ্র্যাগমেন্টের সাথে মেলে।

Verifiable Credential (Open Badges 3.0)

প্রতিটি award একটি Open Badges 3.0 / W3C Verifiable Credential হিসেবে পুনরুদ্ধার করা যায়, উপরের ইস্যুয়ার কী দিয়ে স্বাক্ষরিত।

GET /certify-badge/award/{guid}/vc
কোয়েরিফলাফল
(ডিফল্ট) বা ?format=jwtস্বাক্ষরিত VC-JWT (application/jwt) — একটি OB 3.0 ওয়ালেটে ইমপোর্ট করুন।
?format=jsonস্বাক্ষরবিহীন OpenBadgeCredential JSON (application/vc+ld+json) — পরিদর্শনের জন্য।
bash
# Signed credential (VC-JWT)
curl https://api.badges.ninja/certify-badge/award/<guid>/vc

# Human-readable credential JSON
curl "https://api.badges.ninja/certify-badge/award/<guid>/vc?format=json"

ক্রেডেনশিয়ালটি একটি ["VerifiableCredential", "OpenBadgeCredential"] টাইপযুক্ত VC (কনটেক্সট https://www.w3.org/ns/credentials/v2 এবং OB 3.0 কনটেক্সট)। এর issuer.id হল did:web:api.badges.ninja, এবং অ্যাচিভমেন্ট, প্রাপকের পরিচয় (হ্যাশ করা ইমেইল), এবং ইস্যু/মেয়াদ শেষের তারিখগুলি award থেকে আসে।

একটি VC-JWT যাচাই করা

টোকেনটি একটি EdDSA স্বাক্ষর সহ একটি কমপ্যাক্ট JWS। যাচাই করতে:

  1. JWT-কে header.payload.signature-এ ভাগ করুন।
  2. হেডার থেকে kid পড়ুন — এটি DID ডকুমেন্ট / JWKS-এ নির্দেশ করে।
  3. সর্বজনীন কী আনুন এবং header.payload-এর উপর Ed25519 স্বাক্ষর যাচাই করুন।
js
import crypto from "node:crypto";

const [h, p, s] = jwt.split(".");
const jwks = await (await fetch("https://api.badges.ninja/.well-known/jwks.json")).json();
const jwk = jwks.keys[0];
const pub = crypto.createPublicKey({ key: jwk, format: "jwk" });
const ok = crypto.verify(null, Buffer.from(`${h}.${p}`), pub, Buffer.from(s, "base64url"));

প্রাপকরাও তাদের সর্বজনীন ক্রেডেনশিয়াল পৃষ্ঠার Download মেনু থেকে ক্রেডেনশিয়ালটি নিতে পারেন (Verifiable Credential)।

স্বাক্ষর অ্যালগরিদম

স্বাক্ষরগুলি Ed25519 (EdDSA) ব্যবহার করে। ব্যক্তিগত কী সার্ভার-সাইডে সংরক্ষিত এবং কখনও প্রকাশ করা হয় না; শুধুমাত্র উপরের সর্বজনীন কী প্রকাশ করা হয়।

হোস্টেড যাচাইকরণ (Open Badges 2.0)

প্রতিটি ক্রেডেনশিয়াল এর হোস্টেড Open Badge 2.0 অ্যাসারশনের মাধ্যমে আজও স্বাধীনভাবে যাচাইযোগ্য। অ্যাসারশন, ব্যাজ ও ইস্যুয়ার JSON এন্ডপয়েন্টের জন্য সর্বজনীন যাচাইকরণ দেখুন, এবং প্রাপক-মুখী যাচাইকরণ পৃষ্ঠার জন্য শেয়ারিং ও যাচাইকরণ দেখুন।

badges.ninja Documentation