Contrat de l’API de Licences Silo (jservices-api)
Ce document décrit la structure de l’artefact de licence retourné par le central J+SERVICES aux silos partenaires.
L’artefact de licence est signé à l’aide de l’algorithme cryptographique Ed25519.
Route de récupération de la licence
- Méthode :
GET - Chemin :
/api/v1/silo/license - Authentification : Jeton de nœud partenaire (tier2_node)
Structure de l’Artefact
{
"algorithm": "ed25519",
"payload": {
"license_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"provider_slug": "demo-partner",
"services": [
"pwa",
"radius",
"tiketmomo",
"vpn"
],
"options": {
"in_app_store": true,
"white_label": false
},
"licences": {
"VPN": 100,
"TIKETMOMO": 50,
"MIKHMOAI_PRO": 20,
"PWA": 50
},
"counted_as": "router",
"issued_at": "2026-10-02T10:00:00.000Z",
"expires_at": "2026-10-03T10:00:00.000Z",
"grace_hours": 72,
"stack_version_min": "1.0.0",
"domains": [
"app.demo-partner.com",
"portal.demo-partner.com"
],
"service_expires_at": {
"pwa": "2027-10-02T10:00:00.000Z",
"radius": "2027-10-02T10:00:00.000Z",
"tiketmomo": "2027-10-02T10:00:00.000Z",
"vpn": "2027-10-02T10:00:00.000Z"
}
},
"signature": "base64url_encoded_signature_here"
}
Champs du Payload
license_id: Identifiant unique de la licence (UUID).provider_slug: Identifiant unique du partenaire.services: Liste triée alphabétiquement des produits actifs (non expirés). Ne contient que les produits pour lesquels le partenaire a souscrit un abonnement actif. Valeurs possibles :"pwa","radius","tiketmomo","vpn".options: Options commerciales (ex. marque blanchewhite_label).licences: Quotas de licences par type de produit.issued_at/expires_at: Dates d’émission et d’expiration de l’artefact lui-même (TTL court, généralement 24h).grace_hours: Heures de grâce accordées en cas de perte de connectivité avec le central.domains: Liste optionnelle des noms de domaines autorisés pour les applications web de ce partenaire (ex. la PWA). Les domaines sont toujours en minuscules et triés.service_expires_at: Dates d’expiration spécifiques à chaque produit souscrit. L’abonnement étant annuel et renouvelable indépendamment, chaque service possède sa propre date de fin.
Validation de la signature
La signature est effectuée sur la chaîne JSON canonique du payload. Les clés d’un objet JSON canonique doivent être triées par ordre alphabétique et sans espaces inutiles.
L’application consommatrice (ex: PWA ou backend PWA) doit vérifier que la signature correspond au JSON canonique du payload, à l’aide de la clé publique Ed25519 du serveur central.