Krukov / amocrm_api

Python amocrm API wrapper
MIT License
104 stars 55 forks source link

Слетает авторизация #38

Closed 2TQMdj closed 3 years ago

2TQMdj commented 3 years ago

Авторизируюсь как указано в примере, сутки все работает а потом слетает авторизация пока не укажу новый код авторизации. Подскажите, в чем может быть проблема?

dinodigital commented 3 years ago

Проблема в том, что функция _is_expire() не срабатывает.

dinodigital commented 3 years ago

"verify_signature": False отменяет проверку испортился ключ или нет. Должно быть True. Но в этом случае появляется ошибка jwt.exceptions.InvalidAlgorithmError: Algorithm not supported

dinodigital commented 3 years ago

@Krukov Вижу следующее решение:

def _is_expire(token):

    token_data = jwt.decode(token, options={"verify_signature": False})
    exp = datetime.utcfromtimestamp(token_data['exp'])
    now = datetime.utcnow()

    return True if now >= exp else False
dinodigital commented 3 years ago

Кинул Pull request

Krukov commented 3 years ago

@2TQMdj Можно попросить трейсбек с тем как падает авторизация? И укажите пожалуйста какая версия pyjwt у вас установлена? и если pyjwt > 2 версии то попробуйте поставить 1.7.1

@dinodigital verify_signature должно быть False так как мы не хотим проверять подпись в jwt, но нам нужно провалидировать exp как вы верно подметили. Но pyjwt это и сам делает https://github.com/jpadilla/pyjwt/blob/2.0.0/jwt/api_jwt.py#L164

Pyjwt 2.0 вышла совсем недавно и с ней я не тестировал.

dinodigital commented 3 years ago

@2TQMdj Можно попросить трейсбек с тем как падает авторизация? И укажите пожалуйста какая версия pyjwt у вас установлена? и если pyjwt > 2 версии то попробуйте поставить 1.7.1

@dinodigital verify_signature должно быть False так как мы не хотим проверять подпись в jwt, но нам нужно провалидировать exp как вы верно подметили. Но pyjwt это и сам делает https://github.com/jpadilla/pyjwt/blob/2.0.0/jwt/api_jwt.py#L164

Pyjwt 2.0 вышла совсем недавно и с ней я не тестировал.

У меня лично вылетает ошибка unauthorised exception от сервера Amo. (Трейсбек смогу только завтра, когда токен протухнет). Я проверял, проблема именно в _is_expired().

pyjwt версия 2.0

Krukov commented 3 years ago

@dinodigital Спасибо

Вот бага в pyjwt https://github.com/jpadilla/pyjwt/issues/599

У меня pywt не зафрижена... Что бы проблемы не было поставте pyjwt==1.7.1

Krukov commented 3 years ago

@2TQMdj Вообщем фикс всеравно внесли, можно или обновить эту библиотеку amocrm_api-2.3.1 или даунгрейдить pyjwt до 1.7.1

2TQMdj commented 3 years ago

Даунгрейд помог, спасибо!