Провайдер предлагает новый API на основе OAuth2, который я интегрирую в приложение Django.Я застрял в ошибке token_expired, которая возникнет через несколько минут.
В документации есть примеры обновления просроченного токена с помощью refresh_token.
В целях безопасности поставщик API не предлагает refresh_token.Они говорят, что не хотят использовать токен обновления, но хотят пройти через стандартный поток OAuth за сеанс.
После большого количества поиска я не могу найти альтернативные варианты обновления без refresh_token.
Может ли кто-нибудь дать мне намек на недостающие знания?
Это мой класс API:
class API:
client_id = "CLIENT_ID"
client_secret = "CLIENT_SECRET"
auth = HTTPBasicAuth(client_id, client_secret)
client = BackendApplicationClient(client_id=client_id)
refresh_url = 'https://theprovider.com/token'
oauth = OAuth2Session(client=client)
token = oauth.fetch_token(token_url='https://theprovider.com/token', auth=auth, timeout=10)
print(token)
payload = {}
headers = {
'Accept': 'application/vnd.group.v3+json'
}
endpoint = 'https://api.theprovider.com/group/'
tried_refresh = False
while True:
try:
r = oauth.request('GET', endpoint, headers=headers, data=payload, allow_redirects=False, timeout=10)
return r
except TokenExpiredError:
if tried_refresh:
raise
token = oauth.fetch_token(token_url='https://theprovider.com/token', auth=auth, timeout=10)
print(token)
tried_refresh = True
Печать показывает:
{
"access_token":" utTJFMrOKwlyB5rcBpCIP6Dtn0k4w8vtqR6TJtu-fvEIm9tXTZf6q4JSaRaxRc7eSgO4EAggELN5bqADCSGq4mDEQgM-k-VPUi7IVIkKrVAFdwyb9Yz1cXy9 BspU96tZSmxjNiNzMiLCJvcmciOiJTTFI6MTMyMjAzNiIsImF6cCI6IjMwODE4NWVhLTkyZTAtNGE0NS1iNzg2LWU5MzI1OTIyM2I3MyIsImNsaWVudG5hbWUiOiJDaGFubmFWFmYyRdvKZyB4PibGUiLCJpc3MiOiJsb2dpbi5ib2wuY29tIiwic2NvcGVzIjoiQ3VzdG9tU2NvcGU0IEN1c3RvbVNjb3BlMyIsImV4cCI6MTUzOTI0NDkwMSwiaWF0IjoxNTM5MjQ0NjAxLCJhaWQiOiJTTFI6MTMyMjAzNiIsImp0aSI6IjI1YzcxZDY2LTU0YzgtNDQ3ZS04NTk0LWEwMzFlZDNkNGUzOSJ9.Nkc90mTB-BLVJEnSDHx2o1bkJ-eyJraWQiOiJyc2ExIiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIzMDgxODVlYS05MmUwLTRhNDUtYjc4Ni1lOTMyNTkyM7Dan9VaFQF1o8EvlGCV42n61KAjeEg8PrjVwqFvJ8y9QUzcpTFXQ5f4VFgIfZfYaqZyM2iJWFlpSpVl-jQAiGjOp0xSForKtGe2-FdyXmmQNpw_IltcPmvJIGABU3Xngx5O- _F13sG_zRoy7g1CBspU9dx5DLDuOa17PBmj52kQVEV8Q",
"token_type": "Bearer",
"expires_in": 299,
"scope": "{scopes}"
}
Обновление: я нашел эту статью в заголовке Краткосрочные токены доступа и никакие токены обновления в нем говорится: Когда срок действия токена доступа истекает, приложение будет вынуждено снова выполнить вход пользователя.Для меня возникает вопрос, как этот процесс работает с OAuth2Session.
Обновление: я решил это.См. Отредактированный код.