Срок действия токена доступа IdentityServer4 - PullRequest
0 голосов
/ 16 мая 2018

Я использую IdentityServer4, и его конфигурация находится в базе данных.На клиенте происходит тихое обновление (oidc).Я установил следующие настройки времени жизни для клиента:

AbsoluteRefreshTokenLifetime =  60 * 30,//30 mins
AccessTokenLifetime = 60 * 5,//5 mins
SlidingRefreshTokenLifetime = 60 * 15 // 15 mins

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

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Насколько я понимаю, AbsoluteRefreshTokenLifetime и SlidingRefreshTokenLifetime не применяются к неявному потоку, для которого клиенты oidc должны быть установлены:

http://docs.identityserver.io/en/release/topics/refresh_tokens.html

Поскольку маркеры доступа имеют ограниченный срок службыТокены обновления позволяют запрашивать новые токены доступа без взаимодействия с пользователем.

Токены обновления поддерживаются для следующих потоков: код авторизации, гибридный поток и поток учетных данных владельца пароля.Клиенты должны быть явно авторизованы для запроса токенов обновления, установив для параметра AllowOfflineAccess значение true

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

https://github.com/IdentityModel/oidc-client-js/issues/402

Я новичок в клиентах javascript, поэтому я все еще пытаюсь выяснить, как вы определяетеприсутствует ли пользователь или нет.Я надеялся, что файл cookie позаботится об этом для меня, но похоже, что он продолжает расширяться в зависимости от того потока, который я отправил.

Обновление

После тестирования и тонныпоиск в Google - вот то, что мне удалось получить для работы / понимания в отношении времени жизни Access Token и автоматического обновления.

Сначала я предполагаю, что вы используете oidc-client или redux-oidc.Я использую redux-oidc, который является просто оболочкой для oidc-client.

Так как у вас время жизни токена доступа (AccessTokenLifetime) установлено на 5 минут и у вас молча возобновление = true.Это будет обновляться каждые 2,5 минуты или в зависимости от того, что для userManager.accessTokenExpiringNotificationTime установлено.В это время он будет обновлять токен доступа в зависимости от того, какое время ожидания истечения срока действия cookie установлено.Печенье - это то, где происходит волшебство.Если срок действия файла cookie истечет, вы больше не сможете обновить токен доступа.cookie настроен следующим образом:

  • Identity Server start.cs (это устанавливает скользящий срок действия файла cookie):

    var builder = services.AddIdentityServer (параметры=> {options.Authentication.CookieSlidingExpiration = true;})

  • Identity Server AccountController.cs, метод входа в систему (если вы помните функциональность меня, вы можете изменить значение IsPersistent, tsConfigValue = 15):

    var props = new AuthenticationProperties {IsPersistent = false, ExpiresUtc = DateTimeOffset.UtcNow.Add (TimeSpan.FromMinutes (tsConfigValue))};

Это закончилосьрешить мою проблему с помощью маркера доступа и молчаливого обновления.Надеюсь, это поможет.

0 голосов
/ 16 мая 2018

Жетоны доступа могут быть двух видов: автономные или справочные.

токен JWT будет автономным токеном доступа - это защищенный структура данных с претензиями и сроком действия. Как только API узнал о ключевом материале, он может проверять автономные токены без необходимо общаться с эмитентом. Это делает JWT трудно отменить. Они будут действовать до истечения срока их действия.

С http://docs.identityserver.io/en/latest/topics/reference_tokens.html#reference-tokens

Токены обновления позволяют получить долгоживущий доступ к API.

Обычно вы хотите, чтобы время жизни маркеров доступа было как можно меньше возможно, но в то же время не хочу беспокоить пользователя и снова с выполнением обращений по переднему каналу к IdentityServer для запрашивая новые.

Обновление токенов позволяет запрашивать новые токены доступа без пользователя взаимодействие. Каждый раз, когда клиент обновляет токен, он должен сделать (аутентифицированный) обратный вызов к IdentityServer. Это позволяет проверка того, что токен обновления все еще действителен или был отозван в Тем временем.

С http://docs.identityserver.io/en/latest/topics/grant_types.html#refresh-tokens

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

Для автоматизации процесса обновления токена доступа вы можете использовать токен обновления. Это мощный токен, поскольку его можно использовать для запроса токена доступа без взаимодействия с пользователем. Токен обновления должен быть долгоживущим (как минимум, дольше, чем токен доступа).

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

С истечением скольжения вы можете установить более короткий срок действия токена обновления. Поскольку каждый раз, когда запрашивается токен доступа, выдается новый токен обновления. Продление срока службы и аннулирование использованного токена обновления.

Пользователь может получить доступ к ресурсу без повторной регистрации, если токен обновления действителен. В вашем случае он истекает, если пользователь неактивен более 30 минут.

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

...