OAuth 2.0 और Swift पर JWT प्राधिकरण: शुरुआती लोगों के लिए पूर्ण गाइड

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

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

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

परिचय: मोबाइल ऐप्स में प्राधिकरण की आवश्यकता क्यों है?

\n

आधुनिक iOS ऐप्स शायद ही कभी अलग-थलग काम करते हैं। वे सर्वर से संवाद करते हैं, डेटा भेजते हैं, वैयक्तिकृत सामग्री प्राप्त करते हैं। लेकिन सर्वर कैसे समझ सकता है कि अनुरोध उसी उपयोगकर्ता द्वारा भेजा गया है जो वह होने का दावा करता है? यहाँ OAuth 2.0 और JWT (JSON Web Token) मदद करते हैं। ये सिर्फ फैशनेबल संक्षिप्ताक्षर नहीं हैं, बल्कि सुरक्षा मानक हैं जो अधिकांश आधुनिक API (Google, Facebook, GitHub, आपका अपना बैकएंड) के काम करने के तरीके का आधार हैं।

\n

इस लेख में, हम समझेंगे कि Swift पर OAuth 2.0 और JWT कैसे काम करते हैं। आप जानेंगे कि वे कैसे भिन्न हैं, उन्हें सही तरीके से कैसे लागू किया जाए, और शुरुआती लोगों के लिए क्या नुकसान हैं। हम टोकन प्राप्त करने, संग्रहीत करने और नवीनीकृत करने के लिए कोड लिखेंगे। चलिए शुरू करते हैं!

\n\n

1. मूल बातें: OAuth 2.0 और JWT — क्या अंतर है?

\n

बहुत से लोग इन दो अवधारणाओं को भ्रमित करते हैं। वास्तव में, ये अमूर्तता के विभिन्न स्तर हैं।

\n
    \n
  • OAuth 2.0 — एक प्राधिकरण प्रोटोकॉल है। यह वर्णन करता है कि कोई ऐप (क्लाइंट) लॉगिन और पासवर्ड प्रेषित किए बिना किसी तीसरे पक्ष के सर्वर (उदाहरण के लिए, Google पर उपयोगकर्ता की तस्वीरें) पर उपयोगकर्ता के संसाधनों तक पहुँच कैसे प्राप्त कर सकता है। मुख्य विचार अस्थायी एक्सेस टोकन जारी करना है।
  • \n
  • JWT — एक टोकन प्रारूप है। यह एक कॉम्पैक्ट, URL-सुरक्षित स्ट्रिंग है जिसमें JSON डेटा (उदाहरण के लिए, उपयोगकर्ता आईडी, भूमिका, समाप्ति तिथि) और हस्ताक्षर होते हैं। JWT का उपयोग अक्सर OAuth 2.0 में एक्सेस टोकन के रूप में किया जाता है, लेकिन इसका उपयोग अलग से भी किया जा सकता है।
  • \n
\n

एक सरल उपमा: OAuth 2.0 स्टेडियम में प्रवेश पास जारी करने के नियम हैं, और JWT आपकी फोटो और मुहर वाला प्लास्टिक पास ही है।

\n

एक सामान्य परिदृश्य में, iOS ऐप:

\n
    \n
  1. OAuth प्रदाता (Google, Apple ID, अपना सर्वर) के माध्यम से लॉगिन करने के लिए ब्राउज़र खोलता है।
  2. \n
  3. authorization code प्राप्त करता है।
  4. \n
  5. कोड को access token (अक्सर JWT प्रारूप में) और refresh token में बदलता है।
  6. \n
  7. API अनुरोधों के लिए access token का उपयोग करता है।
  8. \n
  9. जब access token समाप्त हो जाता है, तो नया प्राप्त करने के लिए refresh token का उपयोग करता है।
  10. \n
\n\n

2. JWT टोकन की संरचना

\n

JWT में तीन भाग होते हैं, जो बिंदुओं से अलग होते हैं:

\n
header.payload.signature
\n

डिकोड किए गए JWT का उदाहरण:

\n
// Header (शीर्षक)\n{\n  "alg": "HS256",\n  "typ": "JWT"\n}\n// Payload (पेलोड)\n{\n  "sub": "1234567890",\n  "name": "Иван Петров",\n  "iat": 1516239022,\n  "exp": 1516242622\n}\n// Signature (हस्ताक्षर) - सर्वर द्वारा बनाया गया
\n

महत्वपूर्ण: JWT का Payload एन्क्रिप्टेड नहीं है, यह केवल Base64 में एन्कोडेड है। कोई भी इसे पढ़ सकता है। गोपनीयता हस्ताक्षर द्वारा सुनिश्चित की जाती है — यदि सर्वर देखता है कि हस्ताक्षर मेल नहीं खाता है, तो वह टोकन को अस्वीकार कर देता है। इसलिए JWT में कभी भी पासवर्ड या गुप्त डेटा संग्रहीत न करें।

\n\n

3. Swift पर OAuth 2.0 और JWT का कार्यान्वयन

\n

अब व्यावहारिक भाग पर आते हैं। हम प्राधिकरण के साथ काम करने के लिए एक क्लास लिखेंगे। सरलता के लिए, हम बिल्ट-इन URLSession का उपयोग करेंगे, हालांकि वास्तविक परियोजनाओं में अक्सर Alamofire या SwiftUI + async/await का उपयोग किया जाता है।

\n\n

3.1. डेटा मॉडल

\n
struct AuthResponse: Codable {\n    let accessToken: String\n    let refreshToken: String?\n    let expiresIn: Int\n    \n    enum CodingKeys: String, CodingKey {\n        case accessToken = "access_token"\n        case refreshToken = "refresh_token"\n        case expiresIn = "expires_in"\n    }\n}\n\nstruct UserProfile: Codable {\n    let id: String\n    let name: String\n    let email: String\n}
\n\n

3.2. प्राधिकरण सेवा

\n

हम एक AuthService क्लास बनाएंगे जो टोकन प्राप्त करने और नवीनीकृत करने के लिए जिम्मेदार होगी। कृपया ध्यान दें: वास्तविक ऐप में, URL और clientSecret को सुरक्षित रूप से संग्रहीत किया जाना चाहिए (उदाहरण के लिए, Keychain में या कॉन्फ़िगरेशन सर्वर के माध्यम से)।

\n
class AuthService {\n    static let shared = A                

ब्लॉग

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