Обновить OAuth2Session без refresh_token - PullRequest
0 голосов
/ 25 апреля 2019

Провайдер предлагает новый 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.

Обновление: я решил это.См. Отредактированный код.

...