Skip to content

Podpisovanie a overovanie ​

badges.ninja zverejňuje verejnú kryptografickú identitu, aby tretie strany mohli overiť poverovacie listiny, ktoré nesú digitálny podpis. Toto je základ pre podporu Open Badges 3.0 / W3C Verifiable Credentials.

Tieto koncové body sú verejné a nevyžadujú žiadnu autentifikáciu. Sú relatívne voči https://api.badges.ninja.

DID vydavateľa ​

Identita vydavateľa platformy je identifikátor did:web:

did:web:api.badges.ninja

Podľa pravidiel did:web sa toto rozlíši na DID dokument obsluhovaný na nižšie uvedenej well-known ceste.

DID dokument ​

GET /.well-known/did.json

Vráti DID dokument sprístupňujúci verejný podpisový kľúč vydavateľa (Ed25519 JsonWebKey2020) ako jeho 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>"]
}

Typ obsahu odpovede je application/did+json. Dokument je cachovateľný (mení sa iba pri rotácii kľúča).

JWKS ​

Pre verifikátory, ktoré uprednostňujú objavovanie JWK Set pred rozlíšením DID:

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 je RFC 7638 thumbprint verejného kľúča a zhoduje sa s fragmentom v id verificationMethod DID dokumentu.

Verifiable Credential (Open Badges 3.0) ​

Každé ocenenie je možné získať ako Open Badges 3.0 / W3C Verifiable Credential, podpísané vyššie uvedeným kľúčom vydavateľa.

GET /certify-badge/award/{guid}/vc
QueryVýsledok
(predvolené) alebo ?format=jwtPodpísané VC-JWT (application/jwt) — importujte do OB 3.0 peňaženky.
?format=jsonNepodpísaný OpenBadgeCredential JSON (application/vc+ld+json) — na kontrolu.
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"

Poverovacia listina je VC typu ["VerifiableCredential", "OpenBadgeCredential"] (kontexty https://www.w3.org/ns/credentials/v2 a kontext OB 3.0). Jej issuer.id je did:web:api.badges.ninja a úspech, identita príjemcu (hashovaný e-mail) a dátumy vydania/expirácie pochádzajú z ocenenia.

Overovanie VC-JWT ​

Token je kompaktný JWS s podpisom EdDSA. Na overenie:

  1. Rozdeľte JWT na header.payload.signature.
  2. Prečítajte kid z hlavičky — ukazuje do DID dokumentu / JWKS.
  3. Získajte verejný kľúč a overte podpis Ed25519 nad header.payload.
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"));

Príjemcovia môžu poverovaciu listinu tiež získať z ponuky Download na svojej verejnej stránke poverovacej listiny (Verifiable Credential).

Algoritmus podpisu ​

Podpisy používajú Ed25519 (EdDSA). Súkromný kľúč je uschovaný na strane servera a nikdy sa nesprístupňuje; zverejnený je iba vyššie uvedený verejný kľúč.

Hostované overovanie (Open Badges 2.0) ​

Každá poverovacia listina je aj dnes nezávisle overiteľná prostredníctvom svojej hostovanej Open Badge 2.0 assertion. Pozri Verejné overovanie pre JSON koncové body assertion, odznaku a vydavateľa a Zdieľanie a overovanie pre overovaciu stránku určenú príjemcom.

badges.ninja Documentation