Skip to content

Signering og verificering ​

badges.ninja offentliggør en offentlig kryptografisk identitet, så tredjeparter kan verificere beviser, der bærer en digital signatur. Dette er fundamentet for understøttelse af Open Badges 3.0 / W3C Verifiable Credentials.

Disse endpoints er offentlige og kræver ingen godkendelse. De er relative til https://api.badges.ninja.

Udsteder-DID ​

Platformens udstederidentitet er did:web-identifikatoren:

did:web:api.badges.ninja

Efter did:web-reglerne opløses dette til DID-dokumentet, der leveres på den velkendte sti nedenfor.

DID-dokument ​

GET /.well-known/did.json

Returnerer DID-dokumentet, der eksponerer udstederens offentlige signeringsnøgle (en Ed25519 JsonWebKey2020) som dens 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>"]
}

Svarets indholdstype er application/did+json. Dokumentet kan caches (det ændres kun ved nøglerotation).

JWKS ​

For verifikatorer, der foretrækker JWK Set-opdagelse frem for DID-opløsning:

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 er RFC 7638-fingeraftrykket af den offentlige nøgle og matcher fragmentet på DID-dokumentets verificationMethod-id.

Verificerbart bevis (Open Badges 3.0) ​

Hvert bevis kan hentes som et Open Badges 3.0 / W3C Verifiable Credential, signeret med udstedernøglen ovenfor.

GET /certify-badge/award/{guid}/vc
QueryResultat
(standard) eller ?format=jwtDet signerede VC-JWT (application/jwt) — importér til en OB 3.0-wallet.
?format=jsonDet usignerede OpenBadgeCredential-JSON (application/vc+ld+json) — til inspektion.
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"

Beviset er et ["VerifiableCredential", "OpenBadgeCredential"]-typet VC (kontekster https://www.w3.org/ns/credentials/v2 og OB 3.0-konteksten). Dets issuer.id er did:web:api.badges.ninja, og præstationen, modtageridentiteten (hashet e-mail) og udstedelses-/udløbsdatoerne kommer fra beviset.

Verificering af et VC-JWT ​

Tokenet er en kompakt JWS med en EdDSA-signatur. For at verificere:

  1. Del JWT'en op i header.payload.signature.
  2. Læs kid fra headeren — den peger ind i DID-dokumentet / JWKS.
  3. Hent den offentlige nøgle og verificér Ed25519-signaturen over 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"));

Modtagere kan også hente beviset fra menuen Download på deres offentlige bevisside (Verifiable Credential).

Signaturalgoritme ​

Signaturer bruger Ed25519 (EdDSA). Den private nøgle opbevares på serversiden og eksponeres aldrig; kun den offentlige nøgle ovenfor offentliggøres.

Hostet verificering (Open Badges 2.0) ​

Hvert bevis kan også verificeres uafhængigt i dag via sit hostede Open Badge 2.0-assertion. Se Offentlig verificering for assertion-, badge- og udsteder-JSON-endpoints, og Deling og verificering for den modtagervendte verificeringsside.

badges.ninja Documentation