Hi, I am using Python to issue and use an RDP Authentication Token.
However, during my testing, I found that when I send a request with grant_type='refresh_token'
, the same access_token
and refresh_token
are returned in the response as those sent in the request. As a result, even when I send a request with grant_type='refresh_token'
, the tokens expire after 5 minutes.
Below is the code from my testing. I attempted refreshing every minute, but as you can see from the logs, the same access_token
and refresh_token
are continuously returned. Eventually, after 5 minutes—or sometimes even earlier—I receive a 400 error. Could this be due to a contractual limitation or restriction on the use of the refresh_token
?
refresh_interval = 60
auth_url = "https://api.refinitiv.com:443/auth/oauth2/v1/token"
data = {
'username': username,
'password': password,
'grant_type': 'password',
'takeExclusiveSignOnControl': 'true',
'scope': 'trapi'}
response = requests.post(auth_url,
headers={'Accept': 'application/json'},
data=data,
auth=(client_id, ''),
verify=True,
allow_redirects=False)
response.raise_for_status()
auth_response = response.json()
print("[create_token] Refinitiv Data Platform Authentication succeeded. RECEIVED:")
print(json.dumps(auth_response, sort_keys=True, indent=2, separators=(',', ':')))
refinitiv_token_info = {
"access_token": auth_response["access_token"],
"refresh_token": auth_response["refresh_token"],
"expired_time": time.time() + refresh_interval
}
print(f"[create_token] Token created successfully.")
print(json.dumps(refinitiv_token_info, sort_keys=True, indent=2, separators=(',', ':')))
token_for_refresh = refinitiv_token_info["refresh_token"]
while 1:
data = {'refresh_token': token_for_refresh,
'grant_type': 'refresh_token'}
print("[refresh_token] Sending authentication request with refresh token to", auth_url, "...")
print(f"[refresh_token] post data: {data}")
response = requests.post(auth_url,
headers={'Accept': 'application/json'},
data=data,
auth=(client_id, '')
)
response.raise_for_status()
auth_response = response.json()
print("[refresh_token] Refinitiv Data Platform Authentication succeeded. RECEIVED:")
print(json.dumps(data, sort_keys=True, indent=2, separators=(',', ':')))
refinitiv_token_info = {
"access_token": auth_response['access_token'],
"refresh_token": auth_response['refresh_token'],
"expired_time": time.time() + refresh_interval
}
print(f"[refresh_token] Token created successfully.")
print(json.dumps(refinitiv_token_info, sort_keys=True, indent=2, separators=(',', ':')))
token_for_refresh = refinitiv_token_info["refresh_token"]
print('-'*150)
time.sleep(60)