Мы пытаемся интегрировать Identity Server 4 (IDSV4) с нашими Mvc Клиентами и клиентами WebApi2.
Мы обнаружили, что токен доступа все еще действителен и может использоваться для использования служб из WebApi2 даже после того, как пользователь вышел из системы как с клиента, так и с IDSV4.
Я не знаю, как заставить его стать недействительным, как только пользователь вышел из системы.
Вот шаги, чтобы воспроизвести это поведение:
- Открыть Mvc Клиент и вход в IDSV4
- Получите токен доступа с помощью
await HttpContext.GetTokenAsync(OpenIdConnectParameterNames.AccessToken)
Скопируйте AccessToken и получите доступ к WebApi2 с помощью этого токена (он работает, и мы видим проверку шаг между Api и IDSV4)
I Выйти из IDSV4 и Клиента с помощью следующего:
await HttpContext.SignOutAsync("Cookies");
await HttpContext.SignOutAsync("oidc");
Если мы обновим sh веб-страницу на Mvc Клиент, мы видим, что пользователь вышел из системы.
Повторите шаг 3 и снова отправьте запрос в WebApi2, используя тот же AccessToken. Он все еще работает, потому что не выполняет проверку токена снова.
IMO, это проблема безопасности, потому что мы используем этот токен доступа при вызове AJAX, и пользователи могут видеть этот токен если они используют инструмент Браузер и повторяют те же запросы даже после выхода из системы.
Вот код для интеграции моего WebApi2 с IDSV4:
services.AddAuthentication(
IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://idsv.url";
options.ApiName = "api1";
});
Я попытался установить для options.CacheDuration
значение НОЛЬ, но поведение остается прежним.
Не могли бы вы подсказать, как я могу предотвратить это или заставить мой Api выполнить повторную проверку, когда пользователь вышел из системы? Можно ли как-то уведомить Api о том, что указанный c токен больше не действителен?