OAuth 2.0 و JWT التفويض على Kotlin: دليل شامل

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

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

ابدأ الدورة

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

تتطلب تطبيقات الويب الحديثة والخدمات المحمولة نظامًا موثوقًا وآمنًا للمصادقة والتفويض. المعياران الأكثر شيوعًا في هذا المجال هما OAuth 2.0 و JWT (JSON Web Token). في هذه المقالة، سنشرح بالتفصيل كيفية تنفيذ تفويض OAuth 2.0 و JWT بلغة Kotlin باستخدام إطار عمل Spring Boot. ستتعلم كيفية إعداد خادم التفويض، وإنشاء الرموز المميزة والتحقق منها، وكذلك حماية نقاط نهاية API الخاصة بك.



أساسيات OAuth 2.0 و JWT



ما هو OAuth 2.0؟

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

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


ما هو JWT؟

JWT (JSON Web Token) هو تنسيق رمز مميز مضغوط ومكتفي ذاتيًا يحتوي على معلومات حول المستخدم (claims) في شكل كائن JSON. يتم توقيع الرمز المميز باستخدام مفتاح سري أو تشفير غير متماثل، مما يضمن سلامته. يتكون هيكل JWT من ثلاثة أجزاء مفصولة بنقاط:

  • Header — رأس يحتوي على نوع الرمز المميز وخوارزمية التوقيع.
  • Payload — الحمولة المفيدة مع البيانات (مثل userId, role, exp).
  • Signature — التوقيع الذي تم إنشاؤه بناءً على header و payload.

مثال على JWT: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.ZL1mK9WpXoQ



إعداد مشروع Kotlin مع Spring Security



إضافة التبعيات

للبدء، سننشئ مشروعًا جديدًا لـ Spring Boot في Kotlin. في ملف build.gradle.kts، أضف التبعيات التالية:

dependencies {    implementation("org.springframework.boot:spring-boot-starter-web")    implementation("org.springframework.boot:spring-boot-starter-security")    implementation("org.springframework.boot:spring-boot-starter-data-jpa")    implementation("io.jsonwebtoken:jjwt-api:0.11.5")    runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5")    runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.5")    implementation("com.h2database:h2")}

نحن نستخدم مكتبة jjwt للعمل مع JWT و H2 كقاعدة بيانات للاختبار.



تكوين Security

سننشئ كلاس SecurityConfig الذي سيقوم بتكوين Spring Security وتعطيل نموذج تسجيل الدخول القياسي:

@Configuration@EnableWebSecurityclass SecurityConfig(private val jwtAuthFilter: JwtAuthFilter) {

@Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { http .csrf { it.disable() } .authorizeHttpRequests { auth -> auth.requestMatchers("/api/auth/**").permitAll() .anyRequest().authenticated() } .sessionManagement { it.sessionCreationPolicy(SessionCreationPolicy.STATELESS) } .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter::class.java) return http.build() }}

نحن نسمح بالوصول إلى نقاط النهاية /api/auth/** بدون مصادقة، بينما تتطلب جميع الطلبات الأخرى رمز JWT مميزًا.



تنفيذ OAuth 2.0 و JWT في Kotlin



إنشاء والتحقق من رمز JWT المميز

سننشئ خدمة JwtService التي ستكون مسؤولة عن إنشاء و

المدونات

توصيات الكتب