C# अकादमी · पाठ

रिफ़्रेश टोकन और समाप्ति

सुरक्षित टोकन नवीनीकरण लागू करें।

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

रिफ़्रेश टोकन और समाप्ति, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

समाप्ति की समस्या

कम जीवनकाल वाले एक्सेस टोकन सुरक्षित होते हैं, लेकिन असुविधाजनक भी: उपयोगकर्ताओं को हर 15 मिनट में लॉग इन करने के लिए मजबूर करना खराब उपयोगकर्ता अनुभव है।

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

// access token: 15 minutes
// refresh token: 7-30 days

रीफ़्रेश टोकन क्या होता है

रीफ़्रेश टोकन आम तौर पर एक अपारदर्शी यादृच्छिक स्ट्रिंग होता है (JWT नहीं)। क्योंकि इसका जीवनकाल लंबा होता है, इसलिए इसे सर्वर-पक्ष पर संग्रहीत करना आवश्यक है, ताकि इसे निरस्त किया जा सके।

इसे क्रिप्टोग्राफ़िक रूप से सुरक्षित RNG से बनाएँ।

public static string GenerateRefreshToken()
{
    var bytes = new byte[64];
    using var rng = RandomNumberGenerator.Create();
    rng.GetBytes(bytes);
    return Convert.ToBase64String(bytes);
}

रीफ़्रेश टोकन संग्रहीत करना

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

public class RefreshToken
{
    public int Id { get; set; }
    public string Token { get; set; } = default!;
    public int UserId { get; set; }
    public DateTime ExpiresAt { get; set; }
    public bool IsRevoked { get; set; }
}

लॉगिन पर दोनों टोकन जारी करना

सफल लॉगिन के बाद, कम जीवनकाल वाला एक्सेस टोकन और एक नया रीफ़्रेश टोकन लौटाएँ। रीफ़्रेश टोकन को डेटाबेस में सहेजें।

var access = tokenService.CreateAccessToken(user);
var refresh = new RefreshToken
{
    Token = TokenService.GenerateRefreshToken(),
    UserId = user.Id,
    ExpiresAt = DateTime.UtcNow.AddDays(7)
};
db.RefreshTokens.Add(refresh);
await db.SaveChangesAsync();
return Results.Ok(new { access, refresh = refresh.Token });

रीफ़्रेश एंडपॉइंट

एक समर्पित /refresh एंडपॉइंट रीफ़्रेश टोकन स्वीकार करता है और, यदि वह मान्य हो, तो बिल्कुल नया एक्सेस टोकन जारी करता है।

app.MapPost("/refresh", async (RefreshDto dto, AppDb db, TokenService tokens) =>
{
    var stored = await db.RefreshTokens
        .SingleOrDefaultAsync(r => r.Token == dto.RefreshToken);

    if (stored is null || stored.IsRevoked ||
        stored.ExpiresAt < DateTime.UtcNow)
        return Results.Unauthorized();

    var user = await db.Users.FindAsync(stored.UserId);
    var access = tokens.CreateAccessToken(user!);
    return Results.Ok(new { access });
});

रीफ़्रेश टोकन रोटेशन

रोटेशन इस प्रक्रिया को अधिक सुरक्षित बनाता है: हर बार रीफ़्रेश टोकन का उपयोग होने पर उसे निरस्त करें और नया टोकन जारी करें। इसके बाद चोरी किया गया और पहले ही उपयोग किया जा चुका टोकन बेकार हो जाता है।

stored.IsRevoked = true;            // burn the old one
var next = new RefreshToken
{
    Token = TokenService.GenerateRefreshToken(),
    UserId = stored.UserId,
    ExpiresAt = DateTime.UtcNow.AddDays(7)
};
db.RefreshTokens.Add(next);
await db.SaveChangesAsync();

टोकन के दोबारा उपयोग का पता लगाना

रोटेशन के साथ आप चोरी का पता लगा सकते हैं: यदि पहले ही निरस्त किया जा चुका टोकन दोबारा प्रस्तुत किया जाता है, तो इसे सुरक्षा उल्लंघन मानें और उपयोगकर्ता के पूरे टोकन परिवार को निरस्त कर दें।

if (stored.IsRevoked)
{
    // This token was already used - likely stolen.
    await RevokeAllUserTokens(stored.UserId, db);
    return Results.Unauthorized();
}

लॉगआउट और निरस्तीकरण

लॉगआउट केवल वर्तमान रीफ़्रेश टोकन को निरस्त करता है। एक्सेस टोकन कुछ ही मिनटों में अपने आप समाप्त हो जाएगा।

app.MapPost("/logout", async (RefreshDto dto, AppDb db) =>
{
    var stored = await db.RefreshTokens
        .SingleOrDefaultAsync(r => r.Token == dto.RefreshToken);
    if (stored is not null) stored.IsRevoked = true;
    await db.SaveChangesAsync();
    return Results.Ok();
}).RequireAuthorization();

क्लाइंट पर टोकन कहाँ संग्रहीत करें

ब्राउज़र के लिए सबसे सुरक्षित तरीका रीफ़्रेश टोकन को HttpOnly, सुरक्षित कुकी में संग्रहीत करना है, ताकि JavaScript उसे पढ़ न सके और XSS के ज़रिए होने वाली चोरी का जोखिम कम हो।

कम जीवनकाल वाले एक्सेस टोकन को मेमोरी में रखा जा सकता है।

Response.Cookies.Append("refresh", refresh.Token, new CookieOptions
{
    HttpOnly = true,
    Secure = true,
    SameSite = SameSiteMode.Strict,
    Expires = refresh.ExpiresAt
});

समाप्त टोकनों की सफ़ाई

रीफ़्रेश टोकन समय के साथ जमा होते जाते हैं। समाप्त या निरस्त की गई पंक्तियों को हटाने के लिए समय-समय पर पृष्ठभूमि कार्य चलाएँ (जैसे होस्ट की गई सेवा)।

await db.RefreshTokens
    .Where(r => r.ExpiresAt < DateTime.UtcNow || r.IsRevoked)
    .ExecuteDeleteAsync();

जीवनकाल चुनना

सुरक्षा और सुविधा के बीच संतुलन बनाएँ:

  • एक्सेस टोकन: 5–15 मिनट—उजागर हुए टोकन के जोखिम को सीमित करता है।
  • रीफ़्रेश टोकन: संवेदनशीलता के आधार पर कुछ घंटों से लेकर कई सप्ताह तक।
  • एक दिन से अधिक के जीवनकाल के लिए रोटेशन का उपयोग करें।
AccessTokenLifetime  = TimeSpan.FromMinutes(15);
RefreshTokenLifetime = TimeSpan.FromDays(7);

त्वरित जाँच

रीफ़्रेश प्रक्रिया के बारे में अपनी समझ का परीक्षण करें।

पुनरावलोकन

आपने रीफ़्रेश टोकन प्रक्रिया लागू की:

  • एक छोटा एक्सेस टोकन और एक लंबा, अपारदर्शी, सर्वर पर संग्रहीत रीफ़्रेश टोकन जारी करें।
  • /refresh एंडपॉइंट मान्य रीफ़्रेश टोकन के बदले नया एक्सेस टोकन देता है।
  • रोटेशन और दोबारा उपयोग का पता लगाना चोरी से सुरक्षा को मजबूत करते हैं।
  • रीफ़्रेश टोकनों को HttpOnly कुकी में रखें और समाप्त पंक्तियों की सफ़ाई करें।

इसके साथ JWT प्रमाणीकरण पाठ्यक्रम पूरा होता है।

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

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

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

पाठ्यक्रम
93
पाठ
346

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

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

हाँ—“रिफ़्रेश टोकन और समाप्ति” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

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

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

क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

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

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

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

क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?

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

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

  1. JWT संरचना और क्लेम
  2. JWT Bearer प्रमाणीकरण कॉन्फ़िगर करना
  3. टोकन जारी करना
  4. रिफ़्रेश टोकन और समाप्ति
← C# अकादमी पर वापस जाएँ