Skip to content

Semnare și verificare

badges.ninja publică o identitate criptografică publică pentru ca terții să poată verifica credențialele care poartă o semnătură digitală. Aceasta este fundamentul suportului pentru Open Badges 3.0 / W3C Verifiable Credentials.

Aceste endpoint-uri sunt publice și nu necesită autentificare. Sunt relative la https://api.badges.ninja.

DID-ul emitentului

Identitatea de emitent a platformei este identificatorul did:web:

did:web:api.badges.ninja

Conform regulilor did:web, acesta se rezolvă la documentul DID servit la calea well-known de mai jos.

Documentul DID

GET /.well-known/did.json

Returnează documentul DID care expune cheia publică de semnare a emitentului (o cheie Ed25519 JsonWebKey2020) drept 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>"]
}

Tipul de conținut al răspunsului este application/did+json. Documentul poate fi stocat în cache (se schimbă doar la rotația cheii).

JWKS

Pentru verificatorii care preferă descoperirea prin JWK Set în locul rezolvării 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 este amprenta RFC 7638 a cheii publice și corespunde fragmentului din ID-ul verificationMethod al documentului DID.

Credențială verificabilă (Open Badges 3.0)

Fiecare distincție poate fi obținută ca o Open Badges 3.0 / W3C Verifiable Credential, semnată cu cheia emitentului de mai sus.

GET /certify-badge/award/{guid}/vc
InterogareRezultat
(implicit) sau ?format=jwtVC-JWT-ul semnat (application/jwt) — importă-l într-un portofel OB 3.0.
?format=jsonJSON-ul OpenBadgeCredential nesemnat (application/vc+ld+json) — pentru inspecție.
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"

Credențiala este o VC de tip ["VerifiableCredential", "OpenBadgeCredential"] (contextele https://www.w3.org/ns/credentials/v2 și contextul OB 3.0). issuer.id al acesteia este did:web:api.badges.ninja, iar realizarea, identitatea destinatarului (e-mail hash-uit) și datele de emitere/expirare provin din distincție.

Verificarea unui VC-JWT

Token-ul este un JWS compact cu o semnătură EdDSA. Pentru a-l verifica:

  1. Împarte JWT-ul în header.payload.signature.
  2. Citește kid din antet — acesta indică spre documentul DID / JWKS.
  3. Obține cheia publică și verifică semnătura Ed25519 asupra 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"));

Destinatarii pot obține credențiala și din meniul Download de pe pagina publică a credențialei lor (Verifiable Credential).

Algoritmul de semnare

Semnăturile folosesc Ed25519 (EdDSA). Cheia privată este custodiată pe server și nu este niciodată expusă; se publică doar cheia publică de mai sus.

Verificare găzduită (Open Badges 2.0)

Fiecare credențială este de asemenea verificabilă independent și astăzi prin aserțiunea sa găzduită Open Badge 2.0. Vezi Verificare publică pentru endpoint-urile JSON de aserțiune, insignă și emitent, și Partajare și verificare pentru pagina de verificare destinată destinatarului.

badges.ninja Documentation