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

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

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

ابدأ الدورة

OAuth 2.0 وتفويض JWT في Java: عمليًا

\n\n

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

\n\n

ما هما OAuth 2.0 و JWT: نظرة عامة مختصرة

\n

OAuth 2.0 هو بروتوكول وصول مفوض يسمح للتطبيقات الخارجية بالحصول على وصول محدود إلى موارد المستخدم دون نقل بيانات اعتماده. يُستخدم على نطاق واسع لتسجيل الدخول عبر شبكات التواصل الاجتماعي (Google, Facebook) ولحماية واجهات API.

\n

JWT (JSON Web Token) هو تنسيق رمز مميز مضغوط ومكتفي ذاتيًا يحتوي على معلومات حول المستخدم (المطالبات) ويتم توقيعه للتحقق من سلامته. غالبًا ما يُستخدم JWT كرمز وصول (access token) في OAuth 2.0، حيث لا يتطلب تخزينًا على الخادم ويسهل نقله في رؤوس HTTP.

\n

عمليًا، يحدد OAuth 2.0 التدفق (flow) للحصول على الرمز المميز، بينما يحدد JWT تنسيق الرمز المميز نفسه. معًا، يشكلان نظام تفويض قويًا وآمنًا.

\n\n

إعداد مشروع Spring Boot مع التبعيات

\n

للبدء، سننشئ مشروع Spring Boot أساسيًا. سنستخدم Spring Security و Spring Web ومكتبة للعمل مع JWT (مثل jjwt).

\n

أضف التبعيات التالية إلى ملف pom.xml (Maven) أو build.gradle (Gradle):

\n
<!-- Maven -->\n<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-security</artifactId>\n</dependency>\n<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-web</artifactId>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-api</artifactId>\n    <version>0.12.3</version>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-impl</artifactId>\n    <version>0.12.3</version>\n    <scope>runtime</scope>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-jackson</artifactId>\n    <version>0.12.3</version>\n    <scope>runtime</scope>\n</dependency>
\n

الآن سننشئ فئة تكوين أمان تقوم بتعطيل CSRF وتحديد سلسلة المرشحات.

\n\n

تنفيذ خادم التفويض وإنشاء JWT

\n

بالنسبة لـ OAuth 2.0، سنحتاج إلى نقطة نهاية (endpoint) تستقبل بيانات اعتماد العميل وتعيد رمز JWT المميز. في أبسط الحالات، يمكن أن يكون هذا محاكاة لخادم التفويض.

\n

لننشئ خدمة للعمل مع JWT:

\n
import io.jsonwebtoken.Jwts;\nimport io.jsonwebtoken.SignatureAlgorithm;\nimport io.jsonwebtoken.security.Keys;\nimport org.springframework.stereotype.Service;\n\nimport javax.crypto.SecretKey;\nimport java.util.Date;\n\n@Service\npublic class JwtService {\n\n    private final SecretKey secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256);\n    private final long expirationMs = 3600000; // 1 ساعة\n\n    public String generateToken(String username) {\n        Date now = new Date();\n        Date expiryDate = new Date(now.getTime() + expirationMs);\n\n        return Jwts.builder()\n                .subject(username)\n                .issuedAt(now)\n                .expiration(expiryDate)\n                .signWith(secretKey)\n                .compact();\n    }\n\n    public String                

المدونات

توصيات الكتب