Méthode GET/brand/{brand_id}/did.json

Récupérer le document d'identité d'une marque : la liste de ses clefs publiques de signature, au format did:web. Point d'entrée public.

Sur cette page

Vous récupérez les clefs publiques avec lesquelles une marque signe ses passeports numériques de produit. En quittant cette page, vous saurez demander ce document, y retrouver la clef qui a signé un justificatif précis, et comprendre ce que veut dire l'absence d'une clef.

Adresse complète :

HTTP
GET https://api.sealtrust.io/v1/brand/{brand_id}/did.json

Le même point d'entrée répond aussi sans le préfixe /v1, à https://api.sealtrust.io/brand/{brand_id}/did.json. Les deux adresses appellent le même code. Utilisez la forme /v1 pour une nouvelle intégration.

Ce document est ce qu'un vérificateur va chercher tout seul. Le justificatif signé d'un passeport porte un identifiant d'émetteur de la forme did:web:api.sealtrust.io:brand:4242. La règle publique du format did:web traduit cet identifiant en l'adresse https://api.sealtrust.io/brand/4242/did.json, c'est-à-dire ce point d'entrée. N'importe quelle bibliothèque did:web standard fait cette traduction sans rien connaître de SealTrust.

#Autorisation

Aucune, point d'entrée public. Vous n'envoyez ni clef d'API, ni session, ni en-tête d'origine. La réponse est la même pour tout le monde.

Le document ne contient que des clefs publiques. Aucune clef privée ne sort de notre système, et aucune n'est reconstructible depuis ce document.

#Plafond d'appels

Ce point d'entrée n'a pas de plafond qui lui soit propre. Il partage avec les autres routes sans plafond propre un compteur général, compté par adresse réseau appelante sur une tranche de 60 secondes.

Prévoyez le code 429 dans votre client et respectez l'en-tête Retry-After qu'il porte. La valeur du compteur général peut changer sans préavis, donc n'inscrivez aucun nombre en dur dans votre code.

La réponse porte trois en-têtes qui décrivent ce compteur.

En-têteContenu
X-RateLimit-Limitle plafond que le compteur général annonce pour la fenêtre
X-RateLimit-Remainingce qu'il vous reste dans la fenêtre en cours
X-RateLimit-Resetl'horodatage de fin de la fenêtre, en secondes

Ce document change seulement quand la marque renouvelle ses clefs de signature, ce qui est rare. Gardez-en une copie de votre côté. Rafraîchissez-la quand un justificatif porte un kid que votre copie ne contient pas.

#Paramètres de chemin et de requête

NomTypeObligatoireDescription
brand_idintegerouiL'identifiant numérique de la marque. C'est le nombre qui suit brand: dans l'identifiant d'émetteur du justificatif signé.

Ce point d'entrée n'a aucun paramètre de requête.

#En-têtes

Aucun en-tête n'est requis.

#Corps de la requête

Aucun. Cette requête n'a pas de corps.

#Requête d'exemple

Document d'identité de la marque dont l'identifiant est 4242.

curl -i https://api.sealtrust.io/v1/brand/4242/did.json

#Réponse d'exemple

Code HTTP 200OK

Code HTTP 200. Le corps est du JSON, servi avec l'en-tête Content-Type: application/json.

Ici, la marque Exemple SAS a renouvelé sa clef une fois. Les deux versions restent publiées, donc les justificatifs signés sous l'ancienne restent vérifiables.

JSON
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/jws-2020/v1"
  ],
  "id": "did:web:api.sealtrust.io:brand:4242",
  "verificationMethod": [
    {
      "id": "did:web:api.sealtrust.io:brand:4242#key-1",
      "type": "JsonWebKey2020",
      "controller": "did:web:api.sealtrust.io:brand:4242",
      "publicKeyJwk": {
        "kty": "EC",
        "crv": "P-256",
        "x": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
        "y": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
      }
    },
    {
      "id": "did:web:api.sealtrust.io:brand:4242#key-2",
      "type": "JsonWebKey2020",
      "controller": "did:web:api.sealtrust.io:brand:4242",
      "publicKeyJwk": {
        "kty": "EC",
        "crv": "P-256",
        "x": "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC",
        "y": "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
      }
    }
  ],
  "assertionMethod": [
    "did:web:api.sealtrust.io:brand:4242#key-1",
    "did:web:api.sealtrust.io:brand:4242#key-2"
  ],
  "authentication": [
    "did:web:api.sealtrust.io:brand:4242#key-1",
    "did:web:api.sealtrust.io:brand:4242#key-2"
  ]
}

