2016-07-01 17 views
5

Hedef: Bir ASP.NET Web Uygulamasını Azure'a barındıran ve Google, Twilio ve SendGrid için OAuth2'yi kullanıcı bilgileri için bir veritabanı ile birlikte kullanma.Web.config için Web.config dışındaki kimlik bilgilerini güvenli bir şekilde nasıl kullanabilirsiniz? ASP.NET & Azure için

Sorun: Web.config dosyamda yer alan "appSettings" i dışarıdan bir yapılandırma dosyası kullandığımda yayımlamadan sonra hatalar alıyorum. Azure'da, yayınlanan Web.config ayarlarını araştırma ve anlayışımdan geçersiz kılan Google OAuth2 için güvenli bir şekilde depolanması için kimlik bilgileri girdim. Azure için koduma duyarlı kimlik bilgilerim arasında doğru ve güvenli bir şekilde nasıl kullanırım?

Araştırma: Ben adım bu bağlantıyı adımı takip ettik -

https://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth-sql-database/ 

Bu bağlantı aynı zamanda aşağıda tarihinde OAuth2 uygulanması için başka bağlantıya yol açar -

www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on#goog 

Ancak bu güvensiz koyar hassas bir ASP.NET bilgisinin Azure'a dağıtımı için güvenli/en iyi uygulamalar için buraya açılan bir Güvenlik notuyla belirtilen web.config dosyasındaki hassas bilgiler -

Anlayışım, web.config dosyasındaki hassas verileri/kimlik bilgilerini barındıran harici bir dosyaya başvuruda bulunmanın en iyi uygulamadır. IIS'nin * .config hizmeti sunmadığını ve "git add *" öğesinin altında yer alan yapılandırma dosyasının bulunduğu konumdan dolayı, depoya duyarlı kimlik bilgilerini eklemeyeceğini unutmayın.

Web.config -

</connectionStrings> 
    <appSettings file="..\..\AppSettingsSecrets.config">  
     <add key="webpages:Version" value="3.0.0.0" /> 
     <add key="webpages:Enabled" value="false" /> 
     <add key="ClientValidationEnabled" value="true" /> 
     <add key="UnobtrusiveJavaScriptEnabled" value="true" />  
    </appSettings> 
    <system.web> 

AppSettingsSecrets.config (2. hatta Not appSettings) düzgün/güvenli dan AppSettingsSecrets.config benim Kimliği ve Sırrı başvuru nasıl

<appSettings> 
    <!-- SendGrid--> 
    <add key="mailAccount" value="My mail account." /> 
    <add key="mailPassword" value="My mail password." /> 
    <!-- Twilio--> 
    <add key="TwilioSid" value="My Twilio SID." /> 
    <add key="TwilioToken" value="My Twilio Token." /> 
    <add key="TwilioFromPhone" value="+12065551234" /> 

    <add key="GoogClientID" value="1.apps.googleusercontent.com" /> 
    <add key="GoogClientSecret" value="My Google client secret." /> 
</appSettings> 

7. adımda listelenen kod içinde?

www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on#goog 

İlgili kod (Google Kimlik Doğrulama için kullanılan dibi dikkat edin) aşağıda listelenmiştir: Bu bilgileri Azure, sırları dağıtmak için öğretici Ayrıca

public void ConfigureAuth(IAppBuilder app) 
{ 
    // Configure the db context and user manager to use a single instance per request 
    app.CreatePerOwinContext(ApplicationDbContext.Create); 
    app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 

    // Enable the application to use a cookie to store information for the signed in user 
    // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
    // Configure the sign in cookie 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
     LoginPath = new PathString("/Account/Login"), 
     Provider = new CookieAuthenticationProvider 
     { 
      OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
       validateInterval: TimeSpan.FromMinutes(30), 
       regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
     } 
    }); 

    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

    // Uncomment the following lines to enable logging in with third party login providers 
    //app.UseMicrosoftAccountAuthentication(
    // clientId: "", 
    // clientSecret: ""); 

    //app.UseTwitterAuthentication(
    // consumerKey: "", 
    // consumerSecret: ""); 

    //app.UseFacebookAuthentication(
    // appId: "", 
    // appSecret: ""); 

    app.UseGoogleAuthentication(
     clientId: "000-000.apps.googleusercontent.com", 
     clientSecret: "00000000000"); 
} 

listelenir:

When you deploy your web app to Azure, the AppSettingsSecrets.config file won't be deployed (that's what you want). You could go to the Azure Management Portal and set them manually, to do that: 
1. Go to http://portal.azure.com, and sign in with your Azure credentials. 
2. Click Browse > Web Apps, then click the name of your web app. 
3. Click All settings > Application settings. 
The app settings and connection string values override the same settings in the web.config file. In our example, we did not deploy these settings to Azure, but if these keys were in the web.config file, the settings shown on the portal would take precedence. 

