Управление токенами
AmoCRM выдаёт два токена при OAuth-авторизации:
access_token — срок жизни 24 часа.
refresh_token — срок жизни 3 месяца; обновляется при каждом refresh.
Реактивное обновление по 401
Это базовое поведение SDK: если API вернул 401 Unauthorized, клиент
автоматически вызывает _refresh_tokens() и
повторяет исходный запрос один раз.
Проактивное обновление по истечению срока
При каждом запросе клиент проверяет, не истёк ли (или не истекает ли в ближайшие 60 секунд) access_token. Если да — refresh выполняется до отправки запроса, без лишнего 401-цикла.
Срок жизни токена определяется так:
При инициализации клиента из JWT-payload access_token — поле
expдекодируется без проверки подписи.После каждого refresh — из поля
expires_inв ответе AmoCRM API (fallback: 86 400 с / 24 ч).
_request() вызван
│
├─ expires_at known AND now ≥ expires_at − 60s → _refresh_tokens()
│
└─ session.request(...)
│
├─ 401 → _refresh_tokens() → повтор запроса
└─ OK → вернуть ответ
Хранилище токенов
Интерфейс TokenStorage остался неизменным —
save(access_token, refresh_token) и load() → tuple[str, str].
Время истечения хранится только в памяти клиента и восстанавливается
из JWT при каждом создании нового экземпляра AmoCRM.
Встроенные реализации хранилища:
Класс |
Описание |
|---|---|
Хранит токены в атрибутах объекта. Подходит для скриптов и тестов. |
|
Хранит токены в полях модели Django и вызывает |