OAuth 2.0 وتفويض JWT بلغة C#: دليل للمبتدئين

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

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

ابدأ الدورة

مقدمة: لماذا يعتبر OAuth 2.0 و JWT معيار التفويض الحديث؟

في تطوير الويب الحديث، يُعد نقل البيانات بشكل آمن بين العميل والخادم مهمة بالغة الأهمية. هناك بروتوكولان رئيسيان يساعدان في حل هذه المهمة وهما OAuth 2.0 (بروتوكول التفويض المفتوح) و JWT (رمز الويب JSON).

يسمح OAuth 2.0 للتطبيقات بالحصول على وصول محدود إلى موارد المستخدم دون نقل اسم المستخدم وكلمة المرور. أما JWT، فهو تنسيق رمز مميز مضغوط ومكتفٍ ذاتيًا يحتوي على جميع المعلومات اللازمة لتحديد هوية المستخدم.

في هذه المقالة، سنشرح كيفية تنفيذ OAuth 2.0 وتفويض JWT بلغة C# (.NET). ستتعلم كيفية إعداد middleware، وتوليد الرمز المميز، وحماية نقاط نهاية API. المادة موجهة للمطورين المبتدئين الذين لديهم معرفة أساسية بـ ASP.NET Core.



1. أساسيات OAuth 2.0 و JWT

قبل كتابة الكود، دعنا نفهم المفاهيم الأساسية.

ما هو OAuth 2.0؟

OAuth 2.0 هو بروتوكول تفويض يسمح للتطبيقات الخارجية بالوصول إلى موارد المستخدم (مثل بيانات الملف الشخصي) دون نقل بيانات اعتماده. بدلاً من ذلك، يتم استخدام رمز الوصول (access token).

الأدوار الرئيسية في OAuth 2.0:

  • مالك المورد (Resource Owner) — المستخدم الذي يملك الموارد.
  • العميل (Client) — التطبيق الذي يطلب الوصول.
  • خادم التفويض (Authorization Server) — الخادم الذي يصدر الرموز المميزة بعد مصادقة المستخدم.
  • خادم المورد (Resource Server) — الخادم الذي يوفر الموارد المحمية (مثل API).

ما هو JWT؟

JWT (رمز الويب JSON) هو تنسيق رمز مميز يتكون من ثلاثة أجزاء مفصولة بنقاط:

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

يبدو رمز JWT كالتالي: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT مكتفٍ ذاتيًا: لا يحتاج الخادم إلى تخزين الجلسات في قاعدة البيانات، فجميع المعلومات مشفرة بالفعل في الرمز المميز.



2. إعداد مشروع ASP.NET Core لتفويض JWT

سنقوم بإنشاء مشروع جديد من نوع ASP.NET Core Web API وإعداد تفويض JWT.

الخطوة 1: تثبيت حزم NuGet

للعمل مع JWT، نحتاج إلى الحزمة Microsoft.AspNetCore.Authentication.JwtBearer. قم بتثبيتها عبر مدير حزم NuGet أو وحدة التحكم:

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

الخطوة 2: إعداد appsettings.json

أضف قسمًا لتخزين معلمات JWT (المفتاح السري، المُصدر، الجمهور):

{  "Jwt": {    "Key": "YourSuperSecretKey123!@#$%^&*()",    "Issuer": "YourApp",    "Audience": "YourAppUsers",    "ExpireMinutes": 60  }}

الخطوة 3: إعداد Program.cs

في ملف Program.cs (أو Startup.cs للإصدارات القديمة) نضيف خدمات المصادقة و middleware:

using Microsoft.AspNetCore.Authentication.JwtBearer;using Microsoft.IdentityModel.Tokens;using System.Text;

var builder = WebApplication.CreateBuilder(args);

// إعداد مصادقة JWTbuilder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true,

المدونات

توصيات الكتب