OAuth 2.0 और JWT क्या हैं और Kotlin में इनकी आवश्यकता क्यों है?
\n\nआधुनिक वेब डेवलपमेंट में, डेटा सुरक्षा और एक्सेस प्रबंधन प्रमुख कार्यों में से एक हैं। यदि आप Kotlin में सर्वर-साइड एप्लिकेशन लिख रहे हैं, तो देर-सबेर आपको API को सुरक्षित करने या तृतीय-पक्ष सेवाओं (Google, GitHub, VK) के माध्यम से लॉगिन व्यवस्थित करने की आवश्यकता होगी। इसके लिए दो मानक मौजूद हैं — OAuth 2.0 (प्राधिकरण प्रोटोकॉल) और JWT (JSON Web Token — टोकन प्रारूप)।
\n\nइस लेख में, हम समझेंगे कि OAuth 2.0 और JWT कैसे काम करते हैं, और लोकप्रिय लाइब्रेरीज़ का उपयोग करके Kotlin में एक सरल प्राधिकरण लागू करेंगे। यह सामग्री शुरुआती लोगों के लिए है, इसलिए सभी जटिल शब्दों को सरल भाषा में समझाया जाएगा।
\n\nमूल अवधारणाएँ: OAuth 2.0 और JWT
\n\nOAuth 2.0 क्या है?
\nOAuth 2.0 एक प्रोटोकॉल है जो एक सेवा (जैसे, आपका एप्लिकेशन) को किसी अन्य सेवा (जैसे, Google पर उपयोगकर्ता की प्रोफ़ाइल) पर उपयोगकर्ता के संसाधनों तक सीमित पहुँच प्राप्त करने की अनुमति देता है, बिना लॉगिन और पासवर्ड दिए। कल्पना करें कि आप Google खाते के माध्यम से किसी वेबसाइट पर लॉगिन करना चाहते हैं — यही OAuth 2.0 है।
\n\nOAuth 2.0 के मुख्य भागीदार:
\n- \n
- Resource Owner — उपयोगकर्ता, डेटा का मालिक। \n
- Client — आपका एप्लिकेशन, जो पहुँच प्राप्त करना चाहता है। \n
- Authorization Server — सर्वर जो अनुमति जारी करता है (जैसे, Google)। \n
- Resource Server — सर्वर जो उपयोगकर्ता का डेटा संग्रहीत करता है (जैसे, Google API)। \n
JWT क्या है?
\nJWT एक कॉम्पैक्ट और स्व-निहित टोकन प्रारूप है जिसमें उपयोगकर्ता के बारे में जानकारी होती है (जैसे, ID, भूमिका, समाप्ति तिथि)। टोकन पर डिजिटल हस्ताक्षर होता है, इसलिए इसे जाली नहीं बनाया जा सकता। JWT तीन भागों से बना होता है, जो बिंदुओं द्वारा अलग किए जाते हैं:
\n\nheader.payload.signature\n\nडिकोड किए गए JWT का उदाहरण:
\n{\n "sub": "1234567890",\n "name": "राम शर्मा",\n "iat": 1516239022,\n "exp": 1516242622\n}\n\nJWT का मुख्य लाभ यह है कि सर्वर को डेटाबेस में सत्र संग्रहीत करने की आवश्यकता नहीं है। सारी जानकारी पहले से ही टोकन के अंदर होती है।
\n\nSpring Boot के साथ Kotlin में JWT प्राधिकरण का कार्यान्वयन
\n\nआइए एक व्यावहारिक उदाहरण देखें। हम Spring Boot और Spring Security का उपयोग करके Kotlin में एक REST API बनाएंगे। हमारा एप्लिकेशन सफल प्रमाणीकरण पर JWT टोकन जारी करेगा।
\n\nचरण 1. निर्भरताएँ जोड़ना
\nbuild.gradle.kts में निम्नलिखित निर्भरताएँ जोड़ें:
dependencies {\n implementation("org.springframework.boot:spring-boot-starter-security")\n implementation("org.springframework.boot:spring-boot-starter-web")\n implementation("io.jsonwebtoken:jjwt-api:0.12.5")\n runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.5")\n runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.5")\n}\n\nचरण 2. JWT सेवा बनाना
\nएक JwtService क्लास बनाएं जो टोकन उत्पन्न और सत्यापित करेगी:
import io.jsonwebtoken.Claims\nimport io.jsonwebtoken.Jwts\nimport io.jsonwebtoken.security.Keys\nimport org.springframework.stereotype.Service\nimport java.util.*\n\n@Service\nclass JwtService {\n private val secretKey = "mySecretKeyForJwtToken12345678901234567890" // कम से कम 32 अक्षर\n private val expirationMs = 3600000L // 1 घंटा\n\n fun generateToken(username: String): String {\n val claims: Map = mapOf(\n "sub" to username,\n "iat" to Date(),\n "exp" to Date(System.currentTimeMillis() + expirationMs)\n )\n return Jwts.builder()\n .claims(claims)\n .signWith(Keys.hmacShaKeyFor(secretKey.toByteArray()))\n .compact()\n }\n\n fun extractUsername(token: String): String? {\n return try {\n val claims = parseToken(token)\n claims.subject\n } catch (e: Exception) {\n null\n }\n }\n\n private fun parseToken(token: String): Claims {\n return Jwts.parser()\n .verifyWith(Keys.hmacShaKeyFor(secretKey.toByteArray()))\n .build()\n .parseSignedClaims(token)\n .payload\n }\n}