====== Implémentation ======
Il est possible d'utiliser à peu près n'importe quel langage de programmation pour utiliser l'API. Nous donnons ci-après quelques exemples en langage Javascript, avec la librairie JQuery.
Les communications avec l'API passent par des requêtes HTTPS GET. Le format d'échange utilisé est le format JSON.
===== Authentification =====
**Preambule**
Deux standards sont employés dans le but de sécuriser l'API :
* HTTP Basic Authentication
* OAuth 2.0 JWT, avec échange de Token
**Principe général**
- On commence par transmettre des informations d'authentification initiale à l'API (login et mot de passe). L'API vérifie les droits de la personne à utiliser l'API et, le cas échéant lui retourne un ''access_token'' et un ''refresh_token''.
- Le ''access_token'' est un identifiant unique qui sert de laisser-passer pour tout appel ultérieur à l'API. Il a une durée de vie relativement courte (de l'ordre de l'heure). Au delà, un nouvel appel à l'API provoquera une erreur.
- Le ''refresh_token'' sert à demander à l'API un nouvel ''access_token'', typiquement quand ce dernier a expiré. Il a donc une durée de vie beaucoup plus longue.
**
Pour en savoir plus sur JWT**
* Référence [[https://tools.ietf.org/html/rfc7519|RFC 7519]]
* Présentation sur [[https://jwt.io/introduction|jwt.io]]
* Schémas illustrant l'échange de token sur [[https://blog.ippon.fr/2017/10/12/preuve-dauthentification-avec-jwt|ce billet de blog]].
===== Exemples avec la librairie JQuery (v3.5.1) =====
==== 1 - Authentification initiale ====
$.ajax({
method: 'POST',
url: 'https://secure.bayard-service.com/annuaire_/oauth/token',
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
crossDomain:true,
dataType: 'json',
data: {
grant_type: 'password',
username: 'xxxxx', // Login Adel
password: 'xxxxx', // Mot de passe Adel
client_id: 'xxxxx', // Basic-auth : id
client_secret: 'xxxxx' // Basic-auth : mot de passe
},
success: function (data) {
console.log('success', data);
},
error: function (e) {
console.log('error', e.responseText);
}
});
Si l'authentification réussit, vous obtiendrez un retour de la forme :
{
"access_token": "azertyiJIhyhyNiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiand0cmVzb3VyY2VpZCJdLCJ1c2VyX25hbWUiOiJqbGFuZnJleSIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInRydXN0Il0sImV4cCI6MTYxMjU0NDA1MSwiYXV0aG9yaXRpZXMiOlsic3lzX2dsb2JhbF9hZG1pbmlzdHJlciIsIlJPTEVfc3lzX2FkbWluIl0sImp0aSI6IjJiV1lwdEazertyXJ4Nm1hSSIsImNsaWVudF9pZCI6Imp3dGNsaWVudGlkIn0.x6gJRCbsOVVkpnsYduVL9QldGK0qPgW-Hql8mjcqBiQ",
"token_type": "bearer",
"refresh_token": "azertyzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiand0cmVzb3VyY2VpZCJdLCJ1c2VyX25hbWUiOiJqbGFuZnJleSIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInRydXN0Il0sImF0aSI6IjJiV1lwdEQ0QkdaSXJqaFplYTlpTXJ4Nm1hSSIsImF1dGhvcml0aWVzIjpbInN5c19nbG9iYWxfYWRtaW5pc3RyZXIiLCJST0xFX3N5c19hZG1pbiJdLCJqdGkiOiJvd1RkamQwZ3dUTU51MTg3ckNPRlRxT0ZwWHMiLCJjbGllbnRfaWQiOiJqd3RjbGllbnRpZCJ9.hT4WZ5yjloX5zH0Ko6c7WaTWD-ImGQYlmFxsInHVQqU",
"expires_in": 3559,
"scope": "read write trust",
"jti": "azertyD4BGZIrjhZea9iMrx6maI"
}
==== 2 - Utilisation de l'API ====
Vous êtes désormais en mesure d'appeler les différentes routes de l'API en transmettant le ''access_token'' à chaque appel.
$.ajax({
method: 'GET',
url: 'https://secure.bayard-service.com/annuaire_/api/v1/personnes/123',
dataType: 'json',
crossDomain:true,
data: {},
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization','Bearer ' + store.access_token);
},
success: function (data) {
console.log('success', data);
},
error: function (e) {
console.log('error', e.responseText);
}
});
Si vous utilisez votre ''access_token'' alors que ce dernier a expiré, qu'il n'est plus valide, vous obtiendrez un retour d'erreur de ce type :
{"error":"invalid_token","error_description":"Access token expired: azertyiJIhyhyNiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiand0cmVzb3VyY2VpZCJdLCJ1c2VyX25hbWUiOiJqbGFuZnJleSIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInRydXN0Il0sImV4cCI6MTYxMjU0NDA1MSwiYXV0aG9yaXRpZXMiOlsic3lzX2dsb2JhbF9hZG1pbmlzdHJlciIsIlJPTEVfc3lzX2FkbWluIl0sImp0aSI6IjJiV1lwdEazertyXJ4Nm1hSSIsImNsaWVudF9pZCI6Imp3dGNsaWVudGlkIn0.x6gJRCbsOVVkpnsYduVL9QldGK0qPgW-Hql8mjcqBiQ"}
==== 3 - Actualisation du ''access_token'' ====
Si votre ''access_token'' est invalide, vous devez en demander un nouveau en utilisant le ''refresh_token''.
$.ajax({
method: 'POST',
url: 'https://secure.bayard-service.com/annuaire_/oauth/token',
contentType:'application/x-www-form-urlencoded; charset=utf-8',
data: {
grant_type: 'refresh_token',
refresh_token: store.refresh_token, // Le refresh_token
client_id: 'xxxxx', // Basic-auth : id
client_secret: 'xxxxx' // Basic-auth : mot de passe
},
success: function (data) {
console.log('success', data);
},
error: function (e) {
console.log('error', e.responseText);
}
});
Le retour est similaire à celui obtenu lors de l'authentification initiale.