Drogi pamiętniku.
Pamiętam gdy mówili: konfiguracja w środowisku, nie wrzucaj sekretów do repozytorium, bądź mądry, nie czyń zła. Nie pamiętam tylko, żeby tłumaczyli jak to zrobić. Ja zrobiłem to tak na początku:
public class ConfigurationReader : IConfigurationReader | |
{ | |
public string MicrosoftClientId => GetEnvironmentString("MicrosoftClientId"); | |
public string MicrosoftclientSecret => GetEnvironmentString("MicrosoftclientSecret"); | |
public string TwitterConsumerKey => GetEnvironmentString("TwitterConsumerKey"); | |
public string TwitterconsumerSecret => GetEnvironmentString("TwitterconsumerSecret"); | |
public string FacebookAppId => GetEnvironmentString("FacebookAppId"); | |
public string FacebookAppSecret => GetEnvironmentString("FacebookAppSecret"); | |
public string GoogleClientId => GetEnvironmentString("GoogleClientId"); | |
public string GoogleClientSecret => GetEnvironmentString("GoogleClientSecret"); | |
private string GetEnvironmentString(string key) => Environment.GetEnvironmentVariable(key); | |
} |
I fajnie, myślę sobie, u siebie ustawie wartość na 1 a na produkcji ustawie na 2 i będzie cacy. Tak jak mówili, wszyscy będą zadowoleni a ja będę cutting edge i secure.
Zrobiłem deploy na produkcje, która jest na azure i szukam i szukam i nie ma. Nie da się, lub nie umiem znaleźć ustawienie środowiska na azure. W takim razie szukam na google i szukam, i znalazłem. Że best practices to posiadanie dodatkowego zewnętrznego pliku .config, w którym umieszcza się wszystkie krytyczne ustawienia, linkuje się do niego, na środowisku programistycznym a na produkcje się tego nie wysyła. Zamiast tego ustawia się zmienne ręcznie w azure application setting. No i dodatkowo lekka zmiana w aplikacji:
<appSettings file="./Auth.config"> | |
<!-- bla bla bla --> | |
</appSettings> |
ConfigReader działa teraz w oparciu o trochę inną metodę:
public class ConfigurationReader | |
{ | |
public string MicrosoftClientId => GetConfigurationString("MicrosoftClientId"); | |
public string MicrosoftclientSecret => GetConfigurationString("MicrosoftclientSecret"); | |
public string TwitterConsumerKey => GetConfigurationString("TwitterConsumerKey"); | |
public string TwitterconsumerSecret => GetConfigurationString("TwitterconsumerSecret"); | |
public string FacebookAppId => GetConfigurationString("FacebookAppId"); | |
public string FacebookAppSecret => GetConfigurationString("FacebookAppSecret"); | |
public string GoogleClientId => GetConfigurationString("GoogleClientId"); | |
public string GoogleClientSecret => GetConfigurationString("GoogleClientSecret"); | |
private string GetConfigurationString(string key) => ConfigurationManager.AppSettings[key]; | |
} |
W starym portalu azure klikamy:
Później przewijamy w dół, aż do sekcji app settings:
Tam ustawiamy app settings, których nie załączyliśmy w czasie produkcji paczki. Podobnie czynimy np. z connection settings, jeśli zawierać będą hasło zapisane czystym tekstem (sic!) czy inne ważne dane.
Jeśli potrzebujecie poznać jeszcze więcej szczegółów można przeczytać na stronie http://www.asp.net/identity/overview/features-api/best-practices-for-deploying-passwords-and-other-sensitive-data-to-aspnet-and-azurewww.asp.net
A dodatkowo dobry przyjaciel Scott Hanselman też popełnił w podobnym temacie hanselman.com
Dziękuje, do widzenia, dobranoc.