FR / DE / EN

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()