Bu, hassas bilgileri portal üzerinden Azure'a manuel olarak girebileceğimi ve (varsaydığımı varsayalım) bu işlemin güvenli bir yöntem olduğunu söyler. Web sayfamın bilgilere erişmesine ve kullanmasına izin verirken özel hassas bilgiler. (yanılıyorsam beni düzeltin!) Ancak, bir görüntü bağlantı olarak aşağıda gösterildiği gibi el benim web uygulaması artık çalışma zamanı hatası atıyor, bu bilgiyi girdiğinde:

Server Runtime Error

Herhangi öneriler veya diğer bağlantılar veya işaretçiler/ipuçları büyük ölçüde takdir edilecektir! Şimdiden teşekkürler!

DÜZENLEME: web.config dosyasında customErrors kapatarak ve bu site şimdi veren hatadır Azure dağıtım yeniledikten sonra - Esasen benim kod ben depoladığınız saklanan Google OAuth2 kimlik bilgileri çekerek değil Azure. Google OAuth2 için Azure'da depolanmış kimlik bilgilerini almak için kodumu nasıl alabilirim? NewSiteError

+0

Yığın izinin ne olduğunu görmek için customErrors'ı yapılandırmada mı kapattınız? Bu bilmek yardımcı olacaktır. Ayrıca çözümünüzde AppSettingsSecrets.config var mı? değilse, yayınlama içermez. –

+0

AppSettingsSecrets.config çözümümde yer almıyor, çünkü En İyi Uygulamalar linki, çözüm içinde hassas verilerin dahil edilmesinin güvenli olmadığını ve yayınlanmasını sağladığını söylüyor (web.config dosyasında da olduğu gibi) - Araştırmamda belirtildiği gibi Amacın üstünde AppSettingsSecrets.config gerçekten de yayınlamada yer almıyor, bu da bana OAuth2 vb. için hassas verileri nasıl güvenli bir şekilde kullanabileceğimi sorusuna geri getiriyor. – jat247

cevap

1

Önce, asıl sorunu bulabilmeniz için customErrors'ı kapatırım, ancak benim tahminim, çözümünüze AppSettingsSecrets.config dosyasını dahil etmemenizdir. Bu, dosya orada bulunmadığı için dağıtıldıktan sonra bir soruna neden olacaktır - bu yüzden bir web.config dönüştürmesi kullanarak configSource veya dosya özniteliklerini yapılandırmadan kaldırmalısınız. Eğer bir yayın oluşturma yayınlama ne zaman

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
... 
    <connectionStrings xdt:Transform="RemoveAttributes(configSource)"/> 
    <appSettings xdt:Transform="RemoveAttributes(file)"/> 

, bu o dosya yollarını kaldıracaktır o kazandı böylece yapılandırmasındaki: iç

Yani Web.Release.config içinde aşağıdaki ekleyebilir dağıtıldıktan sonra başlangıçta başarısız.

Güncelleme

Şimdi portalda AppSettings'i için AppSettingsSecrets.config dosyada bulunan tüm appSettings eklemeniz gerekir. Bu, yayınlanan site kimlik bilgilerinizi yalnızca Azure'da tutacaktır.

Tüm Web.config ve diğer dosyalardaki appSettings, aynı listelemede birleştirilir (kodunuzun app.config, AppSettingsSecrets.config öğesinden gelmesi veya yapılandırılmış olması gerekir) . masmavi portalı İşte AppSettings'i üzerinde iyi bir makale: https://buildazure.com/2015/11/30/azure-web-app-application-settings/

iyi şeyler Kurulumunuzda hakkındadır:

  1. AppSettingsSecrets.config sadece geliştiriciler için gerekli sırları vardır ve kaynak kontrolü dahil değildir veya yayınlanmış
  2. yayınlanmış site kimlik bilgileri yalnızca Azure'da bulunur ve yalnızca Azure hesabına erişimi olanlar için kullanılabilir.
+0

CustomErrors'ı kapattım, hata şu anda sadece boş bir web sayfası "İç sunucu hatası oluştuğu için sayfa görüntülenemiyor." Yukarıda listelediğiniz kod satırını Web.Release.config dosyasına ekledim ve yeniden yayımladı. "Dahili sunucu hatası oluştuğu için sayfa görüntülenemiyor" hatası. hala aldığım şey. – jat247

+0

Yapılandırmayı Azure'da yeniledim. Hata şimdi ana gönderimdeki düzenlememde listeleniyor. Google OAuth2 kimlik bilgilerini Azure'a girmiş olmama rağmen, web kodumu kimlik bilgilerini almak için nasıl alacağımı bilmiyorum, bu nedenle site yüklenemedi ve yukarıda açıklanan hatayı verdi. Girdiğim Azure depolanmış Google OAuth2 kimlik bilgilerini almak için kodumu nasıl alabilirim? – jat247

+1

Bu tam olarak aradığım şey!Azure'daki Uygulama ayarları içinde kimlik bilgileri vardı, ancak web uygulamamın bu kimlik bilgilerini kullanmak için doğru şekilde başvuruda bulunma kodu yoktu. Teşekkür ederim! – jat247

İlgili konular