كيف تعمل Authentication الحديثة (JWT - OAuth) بشكل عملي؟

في عالم تطوير الويب والتطبيقات الحديثة، لم يعد تسجيل الدخول (Login) مجرد إدخال اسم مستخدم وكلمة مرور فقط، بل أصبح هناك أنظمة متقدمة مثل JWT و OAuth لضمان الأمان، قابلية التوسع، وتجربة مستخدم أفضل.

في هذا المقال سنشرح الموضوع بشكل عملي وبسيط من البداية حتى الفهم الكامل.

أولاً: ما هي Authentication؟

Authentication (المصادقة) هي عملية التحقق من هوية المستخدم.

مثال بسيط:

* تدخل Email + Password
* النظام يتأكد أنك صاحب الحساب
* يسمح لك بالدخول

لكن المشكلة:
كيف نحتفظ بحالة تسجيل الدخول بدون إعادة إدخال البيانات كل مرة؟

هنا يأتي دور JWT و OAuth.

أولاً: JWT (JSON Web Token)

ما هو JWT؟

JWT هو توكن (Token) يتم إنشاؤه بعد تسجيل الدخول، ويستخدم لإثبات هوية المستخدم في كل طلب لاحق.

بدل ما السيرفر يحتفظ بجلسة (Session)، يتم إرسال “بطاقة هوية رقمية” مع كل Request.

شكل الـ JWT

يتكون من 3 أجزاء : 
Header.Payload.Signature
1. Header

يحتوي على نوع التوكن وخوارزمية التشفير : 
{
 "alg": "HS256",
 "typ": "JWT"
}
2. Payload

يحتوي على بيانات المستخدم : 
{
 "userId": 123,
 "role": "admin",
 "exp": 1710000000
}
⚠️ مهم: البيانات هنا ليست مشفرة بل قابلة للقراءة، لذلك لا تضع كلمات مرور.

3. Signature

يتم إنشاؤها باستخدام secret key لحماية التوكن من التلاعب.

كيف يعمل JWT عملياً؟

الخطوات:

1. المستخدم يسجل دخول
2. السيرفر يتحقق من البيانات
3. السيرفر ينشئ JWT ويرسله للعميل
4. العميل يخزن التوكن (LocalStorage / Cookies)
5. في كل طلب API:
   * يتم إرسال التوكن في الهيدر:
Authorization: Bearer TOKEN
6. السيرفر يتحقق من التوكن ويسمح أو يرفض الطلب

مميزات JWT

* لا يحتاج Session على السيرفر (Stateless)
* سريع و scalable
* مناسب للـ APIs و Mobile Apps

عيوب JWT

* صعب إلغاؤه قبل انتهاء صلاحيته
* إذا تم سرقته يمكن استخدامه حتى ينتهي

ثانياً: OAuth 2.0

ما هو OAuth؟

OAuth هو نظام تفويض (Authorization) وليس تسجيل دخول مباشر.

يعني يسمح لتطبيق باستخدام حسابك في تطبيق آخر بدون إعطائه كلمة المرور.

مثال عملي:

عندما تدخل إلى موقع وتختار:

* “Login with Google”
* أو “Login with Facebook”

هذا هو OAuth.

كيف يعمل OAuth عملياً؟

الأطراف:

* User (المستخدم)
* Client (التطبيق)
* Authorization Server (مثل Google)
* Resource Server (API)

الخطوات:

1. المستخدم يضغط “Login with Google”

2. يتم تحويله إلى Google

3. يسجل دخول على Google

4. Google يسأله: هل تسمح للتطبيق بالوصول؟

5. المستخدم يوافق

6. Google يرسل Authorization Code للتطبيق

7. التطبيق يبدله بـ Access Token

8. يستخدم Access Token للوصول للبيانات

الفرق بين Access Token و Refresh Token

* Access Token: قصير المدة (يستخدم للطلبات)
* Refresh Token: طويل المدة (يستخدم لتجديد Access Token)

مميزات OAuth

* أمان عالي (لا تشارك كلمة المرور)
* تجربة مستخدم سهلة (Login سريع)
* يستخدم مع Google / Facebook / GitHub

عيوب OAuth

* معقد في التنفيذ مقارنة بـ JWT
* يحتاج إعدادات Provider (Google/Facebook)
الفرق بين JWT و OAuth
الفرق بين JWT و OAuth

JWT:

* Authentication mechanism
* يستخدم لتسجيل الدخول داخل النظام
* يحتوي على بيانات المستخدم داخل التوكن
* بسيط وسريع
* مناسب للـ APIs

OAuth:

* Authorization framework
* يستخدم لتسجيل الدخول عبر خدمات خارجية مثل Google و Facebook
* لا يشارك كلمة المرور مع التطبيق
* أكثر أمانًا
* أكثر تعقيدًا في الإعداد
كيف يتم استخدامهما معاً؟

في الواقع، كثير من الأنظمة الحديثة تستخدم الاثنين معاً:

* OAuth لتسجيل الدخول (Google Login)
* ثم إصدار JWT داخلي لإدارة الجلسات داخل التطبيق

مثال عملي (سيناريو واقعي)

تطبيق تسوق إلكتروني:

تسجيل دخول:

* المستخدم يدخل بـ Google (OAuth)
* النظام يحصل على بياناته

بعد الدخول:

* السيرفر يصدر JWT
* يتم استخدام JWT في كل API:
   * إضافة منتج للسلة
   * إنشاء طلب
   * عرض الحساب

أفضل الممارسات (Best Practices)

1. لا تخزن JWT في LocalStorage إذا كان حساس جداً

استخدم HttpOnly Cookies إن أمكن

2. ضع Expiration time

مثلاً:

* JWT: 15 دقيقة
* Refresh Token: 7 أيام

3. استخدم HTTPS دائماً

4. لا تخزن بيانات حساسة داخل JWT

الخلاصة

* JWT = طريقة لإثبات الهوية باستخدام توكن داخل التطبيق
* OAuth = طريقة لتسجيل الدخول باستخدام حساب خارجي بدون مشاركة كلمة المرور
* الاثنين أصبحوا أساس أي نظام Authentication حديث