Identity Server 4 - как решить токен доступа, действительный после выхода из системы клиента? - PullRequest
0 голосов
/ 29 февраля 2020

Мы пытаемся интегрировать Identity Server 4 (IDSV4) с нашими Mvc Клиентами и клиентами WebApi2.

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

Я не знаю, как заставить его стать недействительным, как только пользователь вышел из системы.

Вот шаги, чтобы воспроизвести это поведение:

  1. Открыть Mvc Клиент и вход в IDSV4
  2. Получите токен доступа с помощью await HttpContext.GetTokenAsync(OpenIdConnectParameterNames.AccessToken)
  3. Скопируйте AccessToken и получите доступ к WebApi2 с помощью этого токена (он работает, и мы видим проверку шаг между Api и IDSV4)

  4. I Выйти из IDSV4 и Клиента с помощью следующего:

    await HttpContext.SignOutAsync("Cookies");
    await HttpContext.SignOutAsync("oidc");
    

    Если мы обновим sh веб-страницу на Mvc Клиент, мы видим, что пользователь вышел из системы.

  5. Повторите шаг 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 токен больше не действителен?

1 Ответ

1 голос
/ 29 февраля 2020

Нет никакого способа отозвать токен доступа. Вместо этого вы можете использовать Reference-Token, который имеет другой поток, и вы можете отозвать его. Также по этой причине вы должны генерировать Access-Token с коротким сроком службы. Когда вы используете соединение https, нет способа украсть Access-Token в середине пути.

...