Skip to content

Подписване и проверка ​

badges.ninja публикува публична криптографска идентичност, за да могат трети страни да проверяват удостоверения, които носят цифров подпис. Това е основата за поддръжката на Open Badges 3.0 / W3C Verifiable Credentials.

Тези крайни точки са публични и не изискват удостоверяване. Те са относителни спрямо https://api.badges.ninja.

DID на издателя ​

Идентичността на издателя на платформата е идентификаторът did:web:

did:web:api.badges.ninja

Съгласно правилата на did:web, той се разрешава до DID документа, обслужван на well-known пътя по-долу.

DID документ ​

GET /.well-known/did.json

Връща DID документа, който излага публичния ключ за подписване на издателя (Ed25519 JsonWebKey2020) като свой 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>"]
}

Типът на съдържанието на отговора е application/did+json. Документът може да се кешира (променя се само при ротация на ключа).

JWKS ​

За верификатори, които предпочитат откриване чрез JWK Set пред разрешаване на 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 е RFC 7638 отпечатъкът на публичния ключ и съвпада с фрагмента върху идентификатора на verificationMethod в DID документа.

Проверимо удостоверение (Open Badges 3.0) ​

Всяко отличие може да бъде извлечено като Open Badges 3.0 / W3C Verifiable Credential, подписано с ключа на издателя по-горе.

GET /certify-badge/award/{guid}/vc
ЗаявкаРезултат
(по подразбиране) или ?format=jwtПодписаният VC-JWT (application/jwt) — импортирайте в OB 3.0 портфейл.
?format=jsonНеподписаният OpenBadgeCredential JSON (application/vc+ld+json) — за преглед.
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"

Удостоверението е VC от тип ["VerifiableCredential", "OpenBadgeCredential"] (контекстите https://www.w3.org/ns/credentials/v2 и контекстът на OB 3.0). Неговият issuer.id е did:web:api.badges.ninja, а постижението, идентичността на получателя (хеширан имейл) и датите на издаване/изтичане идват от отличието.

Проверка на VC-JWT ​

Токенът е компактен JWS с EdDSA подпис. За да го проверите:

  1. Разделете JWT на header.payload.signature.
  2. Прочетете kid от хедъра — той сочи към DID документа / JWKS.
  3. Извлечете публичния ключ и проверете подписа Ed25519 върху 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"));

Получателите могат също да вземат удостоверението от менюто Download на публичната си страница на удостоверението (Verifiable Credential).

Алгоритъм за подписване ​

Подписите използват Ed25519 (EdDSA). Частният ключ се съхранява от страната на сървъра и никога не се излага; публикува се само публичният ключ по-горе.

Хоствана проверка (Open Badges 2.0) ​

Всяко удостоверение е също независимо проверимо и днес чрез своята хоствана Open Badge 2.0 assertion. Вижте Публична проверка за JSON крайните точки на assertion, значка и издател, както и Споделяне и проверка за страницата за проверка, насочена към получателя.

badges.ninja Documentation