Owin WS-Federation устанавливает скользящий срок действия токена

Может ли кто-нибудь объяснить, как реализовать скользящее истечение срока действия с помощью нового подключаемого модуля Owin WS-Federation?

На стороне клиента в configuration WS-Fedeartion я вижу, что есть некоторые события, такие как:

  Notifications = new WsFederationAuthenticationNotifications
            {
                SecurityTokenReceived = ...,
                AuthenticationFailed = ...,
                RedirectToIdentityProvider = ...,
                MessageReceived = ...,
                SecurityTokenValidated = ....
            },

Но из-за отсутствия документации я не могу понять, где и как?

На данный момент мой STS выпускает токены с абсолютным сроком действия:

 protected override Lifetime GetTokenLifetime(Lifetime requestLifetime)
 {
        // 5 Minutes for token lifetime
        var lifetime = new Lifetime(DateTime.UtcNow, DateTime.UtcNow.AddMinutes(5));
        return lifetime;
 }

Любая помощь приветствуется.


person Cristian E.    schedule 20.02.2015    source источник


Ответы (1)


TL;DR: установите WsFederationAuthenticationOptions.UseTokenLifetime на false, чтобы снова включить скользящее истечение срока действия.

В OWIN/Katana концепция скользящего срока действия ограничена промежуточным программным обеспечением для файлов cookie и включена по умолчанию (вы можете отключить ее, задав для CookieAuthenticationOptions.SlidingExpiration значение false: https://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Security.Cookies/CookieAuthenticationOptions.cs).

Когда вы используете app.UseWsFederationAuthentication (или app.UseOpenIdConnectAuthentication), он фактически полагается на другое промежуточное ПО для сохранения ClaimsIdentity после завершения потока аутентификации. Это «постоянное делегирование» можно настроить через SignInAsAuthenticationType или через app.SetDefaultSignInAsAuthenticationType.

Как правило, это свойство SignInAsAuthenticationType соответствует промежуточному программному обеспечению для файлов cookie: таким образом, скользящее истечение срока действия управляется не на уровне промежуточного программного обеспечения WS-Federation, а промежуточным программным обеспечением для файлов cookie, которое автоматически обновляет файл cookie для проверки подлинности при соблюдении условий скользящего срока действия. В этом случае токен аутентификации, выданный вашим поставщиком удостоверений, не будет обновлен. Чтобы это работало, вам нужно установить WsFederationAuthenticationOptions.UseTokenLifetime на false, потому что при использовании значения по умолчанию скользящий срок действия отключен, а время жизни файла cookie соответствует времени жизни токена.

Если вы используете WS-Fed для целей аутентификации (т. е. вы просто хотите знать, кто ваши пользователи), использование скользящего срока действия, вероятно, является хорошей идеей. Но если вам нужно сделать несколько вызовов API на удаленном сервере, ваши пользователи могут аутентифицироваться в течение длительного времени, намного позже истечения срока действия их токена безопасности.

person Kévin Chalet    schedule 20.02.2015
comment
Отличный ответ, это сработало! Большое спасибо! Я использую WS-Fed для аутентификации, а клиенты — это приложения MVC, вызовы API отсутствуют. Тем не менее, вы упомянули интересный пользовательский случай, когда файл cookie живет дольше, чем токен безопасности. Какие проблемы в этом сценарии? Как мы можем смягчить эту ситуацию? - person Cristian E.; 20.02.2015
comment
Если вы не выполняете никаких вызовов API, наличие файла cookie, который живет дольше, чем токен безопасности, не является принципиально неправильным. Конечно, учитывая, что после выдачи токена может произойти множество вещей (удаление авторизации, удаление профиля и т. д.), ваше клиентское приложение может не иметь четкого представления о текущем статусе пользователя, но это не всегда проблема. . Напротив, если вы используете токен безопасности для вызовов API, вызовы завершатся ошибкой, если срок действия токена истек до истечения срока действия самого файла cookie. Чтобы смягчить это, вы можете перехватить ответы 401 и перезапустить поток аутентификации. - person Kévin Chalet; 20.02.2015
comment
Привет всем, меня интересует эта тема. Кто-нибудь нашел хороший способ обновить претензии пользователя после его аутентификации ?? У меня такая проблема, и я не знаю, куда идти. Я хочу, например, чтобы токен моего пользователя жил 3 часа, но претензии (из БД) обновлялись каждый час. Это возможно? Спасибо! - person snekkke; 25.03.2015
comment
@KévinChalet, для меня ключевым моментом было изменение UseTokenLifetime на false. Это проблема была действительно трудно понять. - person amassani; 24.06.2020