Skip to content

Penandatanganan & Pengesahan ​

badges.ninja menerbitkan identiti kriptografi awam supaya pihak ketiga boleh mengesahkan kredensial yang membawa tandatangan digital. Ini ialah asas untuk sokongan Open Badges 3.0 / W3C Verifiable Credentials.

Titik akhir ini adalah awam dan tidak memerlukan pengesahan. Ia relatif kepada https://api.badges.ninja.

DID Pengeluar ​

Identiti pengeluar platform ialah pengecam did:web:

did:web:api.badges.ninja

Menurut peraturan did:web, ini menyelesai kepada dokumen DID yang disajikan di laluan well-known di bawah.

Dokumen DID ​

GET /.well-known/did.json

Mengembalikan dokumen DID yang mendedahkan kunci penandatanganan awam pengeluar (satu Ed25519 JsonWebKey2020) sebagai assertionMethod-nya.

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

Jenis kandungan respons ialah application/did+json. Dokumen ini boleh dicache (ia berubah hanya apabila kunci diputar).

JWKS ​

Untuk pengesah yang lebih suka penemuan JWK Set berbanding resolusi 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 ialah cap ibu jari RFC 7638 bagi kunci awam dan sepadan dengan serpihan pada ID verificationMethod dokumen DID.

Verifiable Credential (Open Badges 3.0) ​

Setiap award boleh diperoleh sebagai Open Badges 3.0 / W3C Verifiable Credential, ditandatangani dengan kunci pengeluar di atas.

GET /certify-badge/award/{guid}/vc
PertanyaanKeputusan
(lalai) atau ?format=jwtVC-JWT yang ditandatangani (application/jwt) — import ke dalam dompet OB 3.0.
?format=jsonJSON OpenBadgeCredential tidak ditandatangani (application/vc+ld+json) — untuk pemeriksaan.
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"

Kredensial ialah VC bertaip ["VerifiableCredential", "OpenBadgeCredential"] (konteks https://www.w3.org/ns/credentials/v2 dan konteks OB 3.0). issuer.id-nya ialah did:web:api.badges.ninja, dan pencapaian, identiti penerima (e-mel bercincang), serta tarikh keluaran/luput datang daripada award.

Mengesahkan VC-JWT ​

Token ialah JWS padat dengan tandatangan EdDSA. Untuk mengesahkan:

  1. Pisahkan JWT kepada header.payload.signature.
  2. Baca kid daripada pengepala — ia menunjuk ke dalam dokumen DID / JWKS.
  3. Dapatkan kunci awam dan sahkan tandatangan Ed25519 ke atas 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"));

Penerima juga boleh memperoleh kredensial daripada menu Download pada halaman kredensial awam mereka (Verifiable Credential).

Algoritma Tandatangan ​

Tandatangan menggunakan Ed25519 (EdDSA). Kunci persendirian disimpan di sisi pelayan dan tidak pernah didedahkan; hanya kunci awam di atas yang diterbitkan.

Pengesahan Terhos (Open Badges 2.0) ​

Setiap kredensial juga boleh disahkan secara bebas hari ini melalui pernyataan Open Badge 2.0 terhosnya. Lihat Pengesahan Awam untuk titik akhir JSON pernyataan, lencana dan pengeluar, serta Perkongsian & Pengesahan untuk halaman pengesahan yang menghadap penerima.

badges.ninja Documentation