Temps de lecture estimé: 5 minutes
Salut !!
j’avais déjà utilisé l’api d’OVH pour créer un Token pour manipuler mes zones DNS dans le cadre de la mise en place d’un certificat SSL Wildcard Let’s Encrypt.
Récemment, j’ai aussi mis en place le renouvellement automatique d’un certificat Let’s Encrypt pour mon homelab VMware ESXi.
puis je me suis dis que j’allais m’occuper de mon NAS Synology pour lequel je remplace manuellement le certificat tous les 90 jours (Je prépare un article pour la mise en place d’un renouvellement automatique)
En tâtonnant sur cette mise en place, j’ai créé quelques Tokens d’accès pour mes tests. maintenant qu’ils sont créés, je ne trouvais pas de moyen de les lister ou les supprimer.
Après quelques recherches, je suis tombé sur des articles de ce genre (sans réponse)
- https://community.ovhcloud.com/community/fr/api-lister-les-tokens-crees-sur-un-compte-ovh?id=community_question&sys_id=edb5b10c9d5e4e901e11a21128f2cf25
- https://linuxfr.org/forums/general-general/posts/suppression-application-api-ovh
Donc je me suis dit que je n’étais pas le seul
Après, la réponse n’était pas forcement très loin non plus
dans cet article je vais reprendre quelques bases sur l’API OVH en m’inspirant du guide ci-dessus et expliquer comment configurer Postman pour appeler directement l’API OVH.
Comment lister les applications de l’API OVH
pour ça, il suffit de se rendre sur la documentation de l’API OVH. Depuis cette interface, tu peux t’authentifier et tester les endpoints directement.
comme:
- Lister les IDs des clés avec l’appel suivant: GET /me/api/application
- Obtenir les détails d’une clé avec l’appel suivant: GET /me/api/application/{applicationId}
- Révoquer une clé avec l’appel suivant : DELETE /me/api/application/{applicationId}
Configurer Postman pour utiliser l’API OVH
OK on peut tester des appels depuis la spécification de l’API OVHcloud. mais maintenant pour aller un peu plus loin j’aimerai configurer Postman.
Créer une application
rendez vous sur https://api.ovh.com/createApp/ pour créer une application et récupérer l’Application key
et l'Application secret
Bien sur ces données doivent rester confidentielles !! Et ne t’inquiète pas, le screenshot c’est pour l’exemple, j’ai depuis supprimé l’application en question!!
Initialiser Postman
dans Postman, j’ai créé une nouvelle collection pour l’API d’OVH
ce qui me permet de définir des variables de Collection avec leur valeur pour
- applicationKey (récupérée précédemment)
- applicationSecret (récupéré précédemment)
- serviceUrl (https://eu.api.ovh.com/v1 dans mon cas )
- consumerKey (vide pour l’instant)
pour en savoir plus sur les variables Postman, c’est par ici
Demande de credentials
avant de pouvoir faire des appels à l’API, un premier appel est nécessaire pour obtenir des credentials, la consumerKey et une url pour l’autorisation. ça se fait avec le endpoint POST auth/credential.
je créer donc une nouvelle requête dans ma collection en utilisant les variables que j’ai créées juste avant.
- c’est une requête
POST
- sur l’url
{{serviceUrl}}/auth/credential
- j’ajoute au headers
X-Ovh-Application
avec comme valeur{{applicationKey}}
- et un body Json conforme à la documentation et pour les besoins de cet article:
{
"accessRules": [
{"method": "GET", "path": "/me"},
{"method": "GET", "path": "/me/*"},
{"method": "DELETE", "path": "/me/*"},
{"method": "POST", "path": "/me/*"},
{"method": "GET", "path": "/auth/*"}
],
"allowedIPs": [
"85.110.101.72/24",
"137.255.113.214/24"
]
}
Après envoi, j’ai obtenu une réponse similaire à celle-ci:
{
"consumerKey": "f006d91e00131292db3708027d2d58dc",
"validationUrl": "https://www.ovh.com/auth/sso/api?credentialToken=c618532a19aed7f73b913e6001ad56c9273af405d300186740a0ec030f9ae1d4",
"state": "pendingValidation"
}
j’ouvre le lien dans mon navigateur pour valider l’autorisation
j’ai validé l’autorisation, je peux maintenant ajouter la consumerKey à ma variable Postman et j’ai toutes les variables qu’il me faut.
Comment lister et supprimer les credentials et les applications
maintenant, nous avons tout ce qu’il faut pour effectuer un « vrai » appel. moi j’ai ajouté tout ce qu’il fallait pour gérer l’authentification insi que tout ce qui est nécessaire pour lister et supprimer mes applications et mes credentials créés précédemment.
Ajouter les headers X-Ovh-Timestamp et X-Ovh-Signature
à partir de maintenant, pour appeler l’API, il faut ajouter aux appels une signature et le timestamp correspondant. ces headers sont construits dynamiquement, Pour cela, on va utiliser les scripts Pre-request de Postman.
je te mets directement le script ci dessous:
var CryptoJS = require('crypto-js');
pm.sendRequest({
url: "https://api.ovh.com/1.0/auth/time",
method: "GET",
headers: {
'Content-Type': 'application/json; charset=utf-8'
},
body: {}
},
function (err, res) {
pm.expect(err).to.not.be.ok;
pm.expect(res).to.have.property('code', 200);
pm.expect(res).to.have.property('status', 'OK');
console.log("err:");
console.log(err);
console.log("res:");
console.log(res);
var serverTimestamp = res.text();
console.log("serverTimestamp");
console.log(serverTimestamp);
var time_delta = serverTimestamp - Math.round(new Date().getTime()/1000);
console.log("time_delta");
console.log(time_delta);
var now = Math.round(new Date().getTime()/1000) + time_delta;
console.log("now");
console.log(now);
const appSecret = pm.collectionVariables.get("applicationSecret");
const appKey = pm.collectionVariables.get("applicationKey");
const consumerKey = pm.collectionVariables.get("consumerKey");
const serviceUrl = pm.collectionVariables.get("serviceUrl");
const method = pm.request.method;
const url = pm.request.url.toString().replace('{{serviceUrl}}', serviceUrl);
const body = pm.request.body && pm.request.body.raw ? pm.request.body.raw : "";
const toSign = [appSecret, consumerKey, method, url, body, now].join("+");
console.log("toSign");
console.log(toSign);
const signature = "$1$" + CryptoJS.SHA1(toSign).toString();
pm.request.headers.add({ key: "X-Ovh-Timestamp", value: now });
pm.request.headers.add({ key: "X-Ovh-Signature", value: signature });
}
);
Rien de bien sorcier. J’ai d’abord ajouté des console.log
pour suivre les étapes de la construction de ma signature, que je peux retrouver dans la console de Postman.
Ensuite, pour continuer avec l’explication du script :
- on appelle l’API OVH pour connaître le timestamp d’OVH.
- Cela nous permet de calculer le delta avec notre PC (s’il y en a un) et de générer la signature correcte avec le bon timestamp.
- On récupère les variables nécessaires pour construire la signature.
- On construit la signature au format attendu.
- On ajoute les headers
X-Ovh-Timestamp
etX-Ovh-Signature
à la requête.
Voilà, à partir de là, le champ des possibles est ouvert.
Lister les credentials créés pour l’API d’OVH
Avec ce script Pre-request et les variables définies, tu peux maintenant lister et obtenir les détails de tous les credentials déjà créés.
déjà lister avec le endpoint GET /me/api/credential
Récupérer les détails d’un credential créé pour l’API d’OVH
Ensuite, tu peux obtenir les détails d’un credential spécifique que tu as créé en utilisant le endpoint GET /me/api/credential/{credentialId}
Supprimer un credential créé pour l’API d’OVH
et finalement, pour supprimer une autorisation / un credential, utilise le endpoint DELETE /me/api/credential/{credentialId}
Lister les applications créées pour l’API d’OVH
Après les credentials, tu peux faire la même chose avec les applications que tu as déjà créées avec le endpoint GET /me/api/application
Récupérer les détails d’une application créée pour l’API d’OVH
de la même manière, tu peux obtenir les détails d’une application spécifique que tu as créées avec le endpoint GET /me/api/application/{applicationId}
Supprimer une application créée pour l’API d’OVH
et pour finir, pour supprimer une application, utilise le endpoint DELETE /me/api/application/{applicationId}
Pour aller plus loin
l’article touche à sa fin. Pour aller plus loin, tu peux explorer tous les endpoints disponibles depuis la page OVHcloud API specification. Si tu développes tu peux également te faire tes propres outils en utilisant les wrappers disponibles pour différents langages.
Voilà ! Si tu es arrivé jusqu’ici, j’espère que cet article t’a été utile ! N’hésite pas à me faire un retour s’il t’a aidé ou s’il y a une correction à apporter.
En attendant je te dis à bientôt pour de nouvelles aventures!!