Kotlin में JWT टोकन: डेवलपर्स के लिए पूर्ण गाइड
\n\n\nJSON Web Token (JWT) दो पक्षों के बीच दावों (claims) को स्थानांतरित करने के लिए एक कॉम्पैक्ट, URL-सुरक्षित प्रारूप है। Kotlin पारिस्थितिकी तंत्र में JWT का व्यापक रूप से माइक्रोसर्विसेज, मोबाइल ऐप और Ktor या Spring Boot पर वेब ऐप में प्रमाणीकरण, प्राधिकरण और डेटा आदान-प्रदान के लिए उपयोग किया जाता है। इस लेख में, हम लोकप्रिय लाइब्रेरीज़: JJWT (Java JWT) और Auth0 java-jwt का उपयोग करके Kotlin में JWT टोकन बनाने, हस्ताक्षर करने और सत्यापित करने का तरीका समझेंगे।\n
\n\nJWT क्या है और Kotlin में इसकी आवश्यकता क्यों है?
\n\nJWT तीन भागों से बना होता है: हेडर (header), पेलोड (payload) और हस्ताक्षर (signature)। Kotlin में JWT टोकन निम्नलिखित की अनुमति देते हैं:\n
\n- \n
- स्टेटलेस प्रमाणीकरण लागू करना (सर्वर सत्र संग्रहीत नहीं करता)। \n
- भूमिकाएँ और पहुँच अधिकार (claims) स्थानांतरित करना। \n
- वितरित सिस्टम और API के साथ काम करना। \n
- OAuth2 और OpenID Connect के साथ एकीकृत करना। \n
Kotlin में JWT के साथ काम करने के लिए लाइब्रेरीज़ स्थापित करना
\n\nKotlin/JVM प्रोजेक्ट्स के लिए दो लाइब्रेरीज़ सबसे उपयुक्त हैं: io.jsonwebtoken:jjwt (JJWT) और com.auth0:java-jwt। build.gradle.kts में निर्भरताएँ जोड़ें:\n
// build.gradle.kts\ndependencies {\n // JJWT (अनुशंसित)\n implementation("io.jsonwebtoken:jjwt-api:0.12.6")\n runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.6")\n runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.6") // JSON के लिए\n\n // Auth0 java-jwt\n implementation("com.auth0:java-jwt:4.4.0")\n}\n\n\nJJWT (Kotlin) का उपयोग करके JWT टोकन बनाना
\n\nJJWT एक स्वच्छ fluent API प्रदान करता है। नीचे HMAC-SHA256 हस्ताक्षर के साथ टोकन बनाने का एक उदाहरण दिया गया है:\n
\n\nimport io.jsonwebtoken.Jwts\nimport io.jsonwebtoken.SignatureAlgorithm\nimport io.jsonwebtoken.security.Keys\nimport java.util.Date\n\nfun createJwtToken(userId: String, role: String): String {\n val secretKey = Keys.hmacShaKeyFor("my_secret_key_32_bytes_long!!".toByteArray())\n\n val token = Jwts.builder()\n .setSubject(userId)\n .claim("role", role)\n .setIssuedAt(Date())\n .setExpiration(Date(System.currentTimeMillis() + 3600_000)) // 1 घंटा\n .signWith(secretKey, SignatureAlgorithm.HS256)\n .compact()\n\n return token\n}\n\n\nJWT टोकन का सत्यापन और पार्सिंग
\n\nटोकन को मान्य करने के लिए Jwts.parserBuilder() का उपयोग करें। claims निकालने के साथ सत्यापन का उदाहरण:\n
import io.jsonwebtoken.Jwts\nimport io.jsonwebtoken.security.Keys\n\nfun validateToken(token: String): Map<String, Any>? {\n return try {\n val secretKey = Keys.hmacShaKeyFor("my_secret_key_32_bytes_long!!".toByteArray())\n val claims = Jwts.parserBuilder()\n .setSigningKey(secretKey)\n .build()\n .parseClaimsJws(token)\n .body\n\n claims\n } catch (e: Exception) {\n println("अमान्य टोकन: ${e.message}")\n null\n }\n}\n\n\nAuth0 java-jwt (Kotlin) के माध्यम से JWT के साथ काम करना
\n\nAuth0 लाइब्रेरी भी लोकप्रिय है। RSA-हस्ताक्षर के साथ टोकन बनाने और सत्यापित करने का उदाहरण:\n
\n\nimport com.auth0.jwt.JWT\nimport com.auth0.jwt.algorithms.Algorithm\nimport com.auth0.jwt.interfaces.DecodedJWT\nimport java.security.interfaces.RSAPrivateKey\nimport java.security.interfaces.RSAPublicKey\nimport java.util.Date\n\n// टोकन जनरेशन\nfun createRsaToken(userId: String, privateKey: RSAPrivateKey): String {\n val algorithm = Algorithm.RSA256(null, privateKey)\n return JWT.create()\n .withSubject(userId)\n .withIssuer("auth0")\n .withExpiresAt(Date(System.currentTimeMillis() + 3600_000))\n .sign(algorithm)\n}\n\n// टोकन सत्यापन\nfun verifyRsaToken(token: String, publicKey: RSAPublicKey): DecodedJWT? {\n return try {\n val algorithm = Algorithm.RSA256(publicKe