JWT टोकन Java में: JSON Web Tokens के लिए पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java में JWT टोकन: JSON Web Tokens के लिए पूर्ण गाइड

JSON Web Token (JWT) एक ओपन स्टैंडर्ड (RFC 7519) है जो पार्टियों के बीच JSON ऑब्जेक्ट के रूप में जानकारी साझा करने का एक कॉम्पैक्ट और स्व-निहित तरीका परिभाषित करता है। Java में JWT के साथ काम करने के लिए कई परिपक्व लाइब्रेरी उपलब्ध हैं जो टोकन बनाने, साइन करने, सत्यापित करने और डिकोड करने की सुविधा देती हैं। इस लेख में हम तीन मुख्य लाइब्रेरी: JJWT, Auth0 java-jwt और Nimbus JOSE + JWT पर विस्तार से चर्चा करेंगे, साथ ही उनके उपयोग के सर्वोत्तम अभ्यास भी जानेंगे।

JWT क्या है और Java में इसकी आवश्यकता क्यों है?

JWT तीन भागों से बना होता है, जो डॉट (.) से अलग होते हैं:

  • Header — इसमें टोकन के प्रकार और सिग्नेचर एल्गोरिदम (जैसे HS256 या RS256) की जानकारी होती है।
  • Payload — इसमें क्लेम (claims) होते हैं: मानक (iss, sub, exp, iat) और कस्टम डेटा।
  • Signature — सीक्रेट की या RSA/ECDSA पेयर का उपयोग करके header + payload को हैश करके बनाया जाता है।

Java में JWT का उपयोग आमतौर पर इनके लिए किया जाता है:

  • REST API में ऑथेंटिकेशन और ऑथराइजेशन (खासकर Spring Security के साथ)।
  • माइक्रोसर्विसेज के बीच जानकारी साझा करना।
  • Single Sign-On (SSO) को लागू करना।

JJWT लाइब्रेरी (io.jsonwebtoken)

JJWT Java के लिए सबसे लोकप्रिय और अच्छी तरह से डॉक्यूमेंटेड लाइब्रेरी में से एक है। यह सभी आधुनिक सिग्नेचर और एन्क्रिप्शन एल्गोरिदम को सपोर्ट करती है, साथ ही एक सुविधाजनक fluent API भी प्रदान करती है।

इंस्टॉलेशन

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.12.6</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.12.6</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.12.6</version>
    <scope>runtime</scope>
</dependency>

JJWT के साथ JWT बनाना

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import javax.crypto.SecretKey;
import java.util.Date;

public class JwtExample {
    public static void main(String[] args) {
        // HS256 के लिए सुरक्षित की जनरेट करें
        SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);

        String jwt = Jwts.builder()
                .subject("user123")
                .issuer("https://pythonlib.ru")
                .issuedAt(new Date())
                .expiration(new Date(System.currentTimeMillis() + 3600000)) // 1 घंटा
                .claim("role", "ADMIN")
                .signWith(key)
                .compact();

        System.out.println("JWT: " + jwt);
    }
}

JWT को सत्यापित और पार्स करना

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;

public class JwtParser {
    public static void main(String[] args) {
        String jwt = "eyJhbGciOiJIUzI1NiJ9..."; // आपका टोकन
        SecretKey key = ...; // वही की जो साइन करने के लिए उपयोग की गई थी

        try {
            Jws<Claims> claimsJws = Jwts.parser()
                    .verifyWith(key)
                    .build()
                    .parseSignedClaims(jwt);
            
            Claims claims = claimsJws.getPayload();
            String subject = claims.getSubject();
            String role = claims.get("role", String.class);
            
            System.out.println("Subject: " + subject);
            System.out.println("Role: " + role);
        } catch (Exception e) {
            System.err.println("Invalid JWT: " + e.getMessage());
        }
    }
}

अनुशंसाएँ