Я хотел бы реализовать аутентификацию на основе JWT для нашего нового REST API. Но поскольку срок действия установлен в токене, можно ли его автоматически продлить? Я не хочу, чтобы пользователям нужно было входить через каждые X минут, если они активно использовали приложение в этот период. Это был бы огромный провал UX.
но продление срока действия создает новый токен (и старый по-прежнему действителен до истечения срока действия). И создание нового токена после каждого запроса звучит глупо для меня. Звучит как проблема безопасности, когда несколько токенов действительны одновременно. Конечно, я мог бы аннулировать старый используемый, используя черный список, но мне нужно будет хранить токены. И одним из преимуществ JWT является отсутствие хранения.
Я нашел, как Auth0 решил это. Они используют не только токен JWT, но и токен обновления: https://docs.auth0.com/refresh-token
но опять же, чтобы реализовать это (без Auth0), мне нужно будет хранить токены обновления и поддерживайте их срок годности. В чем же тогда реальная выгода? Почему бы не иметь только один токен (не JWT) и сохранить срок действия на сервере?
Виды авторизации: сессии, JWT-токены. Для чего нужны сессии? Как работает JWT? (+ разбор ошибки)
есть ли другие варианты? Использование JWT не подходит для этого сценария?
автор: cchamberlain
9 ответов
Я работаю в Auth0, и я участвовал в разработке функции токена обновления.
все зависит от типа приложения и вот наш рекомендуемый подход.
web-приложений
хорошим шаблоном является обновление токена до его истечения.
установите срок действия маркера на одну неделю и обновляйте маркер каждый раз, когда пользователь открывает веб-приложение и каждый час. Если пользователь не открывает приложение более недели, им придется снова войти в систему, и это приемлемое веб-приложение UX.
чтобы обновить токен, вашему API нужна новая конечная точка, которая получает действительный, не истекший JWT и возвращает тот же подписанный JWT с новым полем истечения срока действия. Затем веб-приложение будет хранить токен где-то.
мобильные/приложения
большинство родных приложений войти один раз и только один раз.
идея в том, что токен обновления никогда не истекает, и это может быть всегда обменивается на действительный JWT.
проблема с токеном, который никогда не истекает, заключается в том, что никогда значит никогда. Что делать, если вы потеряете свой телефон? Таким образом, он должен быть идентифицирован пользователем каким-то образом, и приложение должно предоставить способ отозвать доступ. Мы решили использовать имя устройства, например «iPad maryo». Затем пользователь может перейти в приложение и отозвать доступ к «iPad maryo».
другой подход-отозвать токен обновления на конкретное событие. Интересное событие-смена пароля.
Как указать срок жизни токенов обновления в Keycloak
Время жизни токена обновления Keycloak составляет 1800 секунд:
Как указать разный срок действия? В пользовательском интерфейсе администратора Keycloak можно указать только срок жизни токена доступа:
Onecli. Любой бизнес создаётся для получения прибыли. Onecli. — не исключение!
rok 27 Авг 2018 в 16:15
4 ответа
Лучший ответ
Время жизни токена обновления контролируется настройкой простоя сеанса единого входа. 30 минут = 30 * 60 = 1800 секунд (значение refresh_expires_in)
Erik Tribou 14 Фев 2019 в 00:38
На самом деле все намного сложнее. Между каждым полем существует множество взаимосвязей, и вы можете переопределить его в 3 разных местах .. Чтобы было понятно, Keycloak — это ад. Но мне пришлось установить Client Session Idle на 0, Client Session Max на 0, SSO Session Idle на 999 дней. После этого я могу управлять таймаутом токена доступа с помощью Access Token Lifespan и обновлять тайм-аут токена с помощью SSO Session Max . Мне потребовался 1 час игры со всеми переменными. SSO Session Idle или Access Token Lifespan будут приняты в зависимости от того, какое время меньше
Kuba Šimonovský
3 Сен 2020 в 16:44
Проблема с установкой SSO Session Idle на 999, вы теряете простаивающую функцию в основном
dreamcrash
20 Май 2021 в 19:16
Я установил Client Session Idle на 0, Client Session Max на 0 и SSO Session Idle на 12 часов, но все равно сеанс ожидания истекает через 30 минут. Что еще требуется?
Shashank Shekher
22 Июн 2021 в 07:24
Jalaj Chawla
30 Июл 2021 в 10:34
В последней версии, на момент написания 15.0.2, значение refresh_expires_in оставалось равным 0. Чтобы это исправить, мне пришлось переключить переключатель Offline Session Max Limited в положение «Вкл.».
10 Дек 2021 в 14:38
В v11.0.3 в расширенных настройках клиента отсутствуют настройки ожидания сеанса единого входа (не уверен, что они были только что переименованы, перемещены или являются настройками области, доступными где-либо еще в интерфейсе администратора), поэтому начиная с клиента по умолчанию вы можете указать максимальное значение сеанса клиента, чтобы контролировать время жизни токена обновления без необходимости изменять другие параметры продолжительности (время жизни токена доступа продолжается, как и следовало ожидать). Доказательства: настройка параметров и проверка ответа refresh_expires.
hairycoo 12 Дек 2020 в 21:28
Срок службы токенов обновления определяется параметром «Максимальное количество сеансов клиента» на вкладке «Токены» в настройках области.
Его также можно переопределить на уровне отдельных клиентов в меню «Дополнительные настройки» на странице настроек клиента.
Клиентская сессия Макс.
Максимальное время, по истечении которого токен обновления истечет и станет недействительным. Это позволяет указать более короткий тайм-аут токена обновления, чем тайм-аут сеанса. И его можно переопределить для отдельных клиентов. Это необязательная конфигурация, и если не установлено значение больше 0, используется тот же тайм-аут простоя, установленный в конфигурации SSO Session Max.
Jems 17 Май 2021 в 11:43
На самом деле все намного сложнее.
TL; DR . Можно сделать вывод, что refresh token lifespan будет равняться наименьшему значению среди ( SSO Session Idle , Client Session Idle , SSO Session Max и Client Session Max ).
Потратив некоторое время на изучение этого, а теперь оглядываясь на эту ветку, я чувствую, что предыдущие ответы казались короткими, чтобы подробно объяснить, что происходит (можно даже возразить, что они на самом деле ошибаются ).
Предположим пока, что у нас есть только SSO Session Idle и SSO Session Max :
- и SSO Session Max > SSO Session Idle в этом случае refresh token lifetime совпадает с SSO Session Idle . Почему? потому что, если приложение простаивает в течение SSO Session Idle времени, пользователь выходит из системы, и именно поэтому токен обновления привязан к этому значению. Каждый раз, когда приложение запрашивает новый токен, значения обратного отсчета refresh token lifetime и SSO Session Idle снова сбрасываются;
- и SSO Session Max SSO Session Idle , то refresh token lifetime будет таким же, как SSO Session Max . Почему? потому что независимо от того, что делает пользователь ( т.е. бездействует или нет), пользователь выходит из системы по истечении времени SSO Session Max , и, следовательно, почему токен обновления привязан к этому значению.
Отсюда мы заключаем, что срок жизни токена обновления привязан к самому низкому из двух значений SSO Session Idle и SSO Session Max .
Оба эти значения относятся к системе единого входа (SSO). Нам по-прежнему необходимо учитывать значения полей Client Session Idle и Client Session Max в настройках области, которые, если НЕ установлены, совпадают с SSO Session Idle и SSO Session Max соответственно.
Если эти значения установлены в контексте токена обновления, они переопределят значения из SSO Session Idle и SSO Session Max , НО только если они ниже, чем значения из SSO Session Idle и SSO Session Max .
Давайте посмотрим на следующие примеры: SSO Session Idle = 1800 секунд, SSO Session Max = 10 часов и:
- Client Session Idle = 600 секунд и Client Session Max = 1 час. В этом случае refresh token lifespan совпадает с бездействием клиентского сеанса ;
- Client Session Idle = 600 секунд и Client Session Max = 60 секунд. В этом случае refresh token lifespan совпадает с Макс. Сеанса клиента .
- Client Session Idle = 1 день и Client Session Max = 10 дней. В этом случае refresh token lifespan совпадает с бездействием сеанса единого входа ;
Короче говоря, вы можете сделать вывод, что refresh token lifespan будет равно наименьшему значению между ( SSO Session Idle , Client Session Idle , SSO Session Max и Client Session Max ).
Таким образом, утверждение из предыдущих ответов о том, что вы можете просто использовать Client Session Max для управления сроком жизни токена обновления, ЛОЖНО. Достаточно взглянуть на предыдущие примеры 1) и 3).
Наконец, поля Client Session Idle и Client Session Max из настроек области могут быть перезаписаны Client Session Idle и Client Session Max в самих клиентах, что повлияет на refresh token lifespan для именно этого клиента.
Применяется та же логика, но вместо того, чтобы рассматривать значения Client Session Idle и Client Session Max из настроек области, нужно учитывать значения из дополнительных настроек клиента.
Источник: question-it.com
Что такое токен? Что значит «истекло время жизни токена»?
Для безопасности каждый токен имеет ограниченный срок действия. Время от времени его заменяют новым, чтобы обезопасить владельца и его данные и имущество от взлома и вредоносных действий в интернете. Когда я открывала счет и создавала свой портфель ценных бумаг у брокера, сначала токен мне меняли на платной основе раз в год. Потом, после 3 лет сотрудничества, мне меняют его бесплатно. Без токена невозможно совершить ни одной сделки в торговом терминале, и поручения брокер не примет, даже на ввод собственных средств.
автор вопроса выбрал этот ответ лучшим
комментировать
в избранное ссылка отблагодарить
Julia 93 [10.8K]
5 лет назад
Токен — это ключ, строка или какой-либо шифр, используемый для авторизации (для подтверждения, что вы именно тот, за кого вы себя выдаёте). Токены достаточно широко используются в интернете в качестве дополнительного средства защиты от популярных атак (например, от CSRF). Как правило, токены передаются с помощью Cookies и действуют ограниченный промежуток времени, после которого попытка использовать токен приводит к ошибке (например, интернет-банк может попросить вас заново авторизоваться, или капча, введённая вами на давно открытой странице, не принимается, несмотря на правильный текст).
И даже здесь, на этой странице, используется токен :).
Источник: www.bolshoyvopros.ru