Лучший способ скрыть значения для провайдера sessionState

Я использую поставщик состояния сеанса кеша Redis в своем приложении MVC. Разумеется, все настройки провайдера есть в моем Web.config. Приложение работает, если я просто помещаю Host и Key и все это в виде простых строк, поэтому оно выглядит так:

  <sessionState mode="Custom" customProvider="MySessionStateStore">
      <providers>
          <add 
            type="Microsoft.Web.Redis.RedisSessionStateProvider"
            name="MySessionStateStore" 
            host = "[HOST]"
            port = "6379"
            accessKey = "[KEY]"
            ssl = "false"
            throwOnError = "true"
            retryTimeoutInMilliseconds = "5000"
            databaseId = "0"
            applicationName = "TRAXProSurvey"
            connectionTimeoutInMilliseconds = "5000"
            operationTimeoutInMilliseconds = "1000"
          />
      </providers>
    </sessionState>

...где "[HOST]" и "[KEY]" вместо фактических значений. Но это не совсем безопасно, верно? Можно ли как-то скрыть эту информацию?

Я знаю об использовании параметров приложения в конфигурации Azure — на самом деле я использую пару для чего-то другого. Но я не нахожу способа использовать их здесь специально. Я могу создать переменную настройки приложения, но как получить доступ к этому значению в sessionState?? Я пытался использовать System.Configuration.ConfigurationManager.AppSettings("[name]") - только то, что с кавычками, и то с одинарными кавычками.

Я подумал, может быть, я просто зашифровал Web.config... Я обнаружил, что вы можете добавить "‹'MSDeployEnableWebConfigEncryptRule'>true‹'/MSDeployEnableWebConfigEncryptRule'>" (без одинарных кавычек) в .pubxml, но это не работает для обычных веб-сайтов Azure.

Я также нашел статьи/примеры для шифрования разделов Web.config с помощью aspnet_regiis.... но это не сработает в среде веб-фермы, такой как Azure, верно?

Итак, какие еще варианты (если они есть) есть? ... или это просто невозможно? Благодарю вас!


person Andy    schedule 03.06.2015    source источник


Ответы (1)


Вы можете использовать настройки приложения для настройки состояния сеанса Redis, как показано ниже.

Например, мы хотим установить host и accessKey в настройках приложения.

<appSettings>
  <add key="SomeHostKey" value="actual host value" />
  <add key="SomeAccessKey" value="actual access key" />
</appSettings>

вы можете выбрать любую строку в качестве «ключа» в настройках приложения. вы можете установить настройки приложения на портале Azure.

Теперь используйте этот ключ как значение в web.config, как показано ниже:

<sessionState mode="Custom" customProvider="MySessionStateStore">
      <providers>
          <add 
            type="Microsoft.Web.Redis.RedisSessionStateProvider"
            name="MySessionStateStore" 
            host = "SomeHostKey"
            port = "6379"
            accessKey = "SomeAccessKey"
            ssl = "false"
            throwOnError = "true"
            retryTimeoutInMilliseconds = "5000"
            databaseId = "0"
            applicationName = "TRAXProSurvey"
            connectionTimeoutInMilliseconds = "5000"
            operationTimeoutInMilliseconds = "1000"
          />
      </providers>
    </sessionState>

Вы можете указать все параметры в настройках приложения, если хотите. вы можете указать несколько параметров в настройках приложения, а остальное - в web.config, как хотите. Поставщик состояния сеанса обнаружит, предоставляете ли вы фактическое значение или ключ настройки приложения в web.config.

person Siddharth Chatrola    schedule 05.06.2015
comment
Так в данном случае это просто ключ настройки в кавычках?! Так просто! - person Andy; 05.06.2015
comment
Да, что это. Ключ настроек приложения в кавычках. - person Siddharth Chatrola; 05.06.2015
comment
Обратите внимание, что вы не можете переопределить эти параметры на портале Azure. даже если вы предоставите настройки приложения с тем же ключом, значение в файле web.config все равно будет использоваться. - person MPavlak; 04.01.2018