2013-05-09 1 views
2

Я не настолько силен в Oauth, поэтому вам нужна помощь в реализации интерфейса для моей системы учета FreeAgent, они предоставляют API Oauth 2.Как обновить токен с помощью библиотеки Rauth python?

Я хочу, чтобы код в стандартном Python, и, кажется, лучшей библиотекой является Rauth. Моя проблема - освежающие токены.

Есть ли хороший образец того, как обновить токены с истекшим сроком годности, используя библиотеку python Rauth? В чем же лучшая практика для обработки истечения срока? Я мог бы попытаться использовать мой токен и в случае ошибки из-за истечения срока действия попросить обновить. Или, может быть, я мог бы следить за жизнью токена, и в случае, если мои вычисления говорят, что это истекло, тогда попросите другого. И где лучше всего сохранить всю эту токенную информацию: в файле конфигурации, в объекте JSON, в базу данных ...?

Спасибо за любую помощь.

Грег

ответ

5

Or maybe I could keep track of the life of a token and in case my computation says it's expired then ask for another.

Это то, что я бы не рекомендовал. Удерживайте истечение текущего токена где-то и перед тем, как сделать запрос, проверьте, истек ли токен. Если это так, используйте токен обновления с помощью методов токена доступа для получения нового токена доступа. Метод refresh_token может выглядеть примерно так:

def refresh_token(): 
    if not expired(): 
     return 

    # OAuth 2.0 example 
    data = {'client_id':client_id, 
      'client_secret': client_secret, 
      'grant_type': 'refresh_token', 
      'refresh_token': refresh_token} 

    return service.get_access_token(data=data) 

Поскольку точный процесс может немного отличаться от поставщика к поставщику, не документированы Rauth. Возможно, мы должны обратить внимание на эту общую схему в документах.

Надеюсь, что это поможет!

+0

Спасибо Макс, я попробую ваше предложение. Если я не ошибаюсь, вы автор Раута, спасибо вам за поддержку. – Greggy

+0

Да, я автор. Пожалуйста, дайте мне знать, если у вас появятся дополнительные вопросы. – maxcountryman

+0

Нет Макс, он не работает. Я делаю это: 'обслуживание = rauth.OAuth2Service (...) данных = {.as вы предложили ...} возвращение service.get_access_token (данные = данные)' , но я получил эту ошибку: 'KeyError: 'Декодер не смог обработать access_token с данными, возвращаемыми поставщиком. Может потребоваться другой декодер. Поставщик вернулся: {"access_token": "xxxxxxxxxxxxxx", "token_type": "bearer", "expires_in": 604800} ' – Greggy