Skip to content

Allkirjastamine ja kontrollimine

badges.ninja avaldab avaliku krüptograafilise identiteedi, et kolmandad osapooled saaksid kontrollida digitaalallkirja kandvaid tunnistusi. See on aluseks Open Badges 3.0 / W3C Verifiable Credentials toele.

Need otspunktid on avalikud ega nõua autentimist. Need on suhtelised aadressiga https://api.badges.ninja.

Väljastaja DID

Platvormi väljastaja identiteet on did:web identifikaator:

did:web:api.badges.ninja

did:web reeglite kohaselt laheneb see DID-dokumendiks, mida serveeritakse allpool asuval üldtuntud (well-known) teel.

DID-dokument

GET /.well-known/did.json

Tagastab DID-dokumendi, mis avaldab väljastaja avaliku allkirjastamisvõtme (Ed25519 JsonWebKey2020) oma assertionMethod-ina.

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>"]
}

Vastuse sisutüüp on application/did+json. Dokument on vahemällu salvestatav (see muutub ainult võtme rotatsioonil).

JWKS

Kontrollijatele, kes eelistavad DID-lahenduse asemel JWK Set avastamist:

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 on avaliku võtme RFC 7638 sõrmejälg ja vastab DID-dokumendi verificationMethod id-l olevale fragmendile.

Kontrollitav tunnistus (Open Badges 3.0)

Iga autasu saab hankida Open Badges 3.0 / W3C Verifiable Credential-ina, mis on allkirjastatud ülaltoodud väljastaja võtmega.

GET /certify-badge/award/{guid}/vc
PäringTulemus
(vaikimisi) või ?format=jwtAllkirjastatud VC-JWT (application/jwt) — impordi OB 3.0 rahakotti.
?format=jsonAllkirjastamata OpenBadgeCredential JSON (application/vc+ld+json) — kontrollimiseks.
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"

Tunnistus on ["VerifiableCredential", "OpenBadgeCredential"] tüüpi VC (kontekstid https://www.w3.org/ns/credentials/v2 ja OB 3.0 kontekst). Selle issuer.id on did:web:api.badges.ninja ning saavutus, saaja identiteet (räsitud e-post) ja väljastamis-/aegumiskuupäevad pärinevad autasust.

VC-JWT kontrollimine

Token on kompaktne JWS EdDSA allkirjaga. Kontrollimiseks:

  1. Jaga JWT osadeks header.payload.signature.
  2. Loe päisest kid — see osutab DID-dokumenti / JWKS-i.
  3. Hangi avalik võti ja kontrolli Ed25519 allkirja header.payload üle.
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"));

Saajad saavad tunnistuse hankida ka oma avaliku tunnistuse lehel asuvast menüüst Download (Verifiable Credential).

Allkirja algoritm

Allkirjad kasutavad Ed25519 (EdDSA). Privaatvõtit hoitakse serveripoolel ega paljastata kunagi; avaldatakse ainult ülaltoodud avalik võti.

Hostitud kontrollimine (Open Badges 2.0)

Iga tunnistus on ka juba täna sõltumatult kontrollitav oma hostitud Open Badge 2.0 kinnituse (assertion) kaudu. Vt Avalik kontrollimine kinnituse, märgi ja väljastaja JSON-otspunktide kohta ning Jagamine ja kontrollimine saajale suunatud kontrollimislehe kohta.

badges.ninja Documentation