ADFS TokenLifeTime максимум?

Използвам ADFS 2.0 за удостоверяване за моето уеб приложение mvc 3.0. Зададох своя TokenLifeTime на разчитащата ми страна на 1440 (24 часа), но когато преминавам през кода си, след като вляза, мога да видя, че датата ValidTo на токена на сесията е само след 600 минути (10 часа). Ако променя TokenLifeTime да бъде по-малко от 600, датата и часът съвпада с това, което очаквам, когато вляза. Т.е. ако задам 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, но това е по-скоро плъзгащ се прозорец, тъй като хората продължават да бъдат активни на моя сайт. Единственото внимание, което имам към моята, е, че понякога бисквитката се разваля, когато я редактирате. Вероятно проблем е само ако използвате криптирани токени. Благодаря за отговора. - person Ben Tidman; 12.12.2013
comment
Погледнах да го направя в SessionAuthenticationModule_SessionSecurityTokenReceived, но не ми се стори правилното място, тъй като ще трябва да извършва проверка всеки път, когато нещо бъде поискано от сървъра от удостоверен потребител. Когато казвате, че редактирате бисквитката, използвате ли e.ReissueCookie = true;? - person James; 13.12.2013