Les cinq champs de premier niveau sont toujours présents.

ChampTypeDescription
@contextstring[]Les deux vocabulaires qui donnent leur sens aux champs du document. Toujours ces deux valeurs, dans cet ordre.
idstringL'identifiant de la marque, au format did:web. C'est la valeur que porte le champ émetteur d'un justificatif signé.
verificationMethodobject[]Une entrée par clef publique publiée, de la plus ancienne version à la plus récente.
assertionMethodstring[]Les identifiants des clefs autorisées à signer un justificatif. Reprend les mêmes entrées que verificationMethod, dans le même ordre.
authenticationstring[]Les identifiants des clefs autorisées à prouver le contrôle de cet identifiant. Reprend les mêmes entrées.

#Une entrée de verificationMethod

ChampTypeDescription
idstringL'identifiant de la clef, de la forme <identifiant de la marque>#key-<numéro de version>.
typestringToujours JsonWebKey2020.
controllerstringL'identifiant de la marque qui contrôle cette clef. Vaut toujours le champ id du document.
publicKeyJwkobjectLa clef publique elle-même, au format JWK.

publicKeyJwk porte quatre champs : kty vaut EC, crv vaut P-256, x et y sont les deux coordonnées du point public, encodées en base64url. Ces valeurs se passent telles quelles à une bibliothèque de vérification JWS.

#Retrouver la clef qui a signé un justificatif

L'en-tête d'un justificatif de passeport porte un champ kid. Ce kid vaut exactement l'un des id de verificationMethod, par exemple did:web:api.sealtrust.io:brand:4242#key-2. Vous cherchez cette valeur dans la liste, vous prenez le publicKeyJwk correspondant, et vous vérifiez la signature avec l'algorithme ES256.

Si le kid ne figure pas dans la liste, la signature doit être rejetée.

#Ce que dit l'absence d'une clef

Une clef révoquée sort du document. Tous les justificatifs signés sous cette version cessent d'être vérifiables, et c'est le résultat voulu.

Une clef remplacée par une version plus récente reste publiée. Elle n'est plus utilisée pour signer de nouveaux justificatifs, et les anciens continuent de se vérifier.

verificationMethod peut être une liste vide, avec assertionMethod et authentication vides eux aussi. Cela veut dire que la marque n'a encore publié aucune clef de signature. Aucun justificatif de cette marque n'est alors vérifiable.

#Quand le champ id ne correspond pas à l'adresse appelée

Une marque peut porter son identité sur son propre nom de domaine. Le champ id du document vaut alors did:web:<son domaine>, et le document de référence se trouve à https://<son domaine>/.well-known/did.json.

Dans ce cas, prenez le champ id du justificatif que vous vérifiez comme point de départ, appliquez la règle de traduction did:web, et allez chercher le document à l'adresse obtenue. Ne construisez jamais l'adresse vous-même à partir de l'identifiant de marque.

#Erreurs

Le corps d'une réponse d'erreur porte un champ detail. Toute réponse de ce point d'entrée, réussie ou en erreur, porte un en-tête X-Request-Id.

CodeConditionQue faire
404Aucune marque ne porte cet identifiant. detail vaut Brand not found.Vérifiez le nombre qui suit brand: dans l'identifiant d'émetteur. Rejetez la signature : un émetteur dont le document d'identité est introuvable ne prouve rien.
422La valeur envoyée dans le chemin n'est pas un nombre entier. detail porte la liste des erreurs de validation, avec le nom du paramètre en cause.Corrigez l'identifiant. Un identifiant de marque s'écrit uniquement en chiffres.
422Le document d'identité de la marque trouvée ne peut pas être construit.Signalez-le au support en indiquant l'identifiant appelé. Vous ne pouvez rien corriger de votre côté.
500Une erreur inattendue s'est produite pendant le traitement de votre appel. detail vaut Internal Server Error.Réessayez. Si l'erreur persiste, contactez le support en indiquant la valeur de X-Request-Id.

Ce point d'entrée ne renvoie ni 401, ni 403 : il est public et ne lit aucune autorisation.

#Voir aussi

Votre réponse ouvre un courriel pré-rempli dans votre messagerie, à destination de contact@sealtrust.io. Vous le relisez avant de l'envoyer.

Proposer une correctionSignaler un problème