Doc*_*nar 10 c# web-applications wif
我们遇到Safari(和Opera)的问题,从我读过的FedAuth cookie来看,它太大了.
有一个"巧妙的技巧"来解决这个问题:"WIF RTM向SessionAuthenticationModule,IsSessionMode添加了一个属性.当翻转为true时,IsSessionMode具有确保SessionSecurityToken在整个会话期间保持在缓存中并生成的效果一个cookie,它只包含一个会话标识符,而不是会话本身的内容."
我在global.asax中有这个代码:
void WSFederationAuthenticationModule_SessionSecurityTokenCreated(object sender, Microsoft.IdentityModel.Web.SessionSecurityTokenCreatedEventArgs e)
{
FederatedAuthentication.SessionAuthenticationModule.IsSessionMode = true;
}
Run Code Online (Sandbox Code Playgroud)
问题很简单,"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®IdentityFoundation"一书中可以看出:"SAM的一个有趣属性是IsSessionMode.当设置为true时,IsSessionMode具有将大部分会话存储在服务器端令牌缓存而不是写入所有内容的效果. cookie本身只包含一个小的上下文标识符,用于检索服务器上的会话.不幸的是,在这个版本的92第二部分身份开发者Windows身份基础产品中,没有办法设置IsSessionMode配置文件.你可以通过PassiveSignInControl的属性设置它,或者在global.asax文件中设置如下(与上面相同的代码)"
旧线程,但我相信SessionSecurityTokenCreated是处理此问题的正确事件 - 测试它并且它在"旧WIF"和.NET 4.5下使用适当的命名空间变体.
void WSFederationAuthenticationModule_SessionSecurityTokenCreated(object sender, System.IdentityModel.Services.SessionSecurityTokenCreatedEventArgs e)
{
e.SessionToken.IsReferenceMode = true;
}
Run Code Online (Sandbox Code Playgroud)
您是否为该事件注册了事件处理程序SessionSecurityTokenCreated?
FederatedAuthentication.WSFederationAuthenticationModule.SessionSecurityTokenCreated
+= this.WSFederationAuthenticationModule_SessionSecurityTokenCreated;
Run Code Online (Sandbox Code Playgroud)
需要将此行添加到文件Application_Start中的方法中Global.asax。
FederatedAuthentication命名空间中的类Microsoft.IdentityModel.Web。