Skip to content

Signatura i verificació

badges.ninja publica una identitat criptogràfica pública perquè tercers puguin verificar les credencials que porten una signatura digital. Aquesta és la base del suport per a Open Badges 3.0 / W3C Verifiable Credentials.

Aquests endpoints són públics i no requereixen autenticació. Són relatius a https://api.badges.ninja.

DID de l'emissor

La identitat d'emissor de la plataforma és l'identificador did:web:

did:web:api.badges.ninja

Segons les regles de did:web, això es resol al document DID servit a la ruta well-known de més avall.

Document DID

GET /.well-known/did.json

Retorna el document DID que exposa la clau pública de signatura de l'emissor (una JsonWebKey2020 Ed25519) com el seu 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>"]
}

El tipus de contingut de la resposta és application/did+json. El document és cacheable (només canvia en rotar la clau).

JWKS

Per als verificadors que prefereixen el descobriment per JWK Set en lloc de la resolució 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"
    }
  ]
}

El kid és el thumbprint RFC 7638 de la clau pública i coincideix amb el fragment de l'id de verificationMethod del document DID.

Credencial verificable (Open Badges 3.0)

Cada credencial es pot obtenir com una Open Badges 3.0 / W3C Verifiable Credential, signada amb la clau d'emissor de més amunt.

GET /certify-badge/award/{guid}/vc
ConsultaResultat
(per defecte) o ?format=jwtEl VC-JWT signat (application/jwt) — importa'l a una cartera OB 3.0.
?format=jsonEl JSON OpenBadgeCredential sense signar (application/vc+ld+json) — per a inspecció.
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"

La credencial és una VC amb tipus ["VerifiableCredential", "OpenBadgeCredential"] (contextos https://www.w3.org/ns/credentials/v2 i el context OB 3.0). El seu issuer.id és did:web:api.badges.ninja, i l'assoliment, la identitat del destinatari (correu amb hash) i les dates d'emissió/caducitat provenen de la credencial.

Verificar un VC-JWT

El token és un JWS compacte amb una signatura EdDSA. Per verificar-lo:

  1. Divideix el JWT en header.payload.signature.
  2. Llegeix el kid de la capçalera — apunta al document DID / JWKS.
  3. Obtén la clau pública i verifica la signatura Ed25519 sobre 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"));

Els destinataris també poden obtenir la credencial des del menú Download a la seva pàgina pública de credencial (Verifiable Credential).

Algorisme de signatura

Les signatures fan servir Ed25519 (EdDSA). La clau privada es custodia al servidor i mai s'exposa; només es publica la clau pública de més amunt.

Verificació allotjada (Open Badges 2.0)

Cada credencial també és verificable de manera independent avui mateix mitjançant la seva assertion allotjada d'Open Badge 2.0. Consulta Verificació pública per als endpoints JSON d'assertion, insígnia i emissor, i Compartició i verificació per a la pàgina de verificació orientada al destinatari.

badges.ninja Documentation