Authentification HMAC

Le framework d’API RESTful d’Elgg fournit des fonctions pour prendre en charge un schéma de signature HMAC pour l’authentification API. Le client doit envoyer la signature HMAC ainsi qu’un ensemble d’en-têtes HTTP spéciaux lors de l’exécution d’un appel qui nécessite l’authentification API. Cela garantit que l’appel API est effectué à partir du client déclaré et que les données n’ont pas été falsifiées.

Le HMAC doit être construit à partir des données suivantes :

  • La clef d’API publique qui vous identifie auprès du serveur api d’Elgg tel que fourni par le plugin APIAdmin

  • La clef d’API privée fournie par Elgg (qui accompagne la clef publique)

  • L’heure unix actuelle en secondes

  • Une valeur créée pour l’occasion pour garantir que deux requêtes faites à la même seconde ont des signatures différentes

  • Une représentation de la chaîne encodée pour l’URL de n’importe quels paramètres variables GET, par ex. method=test.test&foo=bar

  • Si vous envoyez des données post, le hash de ces données

Quelques informations supplémentaires doivent être ajoutées à l’entête HTTP pour que ces données soient traitées correctement :

  • X-Elgg-apikey - La clef d’API publique

  • X-Elgg-time - L’heure Unix utilisée dans le calcul HMAC

  • X-Elgg-none - un chaîne aléatoire

  • X-Elgg-hmac - Le HMAC encodé en base64

  • X-Elgg-hmac-algo - L’algorithme utilisé dans le calcul HMAC - par ex., sha1, md5, etc.

Si vous envoyez des données POST vous devez également envoyer :

  • X-Elgg-posthash - Le hash des données POST

  • X-Elgg-posthash-algo - L’algorithme utilisé pour produire le hash des données POST - par ex., md5

  • Content-type - Le type de contenu des données que vous envoyez (en cas de doute, utilisez application/octet-stream)

  • Content-Length - La longueur et octets de vos données POST

Elgg fournit un exemple de client d’API qui implémente cette signature HMAC : send_api_call(). Il constitue un bon point de départ sur comment l’implémenter.