Jeton de rafraîchissement : Maintien de l'accès aux applications et services
Introduction
Un jeton de rafraîchissement est utilisé pour maintenir l'accès à une application ou à un service sans que l'utilisateur ait besoin de se reconnecter à chaque fois. Après l'expiration d'un jeton d'accès, le jeton de rafraîchissement peut être utilisé pour obtenir un nouveau jeton d'accès sans que l'utilisateur n'ait à saisir à nouveau ses informations de connexion. Cela permet de maintenir une connexion sécurisée et conviviale à l'application sans nécessiter de nouveaux processus de connexion constants.
Processus
Après que l'utilisateur s'est connecté avec succès à l'application, le client reçoit un jeton d'accès et un jeton de rafraîchissement. Le jeton d'accès a une durée de validité limitée, tandis que le jeton de rafraîchissement reste valide plus longtemps. Lorsque le jeton d'accès expire, le client envoie une requête POST au point de terminaison de jeton du serveur d'autorisation. Dans cette requête, le client transmet le jeton de rafraîchissement ainsi que l'ID client et le secret client. Le serveur vérifie la validité du jeton de rafraîchissement et, si tout est correct, il émet un nouveau jeton d'accès. Ce nouveau jeton peut ensuite être utilisé pour continuer à accéder aux ressources protégées sans que l'utilisateur ait besoin de se reconnecter.
Exemple de code pour un jeton de rafraîchissement en Python
import requests
import time
def get_new_access_token(refresh_token, client_secret):
url = "https://oauth2.hin.ch/REST/v1/OAuth/GetAccessToken"
payload = f'grant_type=refresh_token&refresh_token={refresh_token}&client_id=ch.2ndlevel-cc&client_secret={client_secret}'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Cookie': 'ObSSOCookie=/examplee0Sgr3R5FiCiOt+cexample-'
}
response = requests.post(url, headers=headers, data=payload)
print(response.text)
if response.status_code == 200:
token_data = response.json()
new_access_token = token_data['access_token']
# Optionnel : Renvoyer un nouveau jeton de rafraîchissement s'il est présent
new_refresh_token = token_data.get('refresh_token', refresh_token)
return new_access_token, new_refresh_token
else:
print(f"Erreur lors de la récupération du jeton : {response.status_code} - {response.text}")
return None, refresh_token
# Exemple de boucle qui renouvelle régulièrement le jeton d'accès
def main():
refresh_token = 'rteqr4' # Votre jeton de rafraîchissement initial
client_secret = 'votre_client_secret' # Votre secret client
while True:
# Ici viendrait le code pour utiliser le jeton d'accès
print("Utilisation du jeton d'accès pour accéder aux ressources...")
# Obtenir un nouveau jeton d'accès
new_access_token, refresh_token = get_new_access_token(refresh_token, client_secret)
if new_access_token:
print(f"Nouveau jeton d'accès obtenu : {new_access_token}")
# Ici, vous pouvez continuer à utiliser le nouveau jeton d'accès
else:
print("Erreur lors du renouvellement du jeton. Veuillez vérifier les informations de connexion.")
break # Arrêter la boucle si le jeton n'a pas pu être renouvelé
# Délai d'attente pour renouveler régulièrement le jeton d'accès
time.sleep(3600) # Par exemple, attendre 1 heure avant de renouveler à nouveau le jeton
if __name__ == "__main__":
main()