برنامه شما معمولاً نیاز دارد تا داده های پیکربندی حساس را در خود داشته باشد. این داده ها میتواند شامل رشتههای اتصال پایگاه های اطلاعاتی ( مبتنی بر داده ها) با اطلاعات مربوط به شناسه کاربری و رمز عبور مربوطه و یا اطلاعات مربوط به اعتبار سنجی مربوط به اتصال به نرم افزار ثالث باشد. هرگز نباید اطلاعات حساسی را در کد برنامه خود ذخیره کنید یا آن را در سیستم کنترل کد خود وارد کنید. مطمئن شوید که از استفاده از اطلاعات سری یکسان در محیط های مختلف خودداری می کنید. به عنوان مثال، اطلاعات مربوط به اعتبارسنجی دسترسی به پایگاه داده باید بین محیط های توسعه، آزمایش و تولید متفاوت باشد. کل تیم توسعه شما نیازی به دانستن اطلاعات سری مربوط به محیط خود محصول ندارد. سیستم پیکربندی ASP.NET Core گزینه هایی را برای مدیریت اطلاعات سری محیط ارائه می دهد و آنها را از کد برنامه دور نگه می دارد.
بیایید به کد بازگردیم.
در کلاس startup.cs پروژه Roux Academy، ما از ConfigurationBuilder برای تعیین و تعریف منابع پیکربندی و ارائه دهندگان استفاده می کنیم. این کار به برنامه اجازه می دهد تا اطلاعات مربوط به تنظیمات را از چندین منبع در زمان اجرا فراخوانی کند. تنظیمات هم که زوج های کلید- مقادیر ی هستند که کلید در آنها منحصر به فرد است. منابع به ترتیبی که فهرست کرده ایم خوانده می شوند. بنابراین ConfigurationBuilder ابتدا، تنظیمات را از فایل appsettings.json میخواند. سپس از فایل تنظیمات برنامه برای محیط فعلی که در حال اجرا است (appsettings.{env.EnvironmentName}.json) می خواند. آخرین مورد هم ارائه دهنده متغیرهای محیطی است. هر تنظیم، هر گونه تنظیمات فایل های Json قبلی را لغو می کند. استفاده از متغیرهای محیطی گزینه خوبی است زیرا آنها بر روی دستگاهی تنظیم شده اند که برنامه روی آن اجرا می شود.
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
آنها بخشی از پروژه شما نیستند و نمی توانند مانند فایل های پیکربندی به اشتباه به سیستم کنترل سورس برنامه اضافه شوند. بیایید نگاهی به فایل appsettings.json بیندازیم که برای زمان توسعه استفاده کرده ایم. همانطور که می بینیم این فایل دارای یک رشته اتصال به پایگاه داده لوکال(محلی) است. از آنجایی که در حالت قابل اعتماد (Trusted_Connection=True) کار می کنیم، هیچ اطلاعات حساسی را نمایش نمی دهیم.
"ConnectionStrings": {
"RouxAcademy": "Server=(localdb)\\mssqllocaldb;Database=RouxAcademy;Trusted_Connection=True;MultipleActiveResultSets=true"
}
هنگامی که برنامه را در یک سرور آزمایشی یا تولیدی نصب و مستقر می کنیم، می توانیم رشته اتصال به دیتا بیس را با استفاده از یک متغیر محیطی جایگزین کنیم.
در اینجا یک متغیر سیستمی نمونه ای است که من در دستگاه ویندوز خود اضافه کرده ام.
نام باید به صورت استاندارد باشد، ابتدا عبارت ConnectionStrings و سپس یک کاراکتر ":" و سپس عبارت RouxAcademy را قرار می دهیم تا متد GetConnectionString بتواند آن را پیدا کند.
ممکن است برخی از سیستم ها اجازه استفاده از ":" را در اسامی متغیر های محلی ندهند، در این صورت از دو تا "_" پشت سر هم استفاده می کنیم. فقط توجه داشته باشید که متغیرهای محیط معمولاً رمزگذاری نمی شوند. اگر سرور قابل دستیابی باشد و یا فرآیند مربوطه در معرض نمایش قرار بگیرد، می توان آن اطلاعات را خواند.