Skip to content

Υπογραφή & Επαλήθευση ​

Το badges.ninja δημοσιεύει μια δημόσια κρυπτογραφική ταυτότητα ώστε τρίτα μέρη να μπορούν να επαληθεύουν διαπιστευτήρια που φέρουν ψηφιακή υπογραφή. Αυτό είναι το θεμέλιο για την υποστήριξη Open Badges 3.0 / W3C Verifiable Credentials.

Αυτά τα endpoints είναι δημόσια και δεν απαιτούν πιστοποίηση. Είναι σχετικά ως προς το https://api.badges.ninja.

DID Εκδότη ​

Η ταυτότητα εκδότη της πλατφόρμας είναι το αναγνωριστικό did:web:

did:web:api.badges.ninja

Σύμφωνα με τους κανόνες του did:web, αυτό αναλύεται στο έγγραφο DID που εξυπηρετείται στη γνωστή διαδρομή παρακάτω.

Έγγραφο 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.

Verifiable Credential (Open Badges 3.0) ​

Κάθε βραβείο μπορεί να ανακτηθεί ως Open Badges 3.0 / W3C Verifiable Credential, υπογεγραμμένο με το παραπάνω κλειδί εκδότη.

GET /certify-badge/award/{guid}/vc
QueryΑποτέλεσμα
(προεπιλογή) ή ?format=jwtΤο υπογεγραμμένο VC-JWT (application/jwt) — εισαγωγή σε ένα πορτοφόλι OB 3.0.
?format=jsonΤο ανυπόγραφο JSON OpenBadgeCredential (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, και το επίτευγμα, η ταυτότητα του παραλήπτη (κατακερματισμένο email) και οι ημερομηνίες έκδοσης/λήξης προέρχονται από το βραβείο.

Επαλήθευση ενός VC-JWT ​

Το token είναι ένα συμπαγές 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 του. Δείτε Δημόσια Επαλήθευση για τα endpoints JSON βεβαίωσης, εμβλήματος και εκδότη, και Κοινοποίηση & Επαλήθευση για τη σελίδα επαλήθευσης που βλέπει ο παραλήπτης.

badges.ninja Documentation