Securité
La sécurité est assurée par un jeton généré par votre application. Ce jeton utilise des données spécifiques fournies par l’équipe Pixink, garantissant l’authentification des échanges entre vous et l’API, ainsi que dans le processus d’utilisation de l’atelier.
Utilisation de l’API :
L’utilisation de l’API se fait de manière classique en REST. Le server distant génère le jeton d’authentification et l’intègre dans un en-tête Authorization avec la valeur “Bearer -JWT_TOKEN”.
Toutes les endpoints authentifiées sont marquées d’un badge authenticated dans la doc API.
Traitement du POST par l’atelier :
Le site distant génère le jeton d’authentification et l’intègre dans payload du POST. L’atelier charge toutes les ressources en conséquence, en tenant compte de l’identification du jeton. Cela garantit la sécurité du chargement des ressources et la mise en forme de l’atelier grâce à l’application des droits associés au payload et au jeton.
Jeton d’authentification
Les jetons valides sont des JSON Web Token JWT avec les champs spécifiés ci-dessous :
- “iss” : chaîne, clé d’identification de l’environnement d’accès
- ”iat” : entier, horodatage de génération du JWT
- ”exp” : entier, horodatage d’expiration du JWT
- ”aud” : chaîne, clé d’identification du serveur API
- ”sub” : chaîne, clé d’identification de l’accès
Création du JWT
L’exemple ci-dessous illustre le processus de génération d’un JSON Web Token JWT en utilisant un algorithme de signature HMAC-SHA256. Un JWT est un mécanisme sécurisé pour échanger des informations entre parties de confiance de manière compacte et autonome. Ce processus est couramment utilisé pour l’authentification et l’autorisation dans les applications Web et les services backend. Le code fourni démontre une implémentation simple et sécurisée pour créer un JWT, en incluant des informations pertinentes dans le payload telles que l’émetteur, le sujet, la date de création et d’expiration du token.
Exemple :
<?phpfunction base64UrlEncode($data) { $urlSafeData = strtr(base64_encode($data), '+/', '-_'); return rtrim($urlSafeData, '=');}
$header = json_encode(['alg' => 'HS256', 'typ' => 'JWT']);$payload = json_encode([ 'iss' => "La key d'identification de l'environnement", 'iat' => "Le timestamp de génération du token", 'exp' => "Le timestamp d'expiration du token", 'aud' => "La key d'identification du serveur", 'sub' => "Votre key d'identification"]);
$headerEnc = base64UrlEncode($header);$payloadEnc = base64UrlEncode($payload);
$dataToSign = $headerEnc . '.' . $payloadEnc;
$signatureKey = "key secrète de signature";$signature = hash_hmac('sha256', $dataToSign, $signatureKey, true);$signatureEnc = base64UrlEncode($signature);
$token = $headerEnc . '.' . $payloadEnc . '.' . $signatureEnc;
echo $token;?>import * as CryptoJS from "crypto-js";export const createJWT = async (): Promise<any> => { const header = { alg: "HS256", typ: "JWT" }; const payload = { iss: "La key d'identification de l'environnement", iat: "Le timestamp de génération du token", exp: "Le timestamp d'expiration du token", aud: "La key d'identification du serveur", sub: "Votre key d'identification", }; try { // Encodage en base64 URL-safe du header et du payload const headerEnc: string = base64UrlEncode(JSON.stringify(header)); const payloadEnc: string = base64UrlEncode(JSON.stringify(payload));
// Concaténation du headerEnc et du payloadEnc const dataToSign: string = `${headerEnc}.${payloadEnc}`;
const signatureKey: string = "key secrète de signature"; const signature: any = CryptoJS.HmacSHA256(dataToSign, signatureKey); const signatureEnc: string = base64url(signature);
// Création du token final const token: string = `${headerEnc}.${payloadEnc}.${signatureEnc}`;
// Utilisation du token comme nécessaire return token; } catch (error) { throw error; }};