TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #135 116
🔐 ذخیره‌سازی امن اسرار برنامه در محیط توسعه در ASP.NET Core


این مقاله توضیح می‌دهد که چگونه داده‌های حساس را برای یک اپلیکیشن ASP.NET Core روی یک ماشین توسعه مدیریت کنید. هرگز پسوردها یا دیگر داده‌های حساس را در سورس کد یا فایل‌های پیکربندی ذخیره نکنید. اسرار محیط پروداکشن نباید برای توسعه یا تست استفاده شوند. اسرار نباید همراه با اپلیکیشن دیپلوی شوند. اسرار پروداکشن باید از طریق ابزارهای کنترل‌شده مانند Azure Key Vault 🔑 قابل دسترسی باشند.

متغیرهای محیطی (Environment variables) 🌍

متغیرهای محیطی برای جلوگیری از ذخیره‌سازی اسرار برنامه در کد یا فایل‌های کانفیگ محلی استفاده می‌شوند. متغیرهای محیطی، مقادیر پیکربندی را برای تمام منابع پیکربندی که قبلاً مشخص شده‌اند، بازنویسی (override) می‌کنند.

⚠️ هشدار

متغیرهای محیطی معمولاً به صورت متن ساده و رمزنگاری‌نشده ذخیره می‌شوند. اگر ماشین یا فرآیند به خطر بیفتد، متغیرهای محیطی می‌توانند توسط افراد غیرقابل اعتماد قابل دسترسی باشند.

جداکننده : با کلیدهای سلسله‌مراتبی متغیرهای محیطی روی همه پلتفرم‌ها کار نمی‌کند (مثلاً Bash از آن پشتیبانی نمی‌کند). اما آندرلاین دوتایی (__):

✅ توسط همه پلتفرم‌ها پشتیبانی می‌شود.
✅ به طور خودکار با یک کالن (:) جایگزین می‌شود.

ابزار Secret Manager 🕵️‍♂️

ابزار Secret Manager داده‌های حساس را در طول توسعه اپلیکیشن ذخیره می‌کند. در این زمینه، یک داده حساس، یک سرّ برنامه (app secret) است. اسرار برنامه در مکانی جدا از درخت پروژه ذخیره می‌شوند و به یک پروژه خاص مرتبط هستند. اسرار برنامه به سورس کنترل چک‌این نمی‌شوند.

⚠️ هشدار

ابزار Secret Manager اسرار ذخیره شده را رمزنگاری نمی‌کند و نباید به عنوان یک مخزن قابل اعتماد در نظر گرفته شود. این ابزار فقط برای اهداف توسعه است. کلیدها و مقادیر در یک فایل کانفیگ JSON در پوشه پروفایل کاربر ذخیره می‌شوند.

نحوه کار ابزار Secret Manager 🪄

این ابزار جزئیات پیاده‌سازی مانند مکان و نحوه ذخیره مقادیر را پنهان می‌کند. مقادیر در یک فایل JSON در پوشه پروفایل کاربر ماشین محلی ذخیره می‌شوند:

Windows: 📁 %APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json

Linux / macOS: 📁 ~/.microsoft/usersecrets/<user_secrets_id>\secrets.json

کدی ننویسید که به مکان یا فرمت داده‌های ذخیره شده با Secret Manager وابسته باشد.

فعال کردن ذخیره‌سازی اسرار
از طریق CLI: ❯

در پوشه پروژه، دستور زیر را اجرا کنید:

dotnet user-secrets init

این دستور یک عنصر UserSecretsId به فایل csproj. شما اضافه می‌کند.
از طریق ویژوال استودیو: 🖱️
در Solution Explorer، روی پروژه راست‌کلیک کرده و Manage User Secrets را انتخاب کنید.

تنظیم یک سرّ ✍️

یک سرّ از یک کلید و مقدار تشکیل شده است. برای تنظیم آن، از دستور set استفاده کنید:

dotnet user-secrets set "Movies:ServiceApiKey" "12345"

کالن (:) در اینجا نشان می‌دهد که Movies یک آبجکت با پراپرتی ServiceApiKey است.

دسترسی به یک سرّ 📖

1️⃣ ثبت منبع پیکربندی User Secrets:
در اپلیکیشن‌های وب مدرن ASP.NET Core، WebApplication.CreateBuilder(args) به صورت خودکار AddUserSecrets را در محیط Development فراخوانی می‌کند.

2️⃣ خواندن سرّ از طریق Configuration API: ⚙️
شما می‌توانید اسرار را دقیقاً مانند مقادیر appsettings.json از طریق IConfiguration بخوانید.
var builder = WebApplication.CreateBuilder(args);
var movieApiKey = builder.Configuration["Movies:ServiceApiKey"];
var app = builder.Build();

app.MapGet("/", () => movieApiKey);

app.Run();

مثال در یک Page Model:
public class IndexModel : PageModel
{
private readonly IConfiguration _config;

public IndexModel(IConfiguration config)
{
_config = config;
}

public void OnGet()
{
var moviesApiKey = _config["Movies:ServiceApiKey"];
// ...
}
}
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →