App settings w portalu azure

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.