Spring Security 6 और JWT प्रमाणीकरण · पाठ

रिफ़्रेश टोकन लागू करना

बार-बार पुनः प्रमाणीकरण किए बिना उपयोगकर्ता सत्रों को सुरक्षित रूप से बढ़ाने के लिए रिफ़्रेश टोकन जारी करने और प्रबंधित करने की रणनीति विकसित करें।

पाठ 1, कुल 4 में से11 चरण

रिफ़्रेश टोकन लागू करना, CoddyKit पर Spring Security 6 और JWT प्रमाणीकरण का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Spring Security 6 और JWT प्रमाणीकरण सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Spring Security 6 और JWT प्रमाणीकरण पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

कम अवधि वाले एक्सेस टोकन क्यों?

आधुनिक सुरक्षा में, एक्सेस टोकन (जैसे JWT) आमतौर पर कम अवधि के लिए बनाए जाते हैं। इसका अर्थ है कि वे जल्दी समाप्त हो जाते हैं, अक्सर कुछ मिनटों या कुछ घंटों में।

ऐसा क्यों? यदि कोई एक्सेस टोकन चोरी हो जाए, तो उसकी कम अवधि हमलावर द्वारा उपयोगकर्ता का रूप धारण करने के समय को सीमित कर देती है। इससे जोखिम की अवधि कम हो जाती है।

उपयोगकर्ता अनुभव की चुनौती

कम अवधि वाले एक्सेस टोकन सुरक्षा के लिए अच्छे होते हैं, लेकिन वे उपयोगकर्ता का अनुभव खराब कर सकते हैं। कल्पना कीजिए कि एक्सेस टोकन समाप्त हो जाने के कारण आपको हर 15 मिनट में लॉग इन करना पड़े!

उपयोगकर्ता लगातार दोबारा प्रमाणीकरण किए बिना लंबे समय तक लॉग इन रहना चाहते हैं। यहीं रिफ्रेश टोकन सहायता करते हैं।

रिफ्रेश टोकन का परिचय

रिफ्रेश टोकन एक विशेष, लंबी अवधि वाला टोकन है, जो उपयोगकर्ता के पहली बार लॉग इन करने पर कम अवधि वाले एक्सेस टोकन के साथ जारी किया जाता है।

  • इसका उपयोग सीधे संसाधनों तक पहुँचने के लिए नहीं किया जाता।
  • इसका एकमात्र उद्देश्य वर्तमान टोकन के समाप्त हो जाने पर नया, मान्य एक्सेस टोकन प्राप्त करना है।
  • इनकी समाप्ति अवधि आमतौर पर बहुत लंबी होती है—कुछ दिन, सप्ताह या यहाँ तक कि महीने।

रिफ्रेश टोकन का प्रवाह

रिफ्रेश टोकन उपयोगकर्ता के सत्र को सुरक्षित रूप से बनाए रखने का तरीका इस प्रकार है:

  1. लॉग इन: उपयोगकर्ता प्रमाणित होता है और उसे एक्सेस टोकन तथा रिफ्रेश टोकन दोनों मिलते हैं।
  2. पहुँच: उपयोगकर्ता API अनुरोधों के लिए एक्सेस टोकन का उपयोग करता है।
  3. समाप्ति: एक्सेस टोकन समाप्त होने पर API अनुरोध विफल हो जाते हैं।
  4. रिफ्रेश: क्लाइंट नया एक्सेस टोकन प्राप्त करने के लिए रिफ्रेश टोकन को एक विशेष endpoint पर भेजता है।
  5. जारी रखना: यदि रिफ्रेश टोकन मान्य है, तो नया एक्सेस टोकन जारी किया जाता है और उपयोगकर्ता दोबारा लॉग इन किए बिना काम जारी रखता है।

रिफ्रेश टोकन बनाना

