C# अकादमी · पाठ

Secrets Management

development में .NET User Secrets और production में Azure Key Vault या environment variables का उपयोग करके secrets सुरक्षित रूप से संग्रहीत करें।

पाठ 4, कुल 4 में से12 चरण

Secrets Management, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

गोपनीय जानकारी कॉन्फ़िगरेशन नहीं है

पासवर्ड, API कुंजियाँ, कनेक्शन स्ट्रिंग और JWT साइनिंग कुंजियाँ कभी भी appsettings.json में संग्रहीत नहीं की जानी चाहिए और न ही स्रोत नियंत्रण में कमिट की जानी चाहिए। .NET गोपनीय जानकारी प्रबंधन के लिए कई विशेष रूप से बनाए गए तंत्र उपलब्ध कराता है।

User Secrets (विकास)

User Secrets विकास संबंधी गोपनीय जानकारी को प्रोजेक्ट डायरेक्टरी के बाहर, मशीन-स्थानीय फ़ाइल में रखते हैं। इन्हें विकास वातावरण में स्वचालित रूप से लोड किया जाता है और ये कभी भी स्रोत कोड के साथ साझा नहीं होते।

# Initialize (adds UserSecretsId to .csproj):
dotnet user-secrets init

# Set secrets:
dotnet user-secrets set "Database:Password" "dev-pass-123"
dotnet user-secrets set "Jwt:SigningKey" "dev-jwt-key-abc"
dotnet user-secrets set "OpenAI:ApiKey" "sk-..."

# List / remove:
dotnet user-secrets list
dotnet user-secrets remove "OpenAI:ApiKey"

# Stored at:
# macOS/Linux: ~/.microsoft/usersecrets/{id}/secrets.json
# Windows:     %APPDATA%\Microsoft\UserSecrets\{id}\secrets.json

User Secrets को स्पष्ट रूप से लोड करना

Host.CreateApplicationBuilder विकास वातावरण में User Secrets को स्वचालित रूप से लोड करता है। गैर-विकास परिस्थितियों या परीक्षण प्रोजेक्ट के लिए आप इन्हें स्पष्ट रूप से भी लोड कर सकते हैं।

var builder = Host.CreateApplicationBuilder(args);

// Automatic (Development only) — already done by default
// Equivalent manual call:
if (builder.Environment.IsDevelopment())
    builder.Configuration.AddUserSecrets<Program>();

// In test projects (no ASPNETCORE_ENVIRONMENT):
var config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", optional: true)
    .AddUserSecrets<Program>()   // loads secrets.json
    .AddEnvironmentVariables()
    .Build();

प्रोडक्शन के लिए पर्यावरण चर

प्रोडक्शन में गोपनीय जानकारी को पर्यावरण चर के रूप में इंजेक्ट करें—इन्हें रनटाइम पर OS या कंटेनर ऑर्केस्ट्रेटर से पढ़ा जाता है और कोड के साथ डिस्क पर सादे पाठ में कभी स्थायी रूप से संग्रहीत नहीं किया जाता।

# docker-compose.yml — inject secrets:
services:
  api:
    image: myapp:latest
    environment:
      - Database__Password=${DB_PASSWORD}     # from .env file
      - Jwt__SigningKey=${JWT_KEY}
      - ConnectionStrings__Default=Server=db;Password=${DB_PASSWORD}

# Kubernetes Secret:
kubectl create secret generic app-secrets \
  --from-literal=Database__Password=secret123 \
  --from-literal=Jwt__SigningKey=verylongkey

# Reference in pod spec:
# env:
#   - name: Database__Password
#     valueFrom:
#       secretKeyRef: { name: app-secrets, key: Database__Password }

Azure Key Vault एकीकरण

Azure Key Vault प्रोडक्शन के लिए एक प्रबंधित गोपनीय जानकारी संग्रह है। आधिकारिक प्रदाता गोपनीय जानकारी को सीधे कॉन्फ़िगरेशन प्रणाली में लोड करता है—आपका ऐप उन्हें किसी भी अन्य कॉन्फ़िगरेशन मान की तरह पढ़ता है।

// dotnet add package Azure.Extensions.AspNetCore.Configuration.Secrets
// dotnet add package Azure.Identity

var builder = WebApplication.CreateBuilder(args);

if (!builder.Environment.IsDevelopment())
{
    var kvUri = new Uri(builder.Configuration["Azure:KeyVaultUri"]!);

    // Uses Managed Identity / workload identity in production:
    builder.Configuration.AddAzureKeyVault(kvUri, new DefaultAzureCredential());
}

// Secrets named "Database--Password" in Key Vault
// are accessible as builder.Configuration["Database:Password"]
// (Key Vault uses -- as the : separator)

AWS Secrets Manager

AWS पर गोपनीय जानकारी को .NET कॉन्फ़िगरेशन पाइपलाइन में इंजेक्ट करने के लिए Amazon.Extensions.Configuration.SystemsManager या Secrets Manager का सीधे उपयोग करें।

// dotnet add package Amazon.Extensions.Configuration.SystemsManager

builder.Configuration.AddSystemsManager(
    path: "/myapp/production",     // parameter store prefix
    optional: false,
    reloadAfter: TimeSpan.FromMinutes(30));

// Or Secrets Manager directly:
using Amazon.SecretsManager;
using Amazon.SecretsManager.Model;

var client = new AmazonSecretsManagerClient();
var response = await client.GetSecretValueAsync(new GetSecretValueRequest
{
    SecretId = "myapp/production/db-password"
});
var secret = response.SecretString; // JSON string
// Parse and inject into config

HashiCorp Vault

HashiCorp Vault गतिशील गोपनीय जानकारी, गोपनीय जानकारी का रोटेशन और बारीक स्तर पर ऐक्सेस नियंत्रण उपलब्ध कराता है। .NET के साथ एकीकरण के लिए सामुदायिक VaultSharp लाइब्रेरी या किसी कॉन्फ़िगरेशन प्रदाता का उपयोग करें।

// dotnet add package VaultSharp

using VaultSharp;
using VaultSharp.V1.AuthMethods.Token;

var authMethod = new TokenAuthMethodInfo("vault-token");
var vaultClient = new VaultClient(
    new VaultClientSettings("https://vault.example.com:8200", authMethod));

// Read a secret:
var kv = await vaultClient.V1.Secrets.KeyValue.V2
    .ReadSecretAsync(path: "myapp/database", mountPoint: "secret");

var password = kv.Data.Data["password"].ToString();

// Then store in configuration or pass to IOptions:
builder.Configuration["Database:Password"] = password;

मेमोरी में गोपनीय जानकारी की सुरक्षा

मेमोरी में भी गोपनीय जानकारी को सावधानी से संभालना चाहिए। SecureString का उपयोग करें या using ब्लॉक के माध्यम से उसका दायरा सीमित करें, और गोपनीय मानों को लॉग करने से बचें।

// NEVER log secrets:
_logger.LogInformation("API Key: {Key}", apiKey); // WRONG!
_logger.LogInformation("API Key configured: {HasKey}", !string.IsNullOrEmpty(apiKey)); // CORRECT

// Mask in diagnostics:
public string KeyHint => apiKey.Length > 8
    ? $"{apiKey[..4]}...{apiKey[^4..]}"
    : "****";

// Scope the secret:
void ProcessWithSecret()
{
    var secret = LoadSecret();
    try   { UseSecret(secret); }
    finally { secret = string.Empty; } // clear reference
}

CI/CD में गोपनीय जानकारी

CI/CD पाइपलाइन (GitHub Actions, Azure DevOps, Jenkins) गोपनीय चर के संग्रह उपलब्ध कराती हैं। बिल्ड या डिप्लॉयमेंट के समय गोपनीय जानकारी को पर्यावरण चर के रूप में इंजेक्ट करें—उन्हें पाइपलाइन YAML में कभी सीधे न लिखें।

# GitHub Actions — store in Settings > Secrets:
# name: Deploy
# on: push
# jobs:
#   deploy:
#     runs-on: ubuntu-latest
#     env:
#       Database__Password: ${{ secrets.DB_PASSWORD }}
#       Jwt__SigningKey: ${{ secrets.JWT_KEY }}
#     steps:
#       - name: Run migration
#         run: dotnet ef database update

# Azure Pipelines:
# variables:
#   - group: my-app-secrets  # from Azure DevOps Variable Group

# The secrets are masked in logs and never stored in plaintext

वास्तविक उदाहरण: विकास/प्रोडक्शन गोपनीय जानकारी रणनीति

एक पूर्ण गोपनीय जानकारी रणनीति: विकास में User Secrets, प्रोडक्शन में Azure Key Vault और वैकल्पिक व्यवस्था के रूप में पर्यावरण चर।

var builder = WebApplication.CreateBuilder(args);

if (builder.Environment.IsDevelopment())
{
    // Dev: local secrets.json, never committed
    builder.Configuration.AddUserSecrets<Program>();
}
else
{
    // Production: Azure Key Vault via Managed Identity
    var kvUri = builder.Configuration["Azure:KeyVaultUri"];
    if (!string.IsNullOrEmpty(kvUri))
        builder.Configuration.AddAzureKeyVault(
            new Uri(kvUri), new DefaultAzureCredential());
}

// Always load env vars (works in all environments + containers):
// Already loaded by CreateBuilder — they override Key Vault

// Bind secrets to strongly typed options:
builder.Services
    .AddOptions<JwtOptions>()
    .BindConfiguration("Jwt")
    .ValidateDataAnnotations()
    .ValidateOnStart();

त्वरित जाँच

गोपनीय जानकारी को appsettings.json में कभी क्यों नहीं रखना चाहिए?

पुनरावलोकन: गोपनीय जानकारी प्रबंधन

मुख्य बातें:

  • गोपनीय जानकारी को appsettings.json में कभी न रखें—यह स्रोत नियंत्रण में कमिट हो जाती है
  • विकास: User Secrets (dotnet user-secrets) का उपयोग करें—इन्हें प्रोजेक्ट के बाहर रखा जाता है
  • प्रोडक्शन: पर्यावरण चर, Azure Key Vault, AWS Secrets Manager या HashiCorp Vault
  • CI/CD: गोपनीय जानकारी को पाइपलाइन के गोपनीय जानकारी संग्रह में रखें और पर्यावरण चरों के रूप में इंजेक्ट करें
  • मूल गोपनीय मानों को कभी लॉग न करें; संकेत या मास्क का उपयोग करें
  • रणनीतियों को मिलाएँ: विकास में User Secrets + प्रोडक्शन में Key Vault + ओवरराइड के रूप में पर्यावरण चर
शुरुआत निःशुल्क

एआई शिक्षक के साथ C# सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
93
पाठ
346

अक्सर पूछे जाने वाले प्रश्न

क्या “Secrets Management” पाठ निःशुल्क है?

हाँ—“Secrets Management” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Secrets Management” में मैं क्या सीखूँगा?

development में .NET User Secrets और production में Azure Key Vault या environment variables का उपयोग करके secrets सुरक्षित रूप से संग्रहीत करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“Secrets Management” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Configuration Sources और Providers
  2. IOptions के साथ Strongly Typed Options
  3. Options Validation और Named Options
  4. Secrets Management
← C# अकादमी पर वापस जाएँ