TypeScript में सुरक्षित प्रमाणीकरण: प्रोफेशनल्स के लिए गाइड

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

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

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

आपका डेटा निशाने पर: TypeScript में प्रमाणीकरण कोई मज़ाक नहीं है

\n\n

सोचिए: आपने TypeScript में एक शानदार ऐप बनाया है। यह तेज़ है, टाइप सख्त हैं, कोड सुंदर है। लेकिन एक छोटी सी चीज़ है — प्रमाणीकरण (authentication)। और यहीं से असली मज़ा शुरू होता है। एक गलती — और यूज़र का डेटा पानी की तरह बह जाता है। परिचित लग रहा है?

\n\n

2024 में, सुरक्षित प्रमाणीकरण सिर्फ 'लॉगिन लगाना' नहीं है। यह एक पूरा विज्ञान है। और TypeScript यहाँ आपका सबसे अच्छा दोस्त है। यह आपको गलत डेटा टाइप पास करने से रोकता है, बताता है कि आप टोकन चेक करना कहाँ भूल गए, और कंपाइल टाइम पर बेवकूफी भरी गलतियों से बचाता है।

\n\n

इस लेख में, हम सीखेंगे कि TypeScript एप्लिकेशन में सुरक्षित प्रमाणीकरण कैसे बनाया जाए। कोई बेकार की बात नहीं — सिर्फ असली उदाहरण, बेस्ट प्रैक्टिसेज़, और थोड़ा सा डार्क ह्यूमर (इसके बिना कैसे चलेगा?)।

\n\n

JWT: पहले टोकन से प्यार

\n\n

JSON Web Token (JWT) आधुनिक वेब एप्लिकेशन में प्रमाणीकरण का डी-फैक्टो स्टैंडर्ड है। लेकिन जैसा अंकल बेन ने कहा था, 'बड़ी शक्ति के साथ बड़ी जिम्मेदारी आती है।' JWT ढाल भी हो सकता है और टाइम बम भी।

\n\n

कैसे न करें: गलत उदाहरण

\n\n

शुरुआती लोगों की सबसे आम गलती — टोकन को localStorage में स्टोर करना और खुलेआम भेजना। हाँ, यह काम करता है। लेकिन यह घर की चाबी दरवाज़े के नीचे रखने जैसा है — सुविधाजनक तो है, लेकिन कोई भी राहगीर अंदर आ सकता है। XSS अटैक — और आपके सारे टोकन हैकर के पास।

\n\n

TypeScript में JWT का सही उपयोग

\n\n

चलिए टोकन के साथ काम करने के लिए एक सुरक्षित रैपर लिखते हैं। TypeScript हमें टाइप मिक्स न करने और वैलिडेशन न भूलने में मदद करेगा।

\n\n
import jwt from 'jsonwebtoken';\n\ninterface TokenPayload {\n  userId: string;\n  role: 'user' | 'admin';\n  iat?: number;\n  exp?: number;\n}\n\n// स्पष्ट टाइपिंग के साथ टोकन जनरेट करें\nfunction generateAccessToken(payload: TokenPayload): string {\n  return jwt.sign(\n    { ...payload },\n    process.env.JWT_SECRET as string,\n    { expiresIn: '15m' }\n  );\n}\n\n// वेरिफाई करें और तुरंत हमारे इंटरफ़ेस में कास्ट करें\nfunction verifyAccessToken(token: string): TokenPayload | null {\n  try {\n    return jwt.verify(\n      token, \n      process.env.JWT_SECRET as string\n    ) as TokenPayload;\n  } catch (error) {\n    console.error('टोकन वेरिफिकेशन फेल:', error);\n    return null;\n  }\n}
\n\n

ध्यान दें: हम हमेशा चेक करते हैं कि JWT_SECRET मौजूद है और स्ट्रिंग है। TypeScript हमें ऐसा करने पर मजबूर करता है — रनटाइम पर कोई undefined नहीं!

\n\n

पासवर्ड हैशिंग: bcrypt मदद के लिए आता है

\n\n

पासवर्ड को सादे टेक्स्ट में स्टोर करना अपराध है। भले ही आपका डेटाबेस Fort Knox से भी ज़्यादा सुरक्षित हो, एक हैक — और आप 'पासवर्ड लीक' की खबरों में होंगे। पासवर्ड हैशिंग आपकी जीवन रेखा है।

\n\n

bcrypt क्यों, MD5 क्यों नहीं?

\n\n

MD5 मर चुका है। SHA-256 भी कोई विकल्प नहीं है। आधुनिक GPU प्रति सेकंड अरबों हैश क्रैक कर सकते हैं। Bcrypt विशेष रूप से धीमा बनाया गया है। यह सॉल्ट (रैंडम डेटा) और एडजस्टेबल कॉस्ट फ़ैक्टर का उपयोग करता है। कॉस्ट जितना ज़्यादा — हैश कैलकुलेट करने में उतना ही समय। और यह अच्छी बात है!

\n\n

TypeScript में इम्प्लीमेंटेशन

\n\n
import bcrypt from 'bcrypt';\n\nconst SALT_ROUNDS = 12; // 2024 में इष्टतम मान\n\nasync function hashPassword(password: string): Promise<string> {\n  const salt = await bcrypt.genSalt(SALT_ROUNDS);\n  return bcrypt.hash(password, salt);\n}\n\nasync function comparePassword(\n  password: string, \n  hash: string\n): Promise<boolean> {\n  return bcrypt.compare(password, hash);\n}\n\n// रजिस्ट्रेशन के लिए टाइपिफाइड फ़ंक्शन\ninterface CreateUserInput {\n  email: string;\n  password: string;\n  name: string;\n}\n\nasync function createUser(input: CreateUserInput): Promise<Omit<User, 'passwordHash'>> {\n  const passwordHash = await hashPassword(input.password);\n  \n  // डेटाबेस में सेव करें (आपका कोड यहाँ)\n                

ब्लॉग

पुस्तक अनुशंसाएँ