OAuth 2.0 और Java पर JWT प्राधिकरण: व्यावहारिक रूप से
\n\nआधुनिक वेब एप्लिकेशन और API शायद ही कभी प्रमाणीकरण और प्राधिकरण तंत्र के बिना काम करते हैं। दो सबसे लोकप्रिय मानक — OAuth 2.0 और JWT (JSON Web Token) — उपयोगकर्ता के बारे में डेटा को सुरक्षित रूप से स्थानांतरित करने और संसाधनों तक पहुंच प्रदान करने की अनुमति देते हैं। इस लेख में, हम Spring Boot का उपयोग करके एक व्यावहारिक उदाहरण पर Java में OAuth 2.0 और JWT प्राधिकरण को लागू करने का तरीका समझेंगे। आप सीखेंगे कि प्राधिकरण सर्वर कैसे सेट करें, JWT टोकन कैसे उत्पन्न और सत्यापित करें, और अपने REST API के अंतिम बिंदुओं को कैसे सुरक्षित करें।
\n\nOAuth 2.0 और JWT क्या है: एक संक्षिप्त अवलोकन
\nOAuth 2.0 एक प्रतिनिधि पहुंच प्रोटोकॉल है जो तृतीय-पक्ष एप्लिकेशन को उपयोगकर्ता की साख प्रदान किए बिना उसके संसाधनों तक सीमित पहुंच प्राप्त करने की अनुमति देता है। इसका व्यापक रूप से सोशल नेटवर्क (Google, Facebook) के माध्यम से लॉगिन और API सुरक्षा के लिए उपयोग किया जाता है।
\nJWT (JSON Web Token) एक कॉम्पैक्ट और आत्मनिर्भर टोकन प्रारूप है जिसमें उपयोगकर्ता के बारे में जानकारी (claims) होती है और अखंडता सत्यापन के लिए हस्ताक्षरित होती है। JWT का उपयोग अक्सर OAuth 2.0 में एक्सेस टोकन के रूप में किया जाता है, क्योंकि इसे सर्वर पर संग्रहीत करने की आवश्यकता नहीं होती है और इसे HTTP हेडर में आसानी से स्थानांतरित किया जा सकता है।
\nव्यवहार में, OAuth 2.0 टोकन प्राप्त करने के प्रवाह (flow) को परिभाषित करता है, और JWT स्वयं टोकन के प्रारूप को परिभाषित करता है। साथ में, वे एक शक्तिशाली और सुरक्षित प्राधिकरण प्रणाली बनाते हैं।
\n\nनिर्भरता के साथ Spring Boot प्रोजेक्ट सेटअप
\nशुरू करने के लिए, हम एक बुनियादी Spring Boot प्रोजेक्ट बनाएंगे। हम Spring Security, Spring Web और JWT के साथ काम करने के लिए एक लाइब्रेरी (उदाहरण के लिए, jjwt) का उपयोग करेंगे।
अपने pom.xml (Maven) या build.gradle (Gradle) में निम्नलिखित निर्भरताएँ जोड़ें:
<!-- Maven -->\n<dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-security</artifactId>\n</dependency>\n<dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-web</artifactId>\n</dependency>\n<dependency>\n <groupId>io.jsonwebtoken</groupId>\n <artifactId>jjwt-api</artifactId>\n <version>0.12.3</version>\n</dependency>\n<dependency>\n <groupId>io.jsonwebtoken</groupId>\n <artifactId>jjwt-impl</artifactId>\n <version>0.12.3</version>\n <scope>runtime</scope>\n</dependency>\n<dependency>\n <groupId>io.jsonwebtoken</groupId>\n <artifactId>jjwt-jackson</artifactId>\n <version>0.12.3</version>\n <scope>runtime</scope>\n</dependency>\nअब हम एक सुरक्षा कॉन्फ़िगरेशन क्लास बनाएंगे जो CSRF को अक्षम करेगा और फ़िल्टर श्रृंखला को परिभाषित करेगा।
\n\nप्राधिकरण सर्वर का कार्यान्वयन और JWT जनरेशन
\nOAuth 2.0 के लिए, हमें एक एंडपॉइंट की आवश्यकता होगी जो क्लाइंट की साख प्राप्त करेगा और JWT टोकन लौटाएगा। सबसे सरल मामले में, यह प्राधिकरण सर्वर का अनुकरण हो सकता है।
\nJWT के साथ काम करने के लिए एक सेवा बनाएं:
\nimport io.jsonwebtoken.Jwts;\nimport io.jsonwebtoken.SignatureAlgorithm;\nimport io.jsonwebtoken.security.Keys;\nimport org.springframework.stereotype.Service;\n\nimport javax.crypto.SecretKey;\nimport java.util.Date;\n\n@Service\npublic class JwtService {\n\n private final SecretKey secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256);\n private final long expirationMs = 3600000; // 1 घंटा\n\n public String generateToken(String username) {\n Date now = new Date();\n Date expiryDate = new Date(now.getTime() + expirationMs);\n\n return Jwts.builder()\n .subject(username)\n .issuedAt(now)\n .expiration(expiryDate)\n .signWith(secretKey)\n .compact();\n }\n\n public String