Как переместить federationConfiguration из web.config в какой-то настраиваемый файл конфигурации и загрузить его динамически с помощью кода

У меня есть конфигурация в web.config, и она отлично работает.

  <configuration>
  <system.identityModel.services>
    <federationConfiguration>
....
 </federationConfiguration>
  </system.identityModel.services>
</configuration>

Как переместить это из web.config в настраиваемый файл конфигурации и загрузить его из кода?

Я хочу использовать ту же структуру этой конфигурации, чтобы мне не пришлось ничего менять в коде, если мне придется изменить этот файл конфигурации.


person Birey    schedule 19.06.2014    source источник


Ответы (1)


Вы можете подключиться к событию WIF из вашего global.asax

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    FederatedAuthentication.FederationConfigurationCreated += FederatedAuthenticationOnFederationConfigurationCreated;

}

В этом обработчике вы можете адаптировать конфигурацию во время выполнения. Вот некоторый код, чтобы дать вам представление. Конечный код будет более сложным.

   private void FederatedAuthenticationOnFederationConfigurationCreated(object sender, FederationConfigurationCreatedEventArgs args)
    {
        var identityConfiguration = new IdentityConfiguration(loadConfig:false);
        identityConfiguration.SecurityTokenHandlers.Clear();
        //...
        identityConfiguration.SecurityTokenHandlers.Add(new Saml2SecurityTokenHandler());
        //...
        var configuration = new FederationConfiguration(loadConfig: false)
        {
            CookieHandler = new ChunkedCookieHandler(),
            //...
            IdentityConfiguration = identityConfiguration
        };
        args.FederationConfiguration = configuration;
    }

Если у вас есть какие-либо сомнения относительно того, какое значение присвоить какому объекту, вы всегда можете временно вернуться к конфигурации и проверить значения времени выполнения с помощью того же события. Не стоит недооценивать сложность и богатство конфигурации, предоставляемой WIF из коробки.
В общем, вам может понадобиться смесь «конфигурации кода» и «конфигурации web.config», если все еще используется web.config. для настройки некоторых более изменчивых частей конфигурации, а код используется для более неизменяемых частей...

person Willy Van den Driessche    schedule 20.06.2014
comment
Потребовалось очень много времени, чтобы прийти к выводу, чтобы отметить ваш ответ как правильный. Это было не то, что я искал в то время, когда задавал вопрос, но теперь, когда я реализовал его и прошел через все гайки и болты этого (также использовал плагин рефлектора VS2013 для просмотра/отладки кода фреймворка снова и снова) и моя реализация почти похожа на то, что вы дали, ваш ответ теперь имеет смысл и, следовательно, отмечен как правильный ответ. - person Birey; 09.09.2014
comment
Я бы никогда не начал здесь, если бы не ответ и комментарий. Это было очень полезно. - person Matthew David Jankowski; 23.03.2016