2015-07-15 4 views
3

Где должны быть сохранены производственные и промежуточные строки в приложении asp.net-5 при развертывании в IIS 7 (не Azure)?Где я должен хранить строку подключения для рабочей среды моего приложения asp.net-5?

Я ищу рекомендуемый способ сделать это/лучше всего практиковать, особенно безопасно.

ответ

2

В ASP.NET 5 можно указать несколько источников конфигурации. Благодаря этому приветствующему изменению предыдущей модели вы можете сохранить строку соединения для разработки в простом json-файле, а также строку промежуточного и производственного подключения в переменных среды непосредственно на соответствующих серверах.

Если настроить приложение так:

var config = new Configuration() 
.AddJsonFile("config.json") 
.AddEnvironmentVariables(); 

и есть строка подключения в обоих config.json и переменной окружения, то окружающая среда источник победит.

Итак, сохраните свою строку соединения разработки в config.json (и свободно зарегистрируйтесь в исходном контроле) и произведите ее в переменной окружения. Больше информации here и here.

+4

Хорошо, но если сохранить строку подключения в переменной среды в производственной среде, это означает, что мы теряем изоляцию приложений. Что делать, если 2 приложения используют одну и ту же переменную среды (ConnectionString)? Это означает, что у нас должно быть какое-то пространство имен для имен переменных. Это не выглядит хорошо ... Кроме того, это также означает, что приложение может получить доступ к паролю в строке подключения другого приложения (безопасность?) – Daniel

+2

А, конечно. IIS поддерживает идентификаторы пула приложений и загрузку профилей пользователей. Проверь это. Также проверьте вторую предоставленную ссылку и Secrets API. Любой из этих двух вариантов должен решить вашу проблему. –

+2

Я в конечном итоге составил свое собственное решение, путешествуя полностью из корневого каталога в конфиг. {Env} .json, добавив всю конфигурацию. {Env} .json находится в каталогах между ними. Поэтому я могу иметь конфигурацию. {Env} .json в каталоге, который не перезаписывается при публикации веб-сайта, и держите там строку соединения (все еще отсутствует шифрование ...). Я сделал это таким образом, потому что создание пользователя для каждого веб-сайта показалось мне слишком сложным, а интерфейс Secrets скорее предназначен для пользовательской среды. Но я приму ваше решение, потому что я думаю, что это рекомендуемый способ сделать это ... – Daniel

2

Вы хотите использовать пользовательские секреты API. Смотрите мой пример ниже (на основе ASP.NET 5 Beta 5):

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(
    applicationEnvironment.ApplicationBasePath); 

// This reads the configuration keys from the secret store. This allows you to store 
// connection strings and other sensitive settings on your development environment, so you 
// don't have to check them into your source control provider. 
configurationBuilder.AddUserSecrets(); 

IConfiguration configuration = configurationBuilder.Build(); 

Вы также должны установить userSecretsId в project.json (см ссылки ниже). Это уникальный идентификатор для ваших проектов секретов и будет необходимо ниже, когда вы создаете новый секрет:

{ 
    "webroot": "wwwroot", 
    "userSecretsId": "[Your User Secrets ID]", 
    "version": "1.0.0-*" 
    ... 
} 

Чтобы добавить/удалить/обновить пользовательские секреты вам нужно установить менеджер секреты, запустив:

dnu commands install SecretManager 

Затем используйте менеджер секретов на самом деле добавить/удалить/обновить настройки:

Usage: user-secret [options] [command] 
Options: 
    -?|-h|--help Show help information 
    -v|--verbose Verbose output 
Commands: 
    set  Sets the user secret to the specified value 
    help Show help information 
    remove Removes the specified user secret 
    list Lists all the application secrets 
    clear Deletes all the application secrets 
Use "user-secret help [command]" for more information about a command. 

См this и this документации для более Infor мация.

Следует также отметить, что с момента написания (ASP.NET 5 Beta 5) секреты пользователя не зашифрованы! Это изменится позже.