Область действия токена обновления: offline_access .Это означает, что клиент может запросить токены доступа от имени пользователя без необходимости взаимодействия с пользователем.
В зависимости от потока, когда пользователь входит в систему, клиент получит тритокены: токен доступа, токен идентификации и токен обновления.
Будучи автоматизированным (автономным) процессом, страница входа отсутствует.Активного пользователя нет, поэтому возврат просто неавторизован.Это означает, что после истечения срока действия пользователь должен снова войти в систему, чтобы снова запустить процесс .
Возможно, что пользователь все еще может получить доступ к веб-сайту (используя файлы cookie), в то время как API теперь недоступны,Вы можете смоделировать это с помощью гибридного потока sample .
Используя конфигурацию IdentityServer, у вас есть несколько вариантов.Вы можете выбрать скользящий срок действия, то есть токен обновления «никогда не истекает».И вы можете установить его только на одноразовое использование.
Я считаю, что по умолчанию токен настроен только на одноразовое использование, что заставит IdentityServer добавлять новый токен обновления каждый раз, когда запрашивается новый токен доступа.,Установка фиксированного срока действия будет гарантировать, что пользователь должен время от времени входить в систему.
С точки зрения срока службы:
access token < refresh token <= AbsoluteRefreshTokenLifetime
.
Просто убедитесь, что токен обновленияне истекает и не теряется.
Если у вас есть сценарий, в котором токен обновления был потерян или истек, выйдите из системы.Перейдите на защищенную страницу, которая будет перенаправлять пользователя на страницу входа.
Это зависит от вашей конфигурации, но вы можете сделать что-то подобное для выхода из системы:
await HttpContext.SignOutAsync("Cookies");
return LocalRedirect($"/secured");
В этомесли пользователю может не потребоваться войти в систему, поскольку он все еще может быть активным из-за файла cookie единого входа.
Если вы хотите полный выход из системы (все веб-сайты):
await HttpContext.SignOutAsync("Cookies");
await HttpContext.SignOutAsync("oidc");