Passer au contenu principal

Renouvellement du jeton d'accès

Lorsque vous développez une application qui fonctionne plus longtemps que la durée de vie du jeton d'accès, vous devez gérer le renouvellement du jeton. Pour savoir quand le jeton doit être renouvelé, la propriété expires_in dans la réponse du point de terminaison du jeton doit être utilisée.

Une bonne pratique consiste à utiliser le même jeton pour plusieurs requêtes jusqu'à ce qu'il soit proche de l'expiration.

L'exemple de code suivant implémente le renouvellement du jeton d'accès 10 secondes avant son expiration.

import axios, { InternalAxiosRequestConfig } from 'axios';
import { Issuer, TokenSet } from 'openid-client'

const authenticator = (client_id: string, client_secret: string, token_endpoint: string) => {
let tokenSet: null | TokenSet = null;

const issuer = new Issuer({
issuer: "",
token_endpoint,
});

const client = new issuer.Client({
client_id,
client_secret,
});

return async (config: InternalAxiosRequestConfig) => {
if (tokenSet == null || (tokenSet.expires_in ?? 0) < 10) {
tokenSet = await client.grant({
grant_type: 'client_credentials'
});
}
config.headers.Authorization = `Bearer ${tokenSet.access_token}`;
return config;
}
}

const instance = axios.create({
baseURL: 'https://<platform-hostname>',
});

instance.interceptors.request.use(authenticator(
'<client-id>',
'<client-secret>',
"https://<platform-hostname>/users-auth/protocol/openid-connect/token",
));

const devices = await instance.get('/thingpark/wireless/rest/subscriptions/mine/devices');