Kotlin पर OAuth 2.0 और JWT प्राधिकरण: शुरुआती लोगों के लिए
\n\nआधुनिक वेब एप्लिकेशन और API शायद ही कभी प्रमाणीकरण और प्राधिकरण प्रणाली के बिना काम करते हैं। इस क्षेत्र में दो सबसे लोकप्रिय मानक OAuth 2.0 और JWT (JSON Web Token) हैं। इस लेख में, हम इन तकनीकों का उपयोग करके Kotlin पर प्राधिकरण को लागू करने का तरीका समझेंगे। यह सामग्री भाषा और Spring Boot फ्रेमवर्क की मूल बातों से परिचित शुरुआती डेवलपर्स के लिए है।
\n\nOAuth 2.0 और JWT क्या हैं?
\n\nकोड लिखने से पहले, सिद्धांत को समझना महत्वपूर्ण है।
\n\nOAuth 2.0 एक प्राधिकरण प्रोटोकॉल है जो एप्लिकेशन को लॉगिन और पासवर्ड प्रेषित किए बिना उपयोगकर्ता के संसाधनों तक सीमित पहुंच प्राप्त करने की अनुमति देता है। कल्पना करें कि आप "Google के माध्यम से साइन इन करें" के माध्यम से किसी साइट में प्रवेश कर रहे हैं - यही OAuth 2.0 है।
\n\nJWT एक कॉम्पैक्ट और स्व-निहित टोकन प्रारूप है। इसमें तीन भाग होते हैं: हेडर, पेलोड और सिग्नेचर। JWT का उपयोग अक्सर OAuth 2.0 के साथ प्रमाणीकरण जानकारी प्रसारित करने के लिए किया जाता है।
\n\nOAuth 2.0 के मुख्य प्रवाह:
\n- \n
- Authorization Code Flow — सर्वर एप्लिकेशन के लिए (सबसे सुरक्षित) \n
- Client Credentials Flow — सर्वर-टू-सर्वर संचार के लिए \n
- Implicit Flow — पुराना हो चुका है, अनुशंसित नहीं है \n
- Resource Owner Password Flow — केवल तभी जब आप क्लाइंट पर भरोसा करते हैं \n
इस लेख में, हम Client Credentials Flow पर ध्यान केंद्रित करेंगे, क्योंकि यह समझने में सबसे आसान है और अक्सर माइक्रोसर्विसेज में उपयोग किया जाता है।
\n\nKotlin पर Spring Boot प्रोजेक्ट सेट अप करना
\n\nKotlin समर्थन के साथ एक नया Spring Boot प्रोजेक्ट बनाएं। build.gradle.kts में आवश्यक निर्भरताएँ जोड़ें:
dependencies {\n implementation("org.springframework.boot:spring-boot-starter-web")\n implementation("org.springframework.boot:spring-boot-starter-security")\n implementation("org.springframework.boot:spring-boot-starter-oauth2-resource-server")\n implementation("io.jsonwebtoken:jjwt-api:0.11.5")\n runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5")\n runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.5")\n implementation("com.fasterxml.jackson.module:jackson-module-kotlin")\n}\n\n\nये निर्भरताएँ Spring Security, OAuth 2.0 Resource Server और JWT के साथ काम करने के लिए JJWT लाइब्रेरी का समर्थन प्रदान करती हैं।
\n\nKotlin पर JWT टोकन बनाना
\n\nJWT जनरेशन और वैलिडेशन के लिए एक सेवा लिखें। यह हमारे प्राधिकरण का आधार है।
\n\nimport io.jsonwebtoken.Jwts\nimport io.jsonwebtoken.SignatureAlgorithm\nimport io.jsonwebtoken.security.Keys\nimport org.springframework.stereotype.Service\nimport java.util.Date\n\n@Service\nclass JwtService {\n private val secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256)\n private val expirationMs = 3600000L // 1 घंटा\n\n fun generateToken(clientId: String): String {\n val now = Date()\n val expiryDate = Date(now.time + expirationMs)\n\n return Jwts.builder()\n .setSubject(clientId)\n .setIssuedAt(now)\n .setExpiration(expiryDate)\n .signWith(secretKey)\n .compact()\n }\n\n fun validateToken(token: String): Boolean {\n return try {\n Jwts.parserBuilder()\n .setSigningKey(secretKey)\n .build()\n .parseClaimsJws(token)\n true\n } catch (e: Exception) {\n false\n }\n }\n\n fun getClientIdFromToken(token: String): String {\n val claims = Jwts.parserBuilder()\n .setSigningKey(secretKey)\n .build()\n .parseClaimsJws(token)\n .body\n return claims.subject\n }\n}\n\n\nइस सेवा में हम एक सममित कुंजी का उपयोग करते हैं। उत्पादन में, असममित एन्क्रिप्शन (RS256) का उपयोग करना बेहतर है और