Skip to content

Penanda Tanganan & Verifikasi ​

badges.ninja menerbitkan identitas kriptografis publik sehingga pihak ketiga dapat memverifikasi kredensial yang membawa tanda tangan digital. Ini adalah fondasi untuk dukungan Open Badges 3.0 / W3C Verifiable Credentials.

Endpoint-endpoint ini bersifat publik dan tidak memerlukan autentikasi. Semuanya relatif terhadap https://api.badges.ninja.

DID Penerbit ​

Identitas penerbit platform adalah pengenal did:web:

did:web:api.badges.ninja

Berdasarkan aturan did:web, ini di-resolve ke dokumen DID yang disajikan pada jalur well-known di bawah.

Dokumen DID ​

GET /.well-known/did.json

Mengembalikan dokumen DID yang mengekspos kunci penanda tangan publik penerbit (sebuah 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>"]
}

Tipe konten respons adalah application/did+json. Dokumen ini dapat di-cache (hanya berubah saat rotasi kunci).

JWKS ​

Untuk verifikator yang lebih menyukai penemuan JWK Set daripada 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 adalah thumbprint RFC 7638 dari kunci publik dan cocok dengan fragmen pada id verificationMethod dokumen DID.

Verifiable Credential (Open Badges 3.0) ​

Setiap penghargaan dapat diambil sebagai Open Badges 3.0 / W3C Verifiable Credential, ditandatangani dengan kunci penerbit di atas.

GET /certify-badge/award/{guid}/vc
QueryHasil
(default) atau ?format=jwtVC-JWT bertanda tangan (application/jwt) — impor ke dompet OB 3.0.
?format=jsonJSON OpenBadgeCredential tanpa tanda tangan (application/vc+ld+json) — untuk inspeksi.
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 ini adalah VC bertipe ["VerifiableCredential", "OpenBadgeCredential"] (konteks https://www.w3.org/ns/credentials/v2 dan konteks OB 3.0). issuer.id-nya adalah did:web:api.badges.ninja, dan pencapaian, identitas penerima (email ter-hash), serta tanggal terbit/kedaluwarsa berasal dari penghargaan.

Memverifikasi VC-JWT ​

Token ini adalah JWS ringkas dengan tanda tangan EdDSA. Untuk memverifikasi:

  1. Pisahkan JWT menjadi header.payload.signature.
  2. Baca kid dari header — ia menunjuk ke dokumen DID / JWKS.
  3. Ambil kunci publik dan verifikasi tanda tangan Ed25519 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 dapat mengambil kredensial dari menu Download pada halaman kredensial publik mereka (Verifiable Credential).

Algoritme Tanda Tangan ​

Tanda tangan menggunakan Ed25519 (EdDSA). Kunci privat dikustodikan di sisi server dan tidak pernah diekspos; hanya kunci publik di atas yang dipublikasikan.

Verifikasi Terhosting (Open Badges 2.0) ​

Setiap kredensial juga dapat diverifikasi secara independen saat ini melalui asersi Open Badge 2.0 terhostingnya. Lihat Verifikasi Publik untuk endpoint JSON asersi, lencana, dan penerbit, serta Berbagi & Verifikasi untuk halaman verifikasi yang menghadap penerima.

badges.ninja Documentation