Obiettivo: Ospitare un'app Web ASP.NET in Azure e utilizzare OAuth2 per Google, Twilio e SendGrid, con un database per le informazioni utente.Come utilizzare in modo sicuro le credenziali all'esterno di web.config per ASP.NET e Azure
Edizione: Ho ricevuto errori durante la pubblicazione quando utilizzo un file di configurazione esterno che il mio "appSettings" nel mio file Web.config fa riferimento. In Azure ho anche inserito le credenziali per essere memorizzate in modo sicuro per Google OAuth2, che sovrascrive le impostazioni Web.config pubblicate dalla mia ricerca e comprensione. Come faccio a utilizzare e fare riferimento in modo corretto e sicuro all'interno delle credenziali sensibili al codice per Azure?
di ricerca: Ho seguito questo passo dopo passo Link -
https://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth-sql-database/
Questo link porta anche ad un altro collegamento per l'implementazione di Google OAuth2 qui sotto -
www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on#goog
Tuttavia questo mette insicuro le informazioni sensibili all'interno del file web.config che sono annotate da una nota sulla sicurezza che porta qui per le migliori/sicure pratiche per la distribuzione di informazioni sensibili su ASP.NET in Azure -
www.asp.net/identity/overview/features-api/best-practices-for-deploying-passwords-and-other-sensitive-data-to-aspnet-and-azure
La mia comprensione è che fare riferimento a un file esterno che contiene i dati sensibili/credenziali all'interno del file web.config è una buona pratica. Prendo atto che IIS non pubblica * .config e, a causa della posizione del file di configurazione di riferimento, anche "git add *" non aggiungerà le credenziali sensibili al repository.
web.config - (appSettings nota sulla linea 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>
Come faccio corretto riferimento/in modo sicuro il mio ID e segreto dalla AppSettingsSecrets.config da all'interno del codice elencato nel passaggio 7?
www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on#goog
codice rilevante è elencato di seguito (si noti il fondo utilizzato per l'autenticazione di Google):
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");
}
Inoltre nel tutorial per la distribuzione segreti per Azure Questa informazioni sono elencate:
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.
Questo mi dice che posso inserire manualmente le informazioni sensibili in Azure attraverso il portale e (presumo) questo è un metodo sicuro per mantenere credenziali riservate private pur consentendo alla mia applicazione web di accedere e utilizzare le informazioni. (Si prega di correggermi se sbaglio!) Tuttavia, quando ho inserito manualmente queste informazioni, la mia applicazione web è ora gettando un errore di runtime come illustrato di seguito come un link d'immagine:
Qualsiasi suggerimenti, o altri link o puntatori/suggerimenti sarebbero molto apprezzati! Grazie in anticipo!
EDIT: Dopo aver spento le customErrors nel file web.config, e aggiornare la distribuzione Azure questo è l'errore nel sito ora produce - In sostanza il mio codice non sta tirando le credenziali di Google OAuth2 memorizzati ho memorizzato in Azzurro. Come faccio a ottenere il mio codice per recuperare le credenziali archiviate in Azure per Google OAuth2? NewSiteError
Hai disattivato CustomErrors nella configurazione per vedere qual è la traccia dello stack? Sarebbe utile sapere. Inoltre, AppSettingsSecrets.config è incluso nella soluzione? se non la pubblicazione non lo includerà. –
AppSettingsSecrets.config non è incluso nella mia soluzione, in quanto il link Best Practices afferma che non è sicuro includere dati sensibili all'interno della soluzione e averli pubblicati (come semplicemente incluso nel file web.config) - Come notato nella mia ricerca sopra lo scopo è in modo che AppSettingsSecrets.config NON sia effettivamente incluso nella pubblicazione, il che mi riporta alla domanda su come utilizzare in modo sicuro dati sensibili per OAuth2 ecc. – jat247