Skip to content

Signering og verifisering

badges.ninja publiserer en offentlig kryptografisk identitet slik at tredjeparter kan verifisere bevis som bærer en digital signatur. Dette er grunnlaget for støtte for Open Badges 3.0 / W3C Verifiable Credentials.

Disse endepunktene er offentlige og krever ingen autentisering. De er relative til https://api.badges.ninja.

Utsteder-DID

Plattformens utstederidentitet er did:web-identifikatoren:

did:web:api.badges.ninja

Etter did:web-reglene løses dette til DID-dokumentet som serveres på den velkjente stien nedenfor.

DID-dokument

GET /.well-known/did.json

Returnerer DID-dokumentet som eksponerer utstederens offentlige signeringsnøkkel (en Ed25519 JsonWebKey2020) som sin 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 innholdstype er application/did+json. Dokumentet kan bufres (det endres kun ved nøkkelrotasjon).

JWKS

For verifikatorer som foretrekker JWK Set-oppdagelse fremfor DID-opplø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-fingeravtrykket av den offentlige nøkkelen og matcher fragmentet på DID-dokumentets verificationMethod-id.

Verifiserbart bevis (Open Badges 3.0)

Hvert bevis kan hentes som et Open Badges 3.0 / W3C Verifiable Credential, signert med utstedernøkkelen ovenfor.

GET /certify-badge/award/{guid}/vc
SpørringResultat
(standard) eller ?format=jwtDet signerte VC-JWT (application/jwt) — importer til en OB 3.0-lommebok.
?format=jsonDen usignerte OpenBadgeCredential-JSON-en (application/vc+ld+json) — for inspeksjon.
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 prestasjonen, mottakeridentiteten (hashet e-post) og utstedelses-/utløpsdatoene kommer fra beviset.

Verifisere et VC-JWT

Tokenet er en kompakt JWS med en EdDSA-signatur. Slik verifiserer du:

  1. Del JWT-en opp i header.payload.signature.
  2. Les kid fra headeren — den peker inn i DID-dokumentet / JWKS.
  3. Hent den offentlige nøkkelen og verifiser 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"));

Mottakere kan også hente beviset fra menyen Download på sin offentlige bevisside (Verifiable Credential).

Signaturalgoritme

Signaturer bruker Ed25519 (EdDSA). Den private nøkkelen oppbevares på serversiden og eksponeres aldri; kun den offentlige nøkkelen ovenfor publiseres.

Hostet verifisering (Open Badges 2.0)

Hvert bevis er også uavhengig verifiserbart i dag via sin hostede Open Badge 2.0-assertion. Se Offentlig verifisering for assertion-, badge- og utsteder-JSON-endepunktene, og Deling og verifisering for den mottakervendte verifiseringssiden.

badges.ninja Documentation