2016-07-01 8 views
5

Ziel: Hosten Sie eine ASP.NET-Webanwendung für Azure und verwenden Sie OAuth2 für Google, Twilio und SendGrid mit einer Datenbank für Benutzerinformationen.So verwenden Sie Anmeldeinformationen außerhalb von web.config für ASP.NET und Azure

Problem: Ich erhalte Fehler beim Veröffentlichen, wenn ich eine externe Konfigurationsdatei verwende, die meine "appSettings" in meiner Datei Web.config referenziert. In Azure habe ich auch Anmeldeinformationen für Google OAuth2 gespeichert, die die veröffentlichten Einstellungen von Web.config aufgrund meiner Nachforschungen und meines Verständnisses außer Kraft setzen. Wie kann ich meine code-sensitiven Anmeldeinformationen für Azure richtig und sicher verwenden und darauf verweisen?

Research: Ich habe für Schritt diesen Link Schritt -

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

Dieser Link führt auch zu einem anderen Link für Google OAuth2 Implementierung unten -

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

dieses jedoch unsicher macht die vertraulichen Informationen in der Datei web.config, die in einem Sicherheitshinweis vermerkt sind, der hier zu sicheren/bewährten Verfahren für die Bereitstellung sensibler ASP.NET-Informationen in Azure führt -

www.asp.net/identity/overview/features-api/best-practices-for-deploying-passwords-and-other-sensitive-data-to-aspnet-and-azure 

Mein Verständnis ist, dass die Referenzierung einer externen Datei, die die sensiblen Daten/Anmeldeinformationen aus der Datei web.config enthält, eine bewährte Methode ist. Ich stelle fest, dass IIS nicht die Datei * .config ausgibt und aufgrund des Verweises auf den Speicherort der referenzierten Konfigurationsdatei selbst "git add *" die vertraulichen Anmeldeinformationen nicht zum Repository hinzufügt.

Web.config - (Hinweis appSettings on line 2)

</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

<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> 

Wie kann ich richtig/sicher meine ID und Geheimnis aus der AppSettingsSecrets.config Referenz aus innerhalb des Codes, der in Schritt 7 aufgeführt ist?

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

Relevante Code ist unten aufgeführt (die unten für Google-Authentifizierung verwendet beachten):

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"); 
} 

Zusätzlich im Tutorial Geheimnissen für die Bereitstellung dieser Informationen Zu aufgeführt:

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. 

Das sagt mir, dass ich die sensiblen Informationen über das Portal manuell in Azure eingeben kann und (ich nehme an) dass dies eine sichere Methode ist, um die vertrauliche Anmeldeinformationen privat, während meine Webanwendung auf die Informationen zugreifen und diese nutzen kann. (mich bitte korrigieren, wenn ich falsch!) Allerdings, wenn ich manuell eingegeben diese Informationen jetzt meine Web-Anwendung einen Laufzeitfehler wirft, wie unten als Bildlink gezeigt:

Server Runtime Error

Beliebig Vorschläge oder andere Links oder Hinweise/Tipps würden sehr geschätzt werden! Danke im Voraus!

EDIT: Nachdem die Custom in der Datei web.config ausschalten und Auffrischen des Azure Deployment dies der Fehler ist die Website jetzt ergibt - Im Wesentlichen ist mein Code nicht die gespeicherten Google OAuth2 Credentials zieht ich gespeichert habe in Azurblau. Wie erhalte ich meinen Code zum Abrufen der in Azure für Google OAuth2 gespeicherten Anmeldeinformationen?

+0

Haben Sie den customerrors in der Config-off, um zu sehen, was der Stack-Trace ist? Das wäre hilfreich zu wissen. Ist die AppSettingsSecrets.config auch in Ihrer Lösung enthalten? wenn nicht, wird die Veröffentlichung es nicht einschließen. –

+0

AppSettingsSecrets.config ist nicht in meiner Lösung enthalten, da die Link Best Practices sagt, dass es nicht sensible Daten sicher in der Lösung zu enthalten und hat es veröffentlicht (wie nur deutlich in der web.config-Datei einschließlich) - Wie in meiner Forschung festgestellt, so über dem Zweck ist, dass AppSettingsSecrets.config in der Tat nicht in dem veröffentlichen enthalten ist, die mich zu der Frage, wie bringt wieder kann ich sensible Daten sicher für OAuth2 verwenden usw. – jat247

Antwort

1

Zuerst würde ich die customErrors deaktivieren, so dass Sie das eigentliche Problem finden können, aber meine Vermutung ist, dass Sie nicht die AppSettingsSecrets.config in Ihrer Lösung enthalten. Dies führt nach der Bereitstellung zu einem Problem, da die Datei nicht vorhanden ist. Daher sollten Sie die ConfigSource- oder Dateiattribute mithilfe einer web.config-Transformation aus der Konfiguration entfernen.

So in der Web.Release.config können Sie das folgende innerhalb der hinzufügen:

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

Wenn Sie eine veröffentlichte der Release-Build haben, wird diese diese Dateipfade aus der Config entfernen, damit es ‚gewonnen t beim Start fehlgeschlagen, sobald es implementiert wurde.

aktualisieren

Nun müssen Sie alle appSettings hinzuzufügen, die in dem Portal zu den appSettings in der AppSettingsSecrets.config Datei waren. Dadurch werden die Anmeldeinformationen für Ihre Website nur in Azure gespeichert.

Alle AppSettings in der Web.config und alle anderen Dateien werden in die gleiche Liste zusammengefasst (Code Bedeutung muss nicht der appSetting weiß aus der web.config kommt, AppSettingsSecrets.config oder von der konfiguriert ist, . azur Portal Hier ist ein guter Artikel auf appSettings ist: https://buildazure.com/2015/11/30/azure-web-app-application-settings/

die guten Dinge über Ihr Setup ist:

  1. die AppSettingsSecrets.config hat die nur für Entwickler benötigten Geheimnisse und ist nicht in der Quellcodeverwaltung enthalten oder veröffentlicht
  2. die veröffentlichte Site Anmeldeinformationen sind nur in Azure und zur Verfügung nur diejenigen mit Zugang zum Azure-Konto.
+0

ich drehte custom ausgeschaltet, ist der Fehler jetzt nur noch eine leere Webseite mit dem Text "Die Seite kann nicht angezeigt werden, weil ein interner Serverfehler aufgetreten ist." ich die Codezeile Sie oben auf die Web.Release.config Datei und neu veröffentlicht aufgeführt hinzugefügt. Der Fehler "Die Seite kann nicht angezeigt werden, weil ein interner Serverfehler aufgetreten ist." ist immer noch was ich bekomme. – jat247

+0

Ich habe die Konfiguration in Azure aktualisiert. Der Fehler ist jetzt in meiner Bearbeitung in meinem Hauptpost aufgeführt. Auch wenn ich die Google OAuth2 Anmeldeinformationen in Azure eingegeben weiß ich nicht, wie meinen Web-Code zu erhalten, um die Anmeldeinformationen zu ziehen, so dass die Website nicht geladen werden kann und liefert den Fehler oben verbunden. Wie erhalte ich meinen Code zum Abrufen der von Azure gespeicherten Google OAuth2-Anmeldedaten, die ich eingegeben habe? – jat247

+1

Genau das habe ich gesucht!Ich hatte Zugangsdaten innerhalb der App-Einstellungen in Azure, aber meine Webanwendung hatte nicht den Code, um diese Zugangsdaten korrekt zu referenzieren, um sie zu nutzen. Vielen Dank! – jat247