عميل OAuth لجافا: ScribeJava و Spring Security OAuth2

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

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

ابدأ الدورة

عميل OAuth لجافا: ScribeJava و Spring Security OAuth2



في تطوير الويب الحديث، أصبح التكامل مع الخدمات الخارجية عبر بروتوكول OAuth 2.0 معيارًا واقعيًا. سواء كان تسجيل الدخول عبر Google أو GitHub أو Facebook أو الوصول إلى API لمنصات الطرف الثالث — يحتاج مطور جافا إلى أداة موثوقة للعمل مع OAuth. في هذه المقالة، سنستعرض بالتفصيل مكتبتين رئيسيتين: ScribeJava (خفيفة وشاملة) و Spring Security OAuth2 (جزء من نظام Spring البيئي). ستتعلم كيفية اختيار الأداة المناسبة وتنفيذ عميل OAuth بلغة جافا.



ما هو عميل OAuth ولماذا هو مطلوب؟

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



1. ScribeJava — عميل OAuth خفيف ومستقل

ScribeJava (المعروفة سابقًا باسم Scribe) هي مكتبة بسيطة ولكنها قوية لـ OAuth 1.0a و OAuth 2.0. إنها غير مرتبطة بأي إطار عمل، مما يجعلها مثالية للخدمات المصغرة، تطبيقات جافا العادية، أو Android. المزايا الرئيسية:

  • دعم العشرات من المزودين "مباشرة من الصندوق" (Google, Facebook, GitHub, VK, Yandex وغيرها)
  • واجهة برمجة تطبيقات بسيطة وبديهية
  • لا تبعيات إضافية
  • دعم PKCE (Proof Key for Code Exchange) للعملاء العموميين


مثال: التفويض عبر GitHub باستخدام ScribeJava

لننظر إلى سيناريو أساسي — الحصول على access token من GitHub. للبدء، أضف التبعية في pom.xml:



<dependency>    <groupId>com.github.scribejava</groupId>    <artifactId>scribejava-apis</artifactId>    <version>8.3.3</version></dependency>


الآن كود عميل OAuth:



import com.github.scribejava.apis.GitHubApi;import com.github.scribejava.core.builder.ServiceBuilder;import com.github.scribejava.core.model.OAuth2AccessToken;import com.github.scribejava.core.model.OAuthRequest;import com.github.scribejava.core.model.Response;import com.github.scribejava.core.model.Verb;import com.github.scribejava.core.oauth.OAuth20Service;

public class GitHubOAuthExample { public static void main(String[] args) throws Exception { final String clientId = "your_client_id"; final String clientSecret = "your_client_secret"; final String callbackUrl = "http://localhost:8080/callback";

// إنشاء خدمة OAuth 2.0 OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .callback(callbackUrl) .scope("user:email") // طلب الوصول إلى البريد الإلكتروني .build(GitHubApi.instance());

// الخطوة 1: الحصول على رابط إعادة توجيه المستخدم final String authorizationUrl = service.getAuthorizationUrl(); System.out.println("انتقل إلى الرابط للتفويض: " + authorizationUrl);

// الخطوة 2: بعد إعادة التوجيه، استخراج الكود من رد الاتصال // (عادةً يتم ذلك في وحدة التحكم، هنا كمثال — إدخال من وحدة التحكم) System.out.print("أدخل الكود من رد الاتصال: "); java.util.Scanner scanner = new java.util.Scanner(System.in); String code = scanner.nextLine();

// الخطوة 3: استبدال الكود بـ access token OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Access Token: " + accessToken.getAccessToken());

// الخطوة 4: استخدام الرمز للطلب إلى API OAuthRequest request = new OAuthRequest(Verb.GET, "https://api.g

توصيات