StartSTS и проверяющая сторона с балансировщиком нагрузки - PullRequest
1 голос
/ 21 октября 2011

Мне пришлось заменить обработчик токена сеанса следующим, из-за необходимости запуска моего сайта на балансировщиках нагрузки.

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 Ответ

2 голосов
/ 21 октября 2011
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 или изменения конфигурации для вставки в него.

...