Как стать автором
Обновить

Нестандартное использование Protected Configuration Provider в проектах ASP.NET Web Forms

Время на прочтение3 мин
Количество просмотров1.9K
Сегодня я хотел бы рассказать об одной интересной, на мой взгляд, возможности, которую можно получить от Protected Configuration Provider.

Итак, что такое Protected Configuration Provider? Это класс, который позволяет производить шифрование и дешифрование содержимого определённых секций файла конфигурации web.config. Обычно это используется при развёртывании готового проекта на хостинге для защиты конфиденциальной информации — имена пользователей, пароли, строки подключения к базе данных, ключи шифрования, и т.д.

Прописывается в секции configProtectedData:

<configuration>
  <configProtectedData defaultProvider="SampleProvider">
    <providers>
      <add name="SampleProvider" 
        type="System.Configuration.RsaProtectedConfigurationProvider, 
              System.Configuration, Version=2.0.0.0, Culture=neutral, 
              PublicKeyToken=b03f5f7f11d50a3a,
             processorArchitecture=MSIL"
        keyContainerName="SampleKeys" 
        useMachineContainer="true" />
    </providers>
  </configProtectedData>
</configuration>


Используется в секциях appSettings и connectionStrings:

<appSettings configProtectionProvider="SampleProvider">
	<EncryptedData>
		...
	</EncryptedData>
</appSettings>

<connectionStrings configProtectionProvider="SampleProvider">
	<EncryptedData>
		...
	</EncryptedData>
</connectionStrings>


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

Для чего это нужно? Прежде всего, для развертывания тестовых линеек сайтов основанных на одном и том же проекте, но имеющих разные строки подключения к базе данных, и другие установки в секции appSettings и connectionStrings.

Другими словами говоря, это может сильно упростить жизнь, когда вам нужно развернуть, к примеру несколько одинаковых сайтов, только с разными настройками, но имеющих общий код. Например, с разными именами темы или строками подключения к базе данных.

Напишем и установим такой провайдер.

В IIS менеджере создадим сайт “DemoSite”, который будет ссылаться пока на пустую папку. Далее создадим два приложения (виртуальные директории), которые будут ссылаться на корневую папку нашего проекта, там где лежит наш web.config.



В файле web.config изменим секцию appSettings и connectionStrings, чтобы получилось, что то вроде этого:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
	...
	<appSettings configProtectionProvider="DemoConfigurationProvider">
		<EncryptedData>
            	<profile1>
				...
            </profile1>
      	      <profile2>
				...
            	</profile2>
            <defaultSettings>
				...
      	      </defaultSettings>
		</EncryptedData>
	</appSettings>
	...
	<connectionStrings configProtectionProvider="DemoConfigurationProvider">
		<EncryptedData>
            	<profile1>
				...
            </profile1>
      	      <profile2>
				...
            	</profile2>
            <defaultSettings>
				...
      	      </defaultSettings>
		</EncryptedData>
	</connectionStrings>
	...
	<configProtectedData>
		<providers>
			<add 
			    name="DemoConfigurationProvider" 
			    type="Renascence.DemoConfigurationProvider,DemoConfigurationProvider" 
			    />
		</providers>
	</configProtectedData>
</configuration>


Теперь у нас появились в конфиге секции profile1 и profile2, а также мы указали в качестве провайдера класс DemoConfigurationProvider.

После этих манипуляций вы можете обращаться к своему сайту с использованием этих профилей. Примерно так: localhost/DemoSite/profile1 или localhost/DemoSite/profile2. Соответственно будут применяться соответствующие настройки из секций profile1 и profile2.

Надеюсь, идея понятна и будет кому то полезна. Теперь нам осталось только реализовать класс DemoConfigurationProvider.

Подробно рассматривать этот класс в данной статье я не стану, просто дам ссылку на готовый демо проект, включающий исходный текст.

После запуска демо проекта вы должны получить примерно следующее:



Скачать: демо на github
Теги:
Хабы:
Всего голосов 8: ↑6 и ↓2+4
Комментарии2

Публикации

Истории

Работа

.NET разработчик
50 вакансий

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань