ADFS TokenLifeTime Максимум?

Я использую ADFS 2.0 для аутентификации своего веб-приложения mvc 3.0. Я установил для своего TokenLifeTime на моей полагающейся стороне значение 1440 (24 часа), но когда я перехожу через свой код после входа в систему, я вижу, что дата ValidTo токена сеанса составляет всего 600 минут (10 часов) с этого момента. Если я изменю TokenLifeTime на менее 600, datetime будет соответствовать тому, что я ожидаю, когда я вхожу в систему. Т.е. если я установил TokenLifeTime на 5, дата ValidTo на моем токене сеанса будет через 5 минут с момента входа в систему.

Я не нашел ссылки на максимальное число для этого значения, но я также не смог объяснить, почему я не могу увеличить время ValidTo на моем токене сеанса до более 600 минут.

So...

600 - максимальное значение для TokenLifeTime?

Есть ли что-нибудь еще, что влияет на время ValidTo токенов сеанса, выпущенных ADFS?


person Ben Tidman    schedule 27.09.2013    source источник
comment
Я не уверен, влияет ли на это свойство SsoLifeTime, сейчас не могу это проверить. Не могли бы вы проверить, каково реальное значение, и если оно 600, то сделать это 1440? (Set-AdfsProperty, Get-AdfsProperty).   -  person Wiktor Zychla    schedule 28.09.2013
comment
WebSSOLifeTime также установлен на 1440. Никакого влияния.   -  person Ben Tidman    schedule 28.09.2013


Ответы (1)


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

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

void WSFederationAuthenticationModule_SessionSecurityTokenCreated(object sender, SessionSecurityTokenCreatedEventArgs e)
{
    var currentToken = e.SessionToken;
    var validForDays = 1;

    e.SessionToken = new SessionSecurityToken(
        currentToken.ClaimsPrincipal,
        currentToken.Context,
        currentToken.EndpointId,
        DateTime.UtcNow,
        DateTime.UtcNow.AddDays(validForDays));

    e.SessionToken.IsPersistent = true;
}

Это живет в Global.asax.cs

person James    schedule 12.12.2013
comment
Это выглядит многообещающе. В итоге я сделал что-то подобное, используя SessionAuthenticationModule_SessionSecurityTokenReceived, но это скорее скользящее окно, поскольку люди продолжают быть активными на моем сайте. Единственное предостережение, которое у меня есть в отношении моего, заключается в том, что иногда файл cookie повреждается сам по себе, когда вы его редактируете. Вероятно, проблема только в том случае, если вы используете зашифрованные токены. Спасибо за ответ. - person Ben Tidman; 12.12.2013
comment
Я смотрел, как это делается в SessionAuthenticationModule_SessionSecurityTokenReceived, но это не было похоже на нужное место, поскольку ему приходилось выполнять проверку каждый раз, когда что-либо запрашивалось с сервера аутентифицированным пользователем. Когда вы говорите, что редактируете файл cookie, вы используете e.ReissueCookie = true;? - person James; 13.12.2013