.NET Core - حماية الـ APIs باستخدام JWT
.NET Core - حماية الـ APIs باستخدام JWT
عند بناء Web APIs في ASP.NET Core، واحدة من أكثر الطرق استخدامًا لحمايتها هي استخدام التوثيق بواسطة JWT (JSON Web Token). JWT تتيح للمستخدم تسجيل الدخول مرة واحدة، ومن ثم يتم إرسال رمز (Token) في كل طلب لاحق للتحقق من الهوية.
🔹 ما هو JWT؟
JWT هو رمز مشفر يحتوي على معلومات المستخدم مثل UserId وRoles وClaims، ويتم توقيعه باستخدام مفتاح سري لضمان صحته.
🔹 تثبيت الحزمة المطلوبة
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
🔹 إعداد JWT في Program.cs
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "yourapp",
ValidAudience = "yourapp",
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes("your_super_secret_key_123"))
};
});
app.UseAuthentication();
app.UseAuthorization();
🔹 توليد Token بعد تسجيل الدخول
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
var claims = new[]
{
new Claim(ClaimTypes.Name, "mahmoud"),
new Claim(ClaimTypes.Role, "Admin")
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_super_secret_key_123"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "yourapp",
audience: "yourapp",
claims: claims,
expires: DateTime.Now.AddHours(2),
signingCredentials: creds
);
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
🔸 سترسل هذا الـ token إلى المستخدم ليستخدمه مع كل طلب لاحق.
🔹 إرسال التوكن في الهيدر
في كل طلب API، يجب أن يرسل المستخدم التوكن في رأس الطلب (Header):
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
🔹 حماية الـ API باستخدام [Authorize]
[Authorize]
[HttpGet("secure-data")]
public IActionResult GetSecureData()
{
return Ok("بيانات سرية للمستخدمين فقط ✅");
}
🔹 التفويض حسب الدور باستخدام JWT
[Authorize(Roles = "Admin")]
[HttpGet("admin-area")]
public IActionResult GetAdminArea()
{
return Ok("محتوى خاص بالمسؤولين فقط 👑");
}
🔹 الخلاصة
JWT توفر آلية توثيق قوية وخفيفة الوزن لتأمين الـ APIs. مع التهيئة الصحيحة في ASP.NET Core، يمكنك حماية نقاط النهاية الخاصة بك ومنع الوصول غير المصرح به بكل سهولة.
تعليقات
إرسال تعليق