रिफ्रेश टोकन भी अक्सर JWT होते हैं, लेकिन इनमें अलग दावे और बहुत लंबी समाप्ति अवधि होती है। इनमें 'type': 'refresh' दावा शामिल हो सकता है, जिससे इन्हें एक्सेस टोकन से अलग पहचाना जा सके।

यहाँ एक सरल उदाहरण है कि लंबी समाप्ति अवधि वाला JWT (रिफ्रेश टोकन के रूप में) कैसे बनाया जा सकता है:

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.util.Date;
import java.util.concurrent.TimeUnit;

public class RefreshTokenGenerator {

  private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);

  public static String generateRefreshToken(String username) {
    long nowMillis = System.currentTimeMillis();
    Date now = new Date(nowMillis);
    // Refresh token valid for 7 days
    long expiryMillis = nowMillis + TimeUnit.DAYS.toMillis(7);
    Date expiry = new Date(expiryMillis);

    return Jwts.builder()
        .setSubject(username)
        .claim("token_type", "refresh") // Custom claim
        .setIssuedAt(now)
        .setExpiration(expiry)
        .signWith(SECRET_KEY)
        .compact();
  }

  public static void main(String[] args) {
    String user = "coddykit_user";
    String refreshToken = generateRefreshToken(user);
    System.out.println("Generated Refresh Token for " + user + ":");
    System.out.println(refreshToken);
  }
}

क्लाइंट-साइड सुरक्षित संग्रहण

क्लाइंट को रिफ्रेश टोकन कहाँ रखना चाहिए? सुरक्षा के लिए यह बहुत महत्वपूर्ण है:

  • HTTP-only कुकी: वेब अनुप्रयोगों के लिए यह सबसे सुरक्षित विकल्प है। ब्राउज़र इन्हें अपने-आप भेजता है और JavaScript इन तक पहुँच नहीं सकता, जिससे XSS हमलों से बचाव होता है।
  • सुरक्षित संग्रहण: मोबाइल ऐप्स के लिए प्लेटफ़ॉर्म-विशिष्ट सुरक्षित संग्रहण (जैसे iOS Keychain और Android Keystore) का उपयोग किया जाना चाहिए।

रिफ्रेश टोकन को कभी भी Local Storage में न रखें! यह XSS के प्रति असुरक्षित होता है।

सर्वर-साइड प्रबंधन

बेहतर सुरक्षा और नियंत्रण के लिए, रिफ्रेश टोकन अक्सर सर्वर-साइड पर भी प्रबंधित किए जाते हैं:

  • डेटाबेस में संग्रहण: रिफ्रेश टोकन (या उनके हैश) को उपयोगकर्ता से संबद्ध करके डेटाबेस में रखें।
  • निरस्तीकरण: इससे सर्वर किसी रिफ्रेश टोकन को तुरंत अमान्य कर सकता है, जैसे उपयोगकर्ता के लॉग आउट करने, पासवर्ड बदलने या टोकन के खतरे में पड़ने पर।
  • एक बार उपयोग: कुछ कार्यान्वयन रिफ्रेश टोकन को केवल एक बार उपयोग करने योग्य बनाते हैं और हर रिफ्रेश अनुरोध पर नया टोकन जारी करते हैं।

रिफ्रेश endpoint

आपके Spring Boot अनुप्रयोग में एक समर्पित API endpoint होना चाहिए (जैसे /api/auth/refresh), जिसे क्लाइंट नए एक्सेस टोकन के बदले मान्य रिफ्रेश टोकन भेजने के लिए कॉल कर सकें।

इस endpoint को निम्न कार्य करने चाहिए:

  • क्लाइंट से रिफ्रेश टोकन प्राप्त करना।
  • रिफ्रेश टोकन के हस्ताक्षर, दावों और समाप्ति अवधि को मान्य करना।
  • यदि लागू हो, तो सर्वर-साइड संग्रहण के विरुद्ध उसका सत्यापन करना।
  • यदि टोकन मान्य है, तो नया एक्सेस टोकन बनाकर लौटाना और संभव हो तो नया रिफ्रेश टोकन भी जारी करना।

