Web场方案中的依赖方(IsSessionMode = true)

时间:2012-06-04 12:04:50

标签: asp.net wif geneva-framework

首先,我必须设置 IsSessionMode = true 来减少Cookie的大小

我需要平衡2个RP实例 我在带有RP实例的2台不同机器上执行了以下步骤:

1)订阅 ServiceConfigurationCreated事件

private void WSFederationAuthenticationModule_ServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
    {
        X509Certificate2 certificate = CertificateUtil.GetCertificate(StoreName.My, StoreLocation.LocalMachine, ConfigHelper.FrontendCertificate);

        var sessionTransforms = new List<CookieTransform>(new CookieTransform[] 
        { 
            new DeflateCookieTransform(), 
            new RsaEncryptionCookieTransform(certificate),
            new RsaSignatureCookieTransform(certificate)
        });

        SessionSecurityTokenHandler sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly());
        e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
    }

2)将会话转移到 asp.net状态服务

问题:

当我尝试登录STS时,我得到从RP到STS的无限重定向

我不明白为什么。令牌存储在会话中(IsSessionMode = true)。会话由两个不同的主机通过asp.net状态服务共享。

有什么问题?我错过了什么?

我想我不明白重要的事情。

1 个答案:

答案 0 :(得分:0)

我最好的猜测是WIF只是无法在RP端建立会话,并且用户登陆未经授权的页面(可能是自定义错误页面?),这会提示WIF重定向回STS进行身份验证,现在你正在循环。

您可以尝试一些实验:

  1. 关闭IsSessionMode = false,查看问题是否仍然存在。如果没有,那么您知道WIF会在会话创建时遇到阻塞,您可以检查以确保您的RP成功联系ASP.NET状态服务,例如。

  2. 安装Fiddler(http://fiddler2.com/fiddler2/),这是调试此类无限重定向的宝贵工具。收集一些痕迹,看看发生了什么。您也可以考虑发布您的RP web.config。