具有负载均衡器的StartSTS和依赖方

时间:2011-10-20 21:32:43

标签: wif

由于需要在负载均衡器上运行我的站点,我必须使用以下内容替换会话令牌处理程序。

public class WebFarmSessionSecurityTokenHandler : SessionSecurityTokenHandler
{
    public WebFarmSessionSecurityTokenHandler(X509Certificate2 protectionCertificate)
        : base(CreateRsaTransforms(protectionCertificate))
    { }

    private static ReadOnlyCollection<CookieTransform> CreateRsaTransforms
      (X509Certificate2 protectionCertificate)
    {
        var transforms = new List<CookieTransform>() 
                        { 
                            new DeflateCookieTransform(), 
                            new RsaEncryptionCookieTransform(protectionCertificate),
                            new RsaSignatureCookieTransform(protectionCertificate),
                        };

        return transforms.AsReadOnly();
    }
}

然后我修改了web.config,如下所示。

<microsoft.identityModel>
  <service>
...
    <securityTokenHandlers>
      <clear />
      <add type="MyAssembly.WebFarmSessionSecurityTokenHandler, MyAssembly"/>
    </securityTokenHandlers>
...
  </service>
</microsoft.identityModel>

我希望这样做之后,无论是访问哪个节点,还是通过哪个方框启动了身份验证,我的依赖方都会正常运行。

我目前正在收到以下信息:未注册SecurityTokenHandler以读取安全令牌。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

void onServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
        {
            List<CookieTransform> sessionTransforms = new List<CookieTransform>(new CookieTransform[] 
            { 
                new DeflateCookieTransform(), 
                new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate),
                new RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate)
            });

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

以上内容需要放在global.asax文件中。在应用程序启动时连接了以下事件。

FederatedAuthentication.ServiceConfigurationCreated += onServiceConfigurationCreated;

我不再需要WebFarmSessionSecurityTokenHandler或配置更改将其插入。