رموز JWT في Kotlin: دليل كامل مع أمثلة الكود

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

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

ابدأ الدورة

رموز JWT في Kotlin: دليل كامل للمطورين



JSON Web Token (JWT) هو تنسيق مضغوط وآمن لعناوين URL لنقل الادعاءات (claims) بين طرفين. في نظام Kotlin البيئي، يُستخدم JWT على نطاق واسع للمصادقة والتفويض وتبادل البيانات في الخدمات المصغرة وتطبيقات الهاتف المحمول وتطبيقات الويب على Ktor أو Spring Boot. في هذه المقالة، سنشرح كيفية إنشاء وتوقيع والتحقق من رموز JWT في Kotlin باستخدام المكتبات الشائعة: JJWT (Java JWT) و Auth0 java-jwt.



ما هو JWT ولماذا هو مطلوب في Kotlin؟

يتكون JWT من ثلاثة أجزاء: الرأس (header) والحمولة (payload) والتوقيع (signature). في Kotlin، تسمح رموز JWT بما يلي:

  • تنفيذ مصادقة بدون حالة (stateless) (الخادم لا يخزن الجلسات).
  • نقل الأدوار وصلاحيات الوصول (claims).
  • العمل مع الأنظمة الموزعة وواجهات API.
  • التكامل مع OAuth2 و OpenID Connect.


تثبيت المكتبات للعمل مع JWT في Kotlin

لمشاريع Kotlin/JVM، أفضل مكتبتين هما: io.jsonwebtoken:jjwt (JJWT) و com.auth0:java-jwt. أضف التبعيات في build.gradle.kts:



// build.gradle.ktsdependencies {    // JJWT (موصى به)    implementation("io.jsonwebtoken:jjwt-api:0.12.6")    runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.6")    runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.6") // لـ JSON

// Auth0 java-jwt implementation("com.auth0:java-jwt:4.4.0")}


إنشاء رمز JWT باستخدام JJWT (Kotlin)

يوفر JJWT واجهة برمجة fluent API نظيفة. فيما يلي مثال لإنشاء رمز بتوقيع HMAC-SHA256:



import io.jsonwebtoken.Jwtsimport io.jsonwebtoken.SignatureAlgorithmimport io.jsonwebtoken.security.Keysimport java.util.Date

fun createJwtToken(userId: String, role: String): String { val secretKey = Keys.hmacShaKeyFor("my_secret_key_32_bytes_long!!".toByteArray())

val token = Jwts.builder() .setSubject(userId) .claim("role", role) .setIssuedAt(Date()) .setExpiration(Date(System.currentTimeMillis() + 3600_000)) // 1 ساعة .signWith(secretKey, SignatureAlgorithm.HS256) .compact()

return token}


التحقق من صحة وتحليل رمز JWT

للتحقق من صحة الرمز، استخدم Jwts.parserBuilder(). مثال على التحقق مع استخراج الادعاءات:



import io.jsonwebtoken.Jwtsimport io.jsonwebtoken.security.Keys

fun validateToken(token: String): Map<String, Any>? { return try { val secretKey = Keys.hmacShaKeyFor("my_secret_key_32_bytes_long!!".toByteArray()) val claims = Jwts.parserBuilder() .setSigningKey(secretKey) .build() .parseClaimsJws(token) .body

claims } catch (e: Exception) { println("Invalid token: ${e.message}") null }}


العمل مع JWT عبر Auth0 java-jwt (Kotlin)

مكتبة Auth0 شائعة أيضًا. مثال على إنشاء والتحقق من رمز بتوقيع RSA:



import com.auth0.jwt.JWTimport com.auth0.jwt.algorithms.Algorithmimport com.auth0.jwt.interfaces.DecodedJWTimport java.security.interfaces.RSAPrivateKeyimport java.security.interfaces.RSAPublicKeyimport java.util.Date

// توليد الرمزfun createRsaToken(userId: String, privateKey: RSAPrivateKey): String { val algorithm = Algorithm.RSA256(null, privateKey) return JWT.create() .withSubject(userId) .withIssuer("auth0") .withExpiresAt(Date(System.currentTimeMillis() + 3600_000)) .sign(algorithm)}

// التحقق من الرمزfun verifyRsaToken(token: String, publicKey: RSAPublicKey): DecodedJWT? { return try { val algorithm = Algorithm.RSA256(publicKe

توصيات