Les comptes de service permettent aux applications externes d'accéder de manière sécurisée à l'API RDE sans intervention humaine. Ils utilisent une authentification par clé API avec signature HMAC pour garantir la sécurité des échanges.
Caractéristiques des comptes de service
🔑 Authentification
🛡️ Permissions
🌐 Instance de sécurité
Étapes de création
Important : Le secret n'est affiché qu'une seule fois lors de la création
La signature HMAC SHA-256 doit être calculée sur le payload suivant :
payload = METHOD + INSTANCE + URL + TIMESTAMP + BODY
Exemple :
POST + "prod-rde-001" + "/api/structures" + "1642678800" + "{"name":"Structure 1"}"
Puis encodé en base64.
const crypto = require('crypto');
function generateHmacSignature(method, instanceId, url, timestamp, body, secret) {
const payload = `${method}${instanceId}${url}${timestamp}${body}`;
const signature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('base64');
return signature;
}
// Utilisation
const method = 'POST';
const instanceId = 'prod-rde-001';
const url = '/api/structures';
const timestamp = Math.floor(Date.now() / 1000).toString();
const body = JSON.stringify({ name: 'Structure 1' });
const secret = 'votre-secret-ici';
const signature = generateHmacSignature(method, instanceId, url, timestamp, body, secret);
// Headers de la requête
const headers = {
'Authorization': `Service ${accountKey}`,
'X-Timestamp': timestamp,
'X-Signature': signature,
'Content-Type': 'application/json'
};
import hmac
import hashlib
import base64
import time
import json
def generate_hmac_signature(method, instance_id, url, timestamp, body, secret):
payload = f"{method}{instance_id}{url}{timestamp}{body}"
signature = hmac.new(
secret.encode('utf-8'),
payload.encode('utf-8'),
hashlib.sha256
).digest()
return base64.b64encode(signature).decode('utf-8')
# Utilisation
method = 'POST'
instance_id = 'prod-rde-001'
url = '/api/structures'
timestamp = str(int(time.time()))
body = json.dumps({'name': 'Structure 1'})
secret = 'votre-secret-ici'
signature = generate_hmac_signature(method, instance_id, url, timestamp, body, secret)
# Headers de la requête
headers = {
'Authorization': f'Service {account_key}',
'X-Timestamp': timestamp,
'X-Signature': signature,
'Content-Type': 'application/json'
}
using System;
using System.Security.Cryptography;
using System.Text;
public static string GenerateHmacSignature(string method, string instanceId, string url, string timestamp, string body, string secret)
{
var payload = $"{method}{instanceId}{url}{timestamp}{body}";
using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(payload));
return Convert.ToBase64String(hash);
}
// Utilisation
var method = "POST";
var instanceId = "prod-rde-001";
var url = "/api/structures";
var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
var body = "{\"name\":\"Structure 1\"}";
var secret = "votre-secret-ici";
var signature = GenerateHmacSignature(method, instanceId, url, timestamp, body, secret);
// Headers de la requête
var headers = new Dictionary<string, string>
{
["Authorization"] = $"Service {accountKey}",
["X-Timestamp"] = timestamp,
["X-Signature"] = signature,
["Content-Type"] = "application/json"
};
403 Forbidden
401 Unauthorized
400 Bad Request
Validation du payload
Pour déboguer une signature incorrecte, vérifiez l'ordre exact du payload :
METHOD + INSTANCE_ID + URL_WITH_QUERY + TIMESTAMP + REQUEST_BODY
Exemple :
Sécurité
Monitoring
Développement