रिफ्रेश endpoint का तर्क (Snippet)

यह Spring controller की उस विधि का वैचारिक स्निपेट है, जो रिफ्रेश अनुरोध संभालती है। ध्यान दें कि `isRunnable` false है, क्योंकि यह किसी बड़े Spring अनुप्रयोग संदर्भ का हिस्सा है।

@RestController
@RequestMapping("/api/auth")
public class AuthController {

    @Autowired
    private JwtService jwtService;

    @Autowired
    private RefreshTokenService refreshTokenService;

    @PostMapping("/refresh")
    public ResponseEntity<TokenResponse> refreshAccessToken(@RequestBody RefreshRequest refreshRequest) {
        String oldRefreshToken = refreshRequest.getRefreshToken();
        
        // 1. Validate the old refresh token
        if (!jwtService.validateToken(oldRefreshToken) || !refreshTokenService.isValidRefreshToken(oldRefreshToken)) {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
        }

        String username = jwtService.extractUsername(oldRefreshToken);
        // 2. Generate new access token
        String newAccessToken = jwtService.generateAccessToken(username);
        // 3. (Optional) Generate a new refresh token and invalidate the old one
        String newRefreshToken = refreshTokenService.rotateRefreshToken(oldRefreshToken, username);

        return ResponseEntity.ok(new TokenResponse(newAccessToken, newRefreshToken));
    }
}

रिफ्रेश टोकन की जाँच

रिफ्रेश टोकन प्रबंधित करने के लिए निम्न में से कौन-से सुरक्षित तरीके हैं?

पुनरावलोकन: रिफ्रेश टोकन के साथ सुरक्षित सत्र

आपने सीखा कि कम अवधि वाले एक्सेस टोकन का उपयोग करने वाले अनुप्रयोगों में मज़बूत सुरक्षा और अच्छे उपयोगकर्ता अनुभव के बीच संतुलन बनाने के लिए रिफ्रेश टोकन कितने महत्वपूर्ण हैं।

  • वे उपयोगकर्ताओं को लंबे समय तक प्रमाणित बने रहने देते हैं।
  • सुरक्षित संग्रहण (HTTP-only कुकी और सुरक्षित मोबाइल संग्रहण) बहुत महत्वपूर्ण है।
  • सर्वर-साइड प्रबंधन बेहतर सुरक्षा के लिए निरस्तीकरण और टोकन रोटेशन की सुविधा देता है।

यह तंत्र मज़बूत और आधुनिक प्रमाणीकरण प्रणालियों की आधारशिला है।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “रिफ़्रेश टोकन लागू करना” पाठ निःशुल्क है?

हाँ — Spring Security 6 और JWT प्रमाणीकरण अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “रिफ़्रेश टोकन लागू करना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Spring Security 6 और JWT प्रमाणीकरण पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“रिफ़्रेश टोकन लागू करना” में मैं क्या सीखूँगा?

बार-बार पुनः प्रमाणीकरण किए बिना उपयोगकर्ता सत्रों को सुरक्षित रूप से बढ़ाने के लिए रिफ़्रेश टोकन जारी करने और प्रबंधित करने की रणनीति विकसित करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Spring Security 6 और JWT प्रमाणीकरण का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Spring Security 6 और JWT प्रमाणीकरण शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Spring Security 6 और JWT प्रमाणीकरण शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“रिफ़्रेश टोकन लागू करना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Spring Security 6 और JWT प्रमाणीकरण पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Spring Security 6 और JWT प्रमाणीकरण पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. रिफ़्रेश टोकन लागू करना
  2. JWT टोकन निरस्तीकरण रणनीतियाँ
  3. सुरक्षित टोकन संग्रहण के तरीके
  4. हस्ताक्षर कुंजियों का रोटेशन और कुंजी प्रबंधन
← Spring Security 6 और JWT प्रमाणीकरण पर वापस जाएँ