عميل OAuth لـ Kotlin: مكتبة Ktor OAuth للمصادقة في API

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

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

ابدأ الدورة

عميل OAuth لـ Kotlin: مكتبة Ktor OAuth



مكتبة Ktor OAuth هي امتداد رسمي لعميل HTTP Ktor، مصممة لتنفيذ بروتوكول OAuth 2.0 في تطبيقات Kotlin. توفر طريقة مرنة وآمنة من حيث النوع للتكامل مع موفري OAuth المشهورين (Google، GitHub، Facebook، VK وغيرها)، كما تدعم نقاط النهاية المخصصة. المكتبة جزء من نظام Ktor البيئي ويمكن استخدامها في تطبيقات Kotlin من جانب الخادم والعميل.



حالة الاستخدام الرئيسية هي الحصول على رموز الوصول للعمل مع REST API المحمية. تقوم المكتبة بأتمتة عملية استبدال رمز التفويض بالرموز المميزة، وتحديث الرموز المميزة (refresh token)، وإدارة حالة الجلسة.



الميزات الرئيسية



  • دعم تدفقات OAuth 2.0: Authorization Code Grant، Implicit Grant، Client Credentials، Resource Owner Password Credentials.
  • دعم مدمج للموفريين المشهورين: Google، GitHub، Facebook، Twitter، VK، Yandex، Microsoft وغيرها.
  • موفري مخصصين: إمكانية تعيين نقاط نهاية التفويض والرمز وإعادة التوجيه يدويًا.
  • تحديث تلقائي للرموز المميزة: دعم refresh token مع استدعاء تلقائي عند انتهاء صلاحية access token.
  • العمل مع الجلسات: تخزين الرموز المميزة في الذاكرة، الملفات، قواعد البيانات، أو مخازن مخصصة.
  • التكامل مع عميل Ktor: إعداد موحد عبر الإضافات، دعم جميع وسائل النقل (CIO، Apache، OkHttp).
  • الأمان: دعم PKCE (Proof Key for Code Exchange) للحماية من هجمات CSRF.


التثبيت



لإضافة المكتبة، أضف التبعية في ملف build.gradle.kts:



dependencies {    // عميل Ktor الأساسي    implementation("io.ktor:ktor-client-core:2.3.7")    // إضافة OAuth    implementation("io.ktor:ktor-client-auth:2.3.7")    // محرك محدد (مثل CIO)    implementation("io.ktor:ktor-client-cio:2.3.7")}


لـ Maven:



<dependency>    <groupId>io.ktor</groupId>    <artifactId>ktor-client-auth</artifactId>    <version>2.3.7</version></dependency>


مثال: التفويض عبر Google OAuth



قم بإنشاء عميل HTTP مع إضافة OAuth المهيأة لـ Google:



import io.ktor.client.*import io.ktor.client.plugins.auth.*import io.ktor.client.plugins.auth.providers.*import io.ktor.client.request.*import io.ktor.client.statement.*

suspend fun main() { val client = HttpClient { install(Auth) { oauth { clientId = System.getenv("GOOGLE_CLIENT_ID") clientSecret = System.getenv("GOOGLE_CLIENT_SECRET") providerLookup = { OAuthServerSettings.OAuthAuthorizationCodeServerSettings( authorizeUrl = "https://accounts.google.com/o/oauth2/auth", tokenUrl = "https://oauth2.googleapis.com/token", clientId = clientId, clientSecret = clientSecret, redirectUrl = "http://localhost:8080/callback" ) } urlProvider = { request -> // توليد URL لإعادة توجيه المستخدم "http://localhost:8080/login" } } } }

// مثال على طلب إلى Google Sheets API val response: HttpResponse = client.get("https://sheets.googleapis.com/v4/spreadsheets/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/values/Sheet1!A1:D5") println(response.bodyAsText())}


مثال: موفر مخصص مع PKCE



لزيادة الأمان، استخدم PKCE (P

توصيات