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 थंबप्रिंट है और DID दस्तावेज़ के verificationMethod id पर फ़्रैगमेंट से मेल खाता है।

Verifiable Credential (Open Badges 3.0)

प्रत्येक अवॉर्ड को ऊपर दी गई जारीकर्ता कुंजी के साथ हस्ताक्षरित, 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 है, और उपलब्धि, प्राप्तकर्ता पहचान (हैश किया गया ईमेल), और जारी/समाप्ति तिथियाँ अवॉर्ड से आती हैं।

किसी 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