TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #139 84
🚀 چرا Connection String رو مستقیم تو appsettings.json نگذاریم؟

آشنایی کامل با Azure Key Vault

🔐 وقتی توی یک پروژه ASP.NET Core داری کار می‌کنی، معمولاً Connection String و Credentialهای حساس رو توی appsettings.json میزاری.
❌ اما این کار چند تا مشکل اساسی داره:

📂 فایل پیکربندی معمولاً داخل سورس کنترل (Git) هست → پس هرکسی به مخزن دسترسی داشته باشه، به داده‌های حساس هم دسترسی پیدا می‌کنه.

🛠 حتی اگه تو gitignore. بگذاری، باز هم روی سرور یا محیط‌های مشترک ممکنه نشت کنه.

🔓 توی Production، این اطلاعات ممکنه لاگ بشه یا با خطاها لو بره.

✅ راه‌حل امن و استاندارد: استفاده از Azure Key Vault

🔍 حالا Azure Key Vault چیه؟
یک سرویس ابری از Azure برای ذخیره‌سازی امن:

🔑 Secrets (مثل Connection String، API Keys، Tokenها)

🗝 Keys (کلیدهای رمزنگاری)

📜 Certificates (گواهی‌ها)

💯مزیت‌ها:

• مدیریت مرکزی و امن داده‌های حساس.

• کنترل سطح دسترسی به کمک Microsoft Entra ID.

• پشتیبانی از Hardware Security Module (HSM).

📦 پکیج‌های لازم
dotnet add package Azure.Extensions.AspNetCore.Configuration.Secrets
dotnet add package Azure.Identity

🛠 راه‌اندازی در حالت Development
برای محیط لوکال، از Secret Manager استفاده کن:
<PropertyGroup>
<UserSecretsId>{GUID}</UserSecretsId>
</PropertyGroup>

اضافه کردن Secret:
dotnet user-secrets set "DbConnection" "Server=.;Database=Test;User Id=sa;Password=1234"


🏭 راه‌اندازی در Production با Azure Key Vault
1️⃣ ساخت Resource Group و Key Vault
az group create --name "MyGroup" --location "westeurope"
az keyvault create --name "myvault123" --resource-group "MyGroup" --location "westeurope"

2️⃣ ذخیره Secrets
az keyvault secret set --vault-name "myvault123" --name "DbConnection" --value "Server=sql.example.com;Database=Prod;..."


🗂 اتصال ASP.NET Core به Key Vault
روش ۱: با گواهی X.509
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new ClientCertificateCredential(
builder.Configuration["AzureADDirectoryId"],
builder.Configuration["AzureADApplicationId"],
x509Certificate));

روش 2️⃣ : با Managed Identity (پیشنهادی در Azure)
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential());


📌 بهترین نکات امنیتی

🔒 هر محیط (Dev/Prod) باید Key Vault جدا داشته باشه.

📛 از نام‌گذاری استاندارد برای Secrets استفاده کن (برای بخش‌ها از -- به جای :).

🔄 برای تغییرات حساس، ReloadInterval رو تنظیم کن تا مقادیر به‌روزرسانی بشن.

🛑 و Secrets رو هرگز در لاگ‌ها چاپ نکن.

🎯 نتیجه
با این روش:

• اطلاعات حساس هرگز در سورس‌کد یا فایل‌های config ذخیره نمی‌شن.

• در صورت نشت سورس یا فایل‌ها، اطلاعات Production در امانه.

• مدیریت و تغییر مقادیر حساس از طریق Azure Portal یا CLI انجام میشه، بدون نیاز به Deploy دوباره اپلیکیشن.

🔖 هشتگ‌ها:
#CSharp #ASPNetCore #Azure #KeyVault #CodeSafety #MicrosoftAzure #ConnectionString
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 →