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

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

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

ابدأ الدورة

مقدمة في OAuth 2.0 و JWT بلغة C#

\n

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

\n

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

\n

في هذا الدليل، سننشئ واجهة برمجة تطبيقات ويب بسيطة على ASP.NET Core، تنفذ OAuth 2.0 باستخدام رموز JWT المميزة. ستتعلم كيفية إعداد إنشاء نقاط النهاية والتحقق منها وحمايتها.

\n\n

ما هو OAuth 2.0 و JWT؟

\n

قبل الانتقال إلى الكود، دعنا نشرح المفاهيم الأساسية.

\n

OAuth 2.0

\n

يحدد OAuth 2.0 أربعة أدوار:

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

يتضمن التدفق الرئيسي منح رمز التفويض (Authorization Code Grant): إعادة توجيه المستخدم إلى خادم التفويض، والحصول على رمز، واستبدال الرمز برمز وصول.

\n\n

JWT (JSON Web Token)

\n

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

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

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

\n\n

إعداد مشروع ASP.NET Core

\n

لننشئ مشروع واجهة برمجة تطبيقات ويب جديدًا مع دعم المصادقة.

\n
dotnet new webapi -n OAuthJwtDemo\ncd OAuthJwtDemo
\n

سنضيف حزم NuGet اللازمة:

\n
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer\ndotnet add package System.IdentityModel.Tokens.Jwt
\n\n

التكوين في appsettings.json

\n

أضف قسمًا لإعدادات JWT في ملف appsettings.json:

\n
{\n  "JwtSettings": {\n    "SecretKey": "YOUR_SUPER_SECRET_KEY_AT_LEAST_32_CHARS",\n    "Issuer": "OAuthJwtDemo",\n    "Audience": "OAuthJwtDemoClient",\n    "ExpirationMinutes": 60\n  }\n}
\n

هام: في مشروع حقيقي، قم بتخزين المفتاح السري في User Secrets أو Azure Key Vault.

\n\n

تنفيذ خدمة إنشاء JWT

\n

لننشئ واجهة وتنفيذها للعمل مع الرموز المميزة.

\n

الواجهة IJwtService

\n
public interface IJwtService\n{\n    string GenerateToken(string userId, string role);\n    ClaimsPrincipal ValidateToken(string token);\n}
\n\n

تنفيذ JwtService

\n
public class JwtService : IJwtService\n{\n    private readonly JwtSettings _settings;\n\n    public JwtService(IOptions<JwtSettings> settings)\n    {\n        _settings = settings.Value;\n    }\n\n    public string GenerateToken(string userId, string role)\n    {\n        var claims = new[]\n        {\n            new Claim(ClaimTypes.NameIdentifier, userId),\n            new Claim(ClaimTypes.Role, role),\n            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())\n        };\n\n        var key = new Symmetric                

المدونات

توصيات الكتب