.NET API - حماية الـAPI باستخدام JWT Authentication

2.5 ‎.NET API - حماية الـAPI باستخدام JWT Authentication

JWT أو JSON Web Token هو معيار يُستخدم لتأمين الـAPI من خلال إصدار "توكن" يُرفق مع كل طلب، ويُستخدم للتحقق من هوية المستخدم دون الحاجة لتخزين الجلسة على الخادم.

🔐 1. ما هو التوكن؟

التوكن هو سلسلة نصية تُولد عند تسجيل الدخول، وتُحفظ لدى العميل (Client)، وتُرسل مع كل طلب في الـ Header.

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

📦 2. تثبيت الحزم المطلوبة

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

⚙️ 3. إعداد المصادقة في Program.cs

builder.Services.AddAuthentication("Bearer")
    .AddJwtBearer("Bearer", options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = false,
            ValidateAudience = false,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(
                Encoding.UTF8.GetBytes("your_super_secret_key_here"))
        };
    });

builder.Services.AddAuthorization();

var app = builder.Build();

app.UseAuthentication();
app.UseAuthorization();

🧠 4. إنشاء التوكن في Login Endpoint

[HttpPost("login")]
public IActionResult Login(UserLoginDto login)
{
    if (login.Username == "admin" && login.Password == "123")
    {
        var claims = new[]
        {
            new Claim(ClaimTypes.Name, login.Username)
        };

        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_super_secret_key_here"));
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

        var token = new JwtSecurityToken(
            expires: DateTime.Now.AddHours(1),
            signingCredentials: creds,
            claims: claims);

        return Ok(new
        {
            token = new JwtSecurityTokenHandler().WriteToken(token)
        });
    }

    return Unauthorized();
}

🔒 5. حماية الـEndpoints باستخدام [Authorize]

[Authorize]
[HttpGet("secure")]
public IActionResult SecureData()
{
    return Ok("هذه بيانات محمية لا تُعرض إلا للمستخدمين المسجلين");
}

🧪 6. تجربة التوكن باستخدام Postman

  1. أرسل طلب POST إلى /login واحتفظ بالتوكن المرسل في الرد.
  2. أرسل أي طلب محمي، وأرفق التوكن في Header:
Authorization: Bearer [your_token_here]

📌 ملاحظات مهمة

  • ✅ لا تشارك مفتاح التوقيع السري مع أي أحد.
  • ✅ اضبط وقت انتهاء التوكن حسب الحاجة.
  • ✅ يُفضل استخدام HTTPS عند العمل بالتوكنات لحمايتها من التسريب.

تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework