رموز JWT في C# (.NET): دليل كامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

رموز JWT في C# (.NET): الإنشاء والتحقق والمصادقة



JSON Web Token (JWT) هو معيار مفتوح (RFC 7519) لإنشاء رموز الوصول بناءً على تنسيق JSON. يُستخدم JWT على نطاق واسع في تطبيقات الويب الحديثة للمصادقة وتبادل المعلومات بين العميل والخادم. في هذه المقالة، سننظر بالتفصيل في كيفية العمل مع رموز JWT في بيئة C# (.NET)، بما في ذلك إنشاء الرموز وتوقيعها والتحقق منها والمصادقة عليها.



المكونات الأساسية لـ JWT



يتكون JWT من ثلاثة أجزاء مفصولة بنقاط:

  • Header — الرأس، يحتوي على معلومات حول نوع الرمز وخوارزمية التوقيع
  • Payload — الحمولة، تحتوي على البيانات (المطالبات)
  • Signature — التوقيع، يضمن سلامة الرمز


مثال على رمز JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c



تثبيت الحزم اللازمة



للعمل مع JWT في .NET، يجب تثبيت الحزمة System.IdentityModel.Tokens.Jwt. يمكن القيام بذلك عبر NuGet Package Manager أو باستخدام .NET CLI:



dotnet add package System.IdentityModel.Tokens.Jwt


قد تحتاج أيضًا إلى تثبيت Microsoft.AspNetCore.Authentication.JwtBearer للتكامل مع ASP.NET Core:



dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer


إنشاء رمز JWT في C#



لننظر إلى مثال كامل لإنشاء رمز JWT باستخدام مفتاح متماثل (HMAC SHA256):



using System;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;using Microsoft.IdentityModel.Tokens;

public class JwtService{ private readonly string _secretKey; private readonly string _issuer; private readonly string _audience;

public JwtService(string secretKey, string issuer, string audience) { _secretKey = secretKey; _issuer = issuer; _audience = audience; }

public string GenerateToken(string userId, string userName, string role) { var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

var claims = new[] { new Claim(ClaimTypes.NameIdentifier, userId), new Claim(ClaimTypes.Name, userName), new Claim(ClaimTypes.Role, role), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(JwtRegisteredClaimNames.Iat, new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds().ToString()) };

var token = new JwtSecurityToken( issuer: _issuer, audience: _audience, claims: claims, expires: DateTime.UtcNow.AddHours(1), signingCredentials: credentials );

return new JwtSecurityTokenHandler().WriteToken(token); }}


التحقق والمصادقة على رمز JWT



للتحقق من صحة الرمز واستخراج البيانات منه، يُستخدم الأسلوب ValidateToken:



public ClaimsPrincipal ValidateToken(string token){    var tokenHandler = new JwtSecurityTokenHandler();    var key = Encoding.UTF8.GetBytes(_secretKey);

try { var principal = tokenHandler.ValidateToken(token, new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = true, ValidIssuer = _issuer, ValidateAudience = true, ValidAudience = _audience, ValidateLifetime = true, ClockSkew = TimeSpan.Zero\

توصيات