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

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

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

ابدأ الدورة
```html

مقدمة إلى OAuth 2.0 و JWT في C#



تتطلب تطبيقات الويب الحديثة وواجهات برمجة التطبيقات (API) نظام ترخيص موثوقًا. أصبح المعياران الأكثر شيوعًا — OAuth 2.0 (بروتوكول تفويض الوصول) و JWT (JSON Web Token، تنسيق الرمز المميز) — أساس الأمان في نظام .NET البيئي. في هذه المقالة، سنشرح كيفية تنفيذ الترخيص باستخدام OAuth 2.0 و JWT في C# ضمن ASP.NET Core، وسننشئ مثالاً لخادم الترخيص ونحمي واجهة API.



بغض النظر عما إذا كنت تقوم بإنشاء تطبيق متكامل (monolithic) أو بنية خدمات مصغرة (microservices)، فإن فهم هذه الآليات يعتبر أمرًا بالغ الأهمية. يحدد OAuth 2.0 الأدوار (العميل، خادم الترخيص، خادم الموارد)، بينما يعمل JWT كوسيلة مدمجة ومكتفية ذاتيًا لنقل بيانات المستخدم.



أساسيات OAuth 2.0: التدفقات والأدوار



ما هو OAuth 2.0؟

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



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

  • Resource Owner — المستخدم المالك للبيانات.
  • Client — التطبيق الذي يطلب الوصول.
  • Authorization Server — الخادم الذي يصدر الرموز المميزة بعد المصادقة.
  • Resource Server — واجهة API التي تحمي الموارد وتتحقق من الرموز المميزة.


التدفقات الشائعة (grant types)

  • Authorization Code — للتطبيقات الخادمية (الأكثر أمانًا).
  • Client Credentials — للتواصل بين الخوادم (بدون مستخدم).
  • Implicit — قديم، غير موصى به.
  • Refresh Token — للحصول على access token جديد دون إعادة إدخال كلمة المرور.


JWT (JSON Web Token): الهيكل ومبدأ العمل



مما يتكون JWT؟

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

header.payload.signature


  • Header — نوع الرمز المميز وخوارزمية التوقيع (مثل HS256 أو RS256).
  • Payload — البيانات (المطالبات): معرف المستخدم، الأدوار، تاريخ انتهاء الصلاحية، إلخ.
  • Signature — التوقيع الذي يتحقق من أن الرمز المميز لم يتم تغييره.


مزايا JWT في C#

  • الاكتفاء الذاتي — جميع بيانات المستخدم داخل الرمز المميز.
  • سهولة التحقق على جانب خادم الموارد دون الحاجة إلى الاتصال بقاعدة البيانات.
  • الدعم في .NET من خلال المكتبة Microsoft.AspNetCore.Authentication.JwtBearer.


تنفيذ OAuth 2.0 + JWT في C# ضمن ASP.NET Core



1. إعداد خادم الترخيص (إصدار JWT)

سننشئ خادمًا بسيطًا يستقبل اسم المستخدم وكلمة المرور ويعيد JWT. للتبسيط، سنستخدم مفتاحًا متماثلًا (HS256).



// Program.cs — خادم الترخيصusing Microsoft.AspNetCore.Authentication.JwtBearer;using Microsoft.IdentityModel.Tokens;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;

var builder = WebApplication.CreateBuilder(args);builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "MyAuthServer", ValidAudience = "MyApiClient", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretKey123!@#$%")) }; });

builder.Services.AddAuthorization();var app = builder.Build();

app.MapPost(
```

المدونات

توصيات الكتب