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

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

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

ابدأ الدورة

مقدمة في OAuth 2.0 و JWT في Java

\n\n

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

\n\n

OAuth 2.0 هو بروتوكول تفويض يسمح للتطبيقات بالحصول على وصول محدود إلى موارد المستخدم دون نقل بيانات اعتماده. أما JWT، فهو تنسيق رمز مميز مضغوط يُستخدم لنقل الادعاءات (claims) بين الأطراف. في هذه المقالة، سنشرح كيفية دمج هذه التقنيات في تطبيق Java باستخدام Spring Security والمكتبات الشائعة.

\n\n

أساسيات OAuth 2.0: كيف يعمل

\n\n

يحدد OAuth 2.0 عدة أدوار للمشاركين في التفاعل:

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

الفكرة الأساسية للبروتوكول هي أن العميل يحصل على رمز وصول مؤقت يقدمه لخادم المورد. السيناريو الأكثر شيوعًا هو تدفق رمز التفويض (Authorization Code Flow)، والذي يُستخدم في تطبيقات الويب.

\n\n

مثال على إعداد عميل OAuth 2.0 في Spring Boot

\n\n

أضف التبعية في pom.xml:

\n\n
<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-oauth2-client</artifactId>\n</dependency>
\n\n

قم بتكوين application.yml للعمل مع Google OAuth 2.0:

\n\n
spring:\n  security:\n    oauth2:\n      client:\n        registration:\n          google:\n            client-id: YOUR_CLIENT_ID\n            client-secret: YOUR_CLIENT_SECRET\n            scope:\n              - email\n              - profile
\n\n

الآن سيقوم Spring Security تلقائيًا بمعالجة إعادة التوجيه إلى صفحة تسجيل الدخول من Google وإرجاع رمز الوصول.

\n\n

JWT: هيكل وإنشاء الرمز المميز

\n\n

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

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

للعمل مع JWT في Java، غالبًا ما تُستخدم مكتبة jjwt. أضف التبعية:

\n\n
<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-api</artifactId>\n    <version>0.12.5</version>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-impl</artifactId>\n    <version>0.12.5</version>\n    <scope>runtime</scope>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-jackson</artifactId>\n    <version>0.12.5</version>\n    <scope>runtime</scope>\n</dependency>
\n\n

إنشاء رمز JWT مميز في Java

\n\n

إليك مثال على فئة لتوليد والتحقق من صحة JWT:

\n\n
import io.jsonwebtoken.*;\nimport io.jsonwebtoken.security.Keys;\nimport javax.crypto.SecretKey;\nimport java.util.Date;\n\npublic class JwtUtil {\n\n    private final SecretKey secretKey = Keys.hmacShaKeyFor(\n        "my-secret-key-which-should-be-at-least-256-bits-long".getBytes()\n    );\n\n    public St                

المدونات

توصيات الكتب