DE / EN / FR

7.1 Verwendung von Refresh Token

Ist das Refresh-Token für eine Client-ID aktiviert, sieht die Antwort auf den initialen Bezug des Access-Tokens folgendermassen aus:

{
  "access_token":"ACCESSTOKEN",
  "expires_in":3600,
  "hin_id": "clientid",
  "refresh_token": "REFRESHTOKEN",
  "token_type": "Bearer"
}

Beispiel-Code für die Verwendung von Refresh Token in Python

import requests
import time

def get_new_access_token(refresh_token, client_id, client_secret):
    url = "https://oauth2.hin.ch/REST/v1/OAuth/GetAccessToken"
    
    payload = f'grant_type=refresh_token&refresh_token={refresh_token}&client_id={client_id}&client_secret={client_secret}'
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }

    response = requests.post(url, headers=headers, data=payload)

    if response.status_code == 200:
        token_data = response.json()
        new_access_token = token_data['access_token']
        new_refresh_token = token_data.get('refresh_token', refresh_token)
        return new_access_token, new_refresh_token
    else:
        return None, refresh_token

def main():
    refresh_token = '<REFRESH_TOKEN>'  # Dein initiales Refresh Token
    client_id = '<CLIENT_ID>'  # Deine Client-ID
    client_secret = '<CLIENT_SECRET>'  # Dein Client-Secret

    while True:
        new_access_token, refresh_token = get_new_access_token(refresh_token, client_id, client_secret)
        
        if new_access_token:
            # Hier kannst du den Zugriff mit dem neuen Access Token fortsetzen
        else:
            # Fehler beim Erneuern des Tokens. Bitte überprüfen Sie die Anmeldedaten.
            break
        
        time.sleep(3600)  # z.B. 1 Stunde warten, bevor das Token wieder erneuert wird

if __name__ == "__main__":
    main()