W.I.F .: Установка IsSessionMode в true, не может этого добиться - PullRequest
9 голосов
/ 19 октября 2011

У нас проблемы с Safari (и Opera), и из того, что я прочитал, файлы cookie FedAuth слишком велики.

Существует "аккуратный трюк", чтобы исправить это: «WIF RTM добавил свойство в SessionAuthenticationModule, IsSessionMode. При переключении на true IsSessionMode обеспечивает сохранение SessionSecurityToken в кэше на протяжении всей продолжительности сеанса и создание файла cookie, который содержит только идентификатор сеанса, а не содержание самой сессии. "

У меня есть этот код в global.asax:

void WSFederationAuthenticationModule_SessionSecurityTokenCreated(object sender, Microsoft.IdentityModel.Web.SessionSecurityTokenCreatedEventArgs e)
{
    FederatedAuthentication.SessionAuthenticationModule.IsSessionMode = true;
}

Проблема проста: «FederatedAuthentication.SessionAuthenticationModule.IsSessionMode = true» никогда не запускается, я понятия не имею, почему. Вы?? Или вы знаете, как использовать «PassiveSignInControl», чтобы установить IsSessionMode в true?

http://social.msdn.microsoft.com/Forums/en/Geneva/thread/ea00ec3f-ebdf-427c-929f-d4a196650552 http://blogs.msdn.com/b/vbertocci/archive/2010/05/26/your-fedauth-cookies-on-a-diet-issessionmode-true.aspx

Из книги «Программирование Windows® Identity Foundation»: «Интересным свойством SAM является IsSessionMode. Когда установлено значение true, IsSessionMode имеет эффект хранения основной части сеанса в кэше токенов на стороне сервера вместо записи все в печенье. Сам файл cookie будет содержать небольшой идентификатор контекста, который будет использоваться для получения сеанса на сервере. К сожалению, в этой версии 92 Part II Windows Identity Foundation для разработчиков удостоверений В продукте нет способа установить IsSessionMode из файла конфигурации. Вы можете установить его через свойство PassiveSignInControl или в файле global.asax следующим образом (тот же код, что и выше) "

Ответы [ 3 ]

7 голосов
/ 08 марта 2013

Старый поток, но я считаю, что SessionSecurityTokenCreated является подходящим событием, чтобы справиться с этим - протестировал его, и он работает в «старом WIF» и NET 4.5 с соответствующими вариациями пространства имен.

void WSFederationAuthenticationModule_SessionSecurityTokenCreated(object sender, System.IdentityModel.Services.SessionSecurityTokenCreatedEventArgs e)
{
    e.SessionToken.IsReferenceMode = true;
}
3 голосов
/ 20 октября 2011

Вы зарегистрировали свой обработчик события SessionSecurityTokenCreated?

FederatedAuthentication.WSFederationAuthenticationModule.SessionSecurityTokenCreated 
    += this.WSFederationAuthenticationModule_SessionSecurityTokenCreated;

Эта строка должна быть добавлена ​​к методу Application_Start в вашем файле Global.asax.

Класс FederatedAuthentication в пространстве имен Microsoft.IdentityModel.Web.

0 голосов
/ 30 мая 2012

Здравствуйте, попробуйте следующее: вместо события SessionSecurityTokenCreated используйте SecurityTokenValidated

В глобальном .ascx

void WSFederationAuthenticationModule_SecurityTokenValidated(object sender, SecurityTokenValidatedEventArgs e) 
{   
    FederatedAuthentication.SessionAuthenticationModule.IsSessionMode = true; 
}

Проверьте комментарий от Доминика Байера блог

...