Kotlin में OAuth 2.0 और JWT का परिचय
\n\nआधुनिक वेब एप्लिकेशन और API को प्रमाणीकरण और प्राधिकरण के विश्वसनीय तंत्र की आवश्यकता होती है। दो प्रमुख मानक — OAuth 2.0 (एक्सेस प्रतिनिधित्व प्रोटोकॉल) और JWT (JSON Web Token, टोकन का कॉम्पैक्ट प्रारूप) — अक्सर सुरक्षित सिस्टम बनाने के लिए एक साथ उपयोग किए जाते हैं। Kotlin, Java के साथ अपनी संगतता और संक्षिप्त सिंटैक्स के कारण, इन प्रोटोकॉल को लागू करने के लिए उपयुक्त है।
\n\nइस लेख में, हम देखेंगे कि Kotlin पर OAuth 2.0 और JWT प्राधिकरण को व्यवहार में कैसे लागू किया जाए। आप सीखेंगे कि टोकन जारी करने वाला सर्वर कैसे सेट करें, सुरक्षित एंडपॉइंट बनाएं, और विभिन्न ग्रांट प्रकारों (जैसे Authorization Code और Client Credentials) को कैसे संभालें।
\n\nमूल बातें: OAuth 2.0 और JWT
\n\nOAuth 2.0 क्या है?
\nOAuth 2.0 एक प्रोटोकॉल है जो तृतीय-पक्ष एप्लिकेशन को लॉगिन और पासवर्ड प्रेषित किए बिना उपयोगकर्ता के संसाधनों तक सीमित पहुंच प्राप्त करने की अनुमति देता है। मुख्य भागीदार:
\n- \n
- Resource Owner (संसाधन स्वामी) — आमतौर पर उपयोगकर्ता। \n
- Client (क्लाइंट) — पहुंच का अनुरोध करने वाला एप्लिकेशन। \n
- Authorization Server (प्राधिकरण सर्वर) — टोकन जारी करता है। \n
- Resource Server (संसाधन सर्वर) — सुरक्षित डेटा संग्रहीत करता है। \n
JWT क्या है?
\nJWT एक कॉम्पैक्ट, URL-सुरक्षित टोकन है जो तीन भागों (header, payload, signature) से बना होता है, जो डॉट्स द्वारा अलग किए जाते हैं। इसका उपयोग पक्षों के बीच दावों (claims) को प्रसारित करने के लिए किया जाता है। JWT के लाभ:
\n- \n
- सर्वर पर सत्र (session) संग्रहीत करने की आवश्यकता नहीं (stateless)। \n
- इसमें सभी आवश्यक जानकारी होती है (जैसे, उपयोगकर्ता ID, भूमिकाएँ)। \n
- डिजिटल हस्ताक्षर से हस्ताक्षरित होता है, जो इसकी अखंडता सुनिश्चित करता है। \n
Kotlin (Spring Boot) पर JWT के साथ OAuth 2.0 का कार्यान्वयन
\n\nSpring Boot और Spring Security लाइब्रेरी का उपयोग करके एक व्यावहारिक उदाहरण देखें। हम एक सरल प्राधिकरण सर्वर और एक सुरक्षित संसाधन बनाएंगे।
\n\nचरण 1: निर्भरताएँ सेट करना
\nbuild.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.security:spring-security-oauth2-authorization-server")\n implementation("io.jsonwebtoken:jjwt-api:0.12.3")\n runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.3")\n runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.3")\n}\n\nचरण 2: प्राधिकरण सर्वर कॉन्फ़िगरेशन
\nOAuth 2.0 के लिए एक कॉन्फ़िगरेशन क्लास बनाएं:
\nimport org.springframework.context.annotation.Bean\nimport org.springframework.context.annotation.Configuration\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity\nimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurity\nimport org.springframework.security.core.userdetails.User\nimport org.springframework.security.core.userdetails.UserDetailsService\nimport org.springframework.security.oauth2.core.AuthorizationGrantType\nimport org.springframework.security.oauth2.core.ClientAuthenticationMethod\nimport org.springframework.security.oauth2.server.authorization.client.InMemoryRegisteredClientRepository\nimport org.springframework.security.oauth2.server.authorization.client.RegisteredClient\nimport org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository\nimport org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration\nimport org.springframework.security.provisioning.InMemoryUserDetailsManager\nimport org.springframework.security.web.SecurityFilterChain\nimport java.util.UUID\n\n@Configuration\n@EnableWebSecurity\nclass SecurityConfig {\n\n @Bean\n