Наша система аутентифицирует пользователей, выполнив эти шаги проверки на токене, сгенерированном getUserIdentityTokenAsyn c () .
Эти токены не работают следующая проверка
Текущее время находится между временами, указанными в претензиях nbf и exp. Заявление nbf указывает самое раннее время, когда токен считается действительным, а утверждение exp указывает время истечения срока действия токена. Рекомендуется учесть некоторые различия в настройках часов между серверами.
Наши журналы показывают, что эти токены являются недействительными на несколько часов
Current Time: 2020-04-10 17:02:11 +0000,
Valid Start: 2020-04-09 14:46:31 +0000,
Valid End: 2020-04-09 23:16:31 +0000,
Мы проверяем эти времена следующим образом:
def timeframe_valid?
PAYLOAD_WIGGLE_TIME = 900
if @payload.present?
now = Time.now.to_i
payload_valid_start = @payload[:nbf] - PAYLOAD_VALID_WIGGLE_TIME
payload_valid_expire = @payload[:exp] + PAYLOAD_VALID_WIGGLE_TIME
if now < payload_valid_start || now > payload_valid_expire
# handle invalid token...
end
end
end
Мы делаем уникальный вызов getUserIdentityTokenAsync
перед каждым запросом API. Поскольку мы видим такую большую разницу во временном окне для действительного токена и времени его проверки, я думаю, что пользователи оставляют надстройку открытой в течение длительных периодов времени без обновления. По какой-то причине, когда они возвращаются, getUserIdentityTokenAsync
не возвращает новый токен, а скорее старый, срок действия которого уже истек.
Есть ли способ заставить getUserIdentityToken
выдавать новый токен после одного давно истек без жесткого обновления sh надстройки?