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

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

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

ابدأ الدورة

مقدمة: لماذا نحتاج OAuth 2.0 و JWT في التطبيقات الحديثة؟

\n

في تطوير الويب الحديث، أصبح أمن البيانات وإدارة الوصول في المقدمة. كل يوم، يدخل ملايين المستخدمين إلى التطبيقات عبر Google أو Facebook أو الأنظمة المؤسسية دون نقل كلمات المرور الخاصة بهم مباشرة. وهنا يأتي دور بروتوكولات OAuth 2.0 وتقنية JWT (JSON Web Tokens).

\n

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

\n

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

\n\n

1. إعداد خادم التفويض باستخدام IdentityServer4

\n

لتطبيق OAuth 2.0، سنستخدم المكتبة الشهيرة IdentityServer4 - وهي إطار عمل لـ ASP.NET Core يطبق بروتوكولات OpenID Connect و OAuth 2.0. سنبدأ بإنشاء خادم تفويض بسيط.

\n\n

الخطوة 1: تثبيت الحزم وإنشاء المشروع

\n

أنشئ مشروع ASP.NET Core Web Application جديد (قالب فارغ) وقم بتثبيت حزم NuGet اللازمة:

\n
dotnet add package IdentityServer4\ndotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
\n\n

الخطوة 2: تكوين العملاء والموارد

\n

حدد المستخدمين الاختباريين والعملاء والموارد المحمية. أنشئ فئة Config.cs:

\n
public static class Config\n{\n    public static IEnumerable<IdentityResource> IdentityResources =>\n        new[] { new IdentityResources.OpenId(), new IdentityResources.Profile() };\n\n    public static IEnumerable<ApiScope> ApiScopes =>\n        new[] { new ApiScope("api1", "My API") };\n\n    public static IEnumerable<Client> Clients =>\n        new[]\n        {\n            new Client\n            {\n                ClientId = "client",\n                AllowedGrantTypes = GrantTypes.ClientCredentials,\n                ClientSecrets = { new Secret("secret".Sha256()) },\n                AllowedScopes = { "api1" }\n            }\n        };\n}
\n\n

الخطوة 3: تسجيل الخدمات في Startup.cs

\n

قم بتكوين IdentityServer في دالة ConfigureServices:

\n
public void ConfigureServices(IServiceCollection services)\n{\n    services.AddIdentityServer()\n        .AddInMemoryIdentityResources(Config.IdentityResources)\n        .AddInMemoryApiScopes(Config.ApiScopes)\n        .AddInMemoryClients(Config.Clients)\n        .AddTestUsers(TestUsers.Users);\n\n    services.AddAuthentication()\n        .AddJwtBearer("Bearer", options =>\n        {\n            options.Authority = "https://localhost:5001";\n            options.TokenValidationParameters = new TokenValidationParameters\n            {\n                ValidateAudience = false\n            };\n        });\n}
\n

في دالة Configure، أضف استدعاء app.UseIdentityServer().

\n\n

2. تطبيق رموز JWT: التوليد والتحقق

\n

يتكون رمز JWT من ثلاثة أجزاء: الرأس (header)، الحمولة (payload)، والتوقيع (signature). في .NET، يتم توليد والتحقق من JWT باستخدام الآليات المدمجة.

\n\n

توليد رمز JWT يدويًا

\n

أحيانًا تحتاج إلى إنشاء رمز يدويًا، على سبيل المثال للاختبار. استخدم الكود التالي:

\n
using System.IdentityModel.Tokens.Jwt;\nusing Microsoft.IdentityModel.Tokens;\nusing System.Security.Claims;\nusing System.Text;\n\npublic string GenerateJwtToken(string userI                

المدونات

توصيات الكتب