Swift में OAuth 2.0 और JWT का परिचय
\n\nआधुनिक मोबाइल और डेस्कटॉप ऐप्स शायद ही कभी प्रमाणीकरण के बिना काम करते हैं। दो प्रमुख प्रोटोकॉल - OAuth 2.0 और JWT (JSON Web Token) - क्लाइंट और सर्वर के बीच सुरक्षित डेटा ट्रांसफर के लिए डी-फैक्टो मानक बन गए हैं। इस लेख में, हम iOS और macOS प्लेटफॉर्म के लिए Swift में OAuth 2.0 और JWT प्राधिकरण को लागू करने का तरीका समझेंगे। आप सीखेंगे कि टोकन प्राप्त करने का फ्लो कैसे सेट करें, उन्हें Keychain में कैसे स्टोर करें, और समाप्ति पर स्वचालित रूप से कैसे रिफ्रेश करें।
\n\nयह लेख शुरुआती डेवलपर्स के लिए है जो Swift और SwiftUI की मूल बातों से पहले से परिचित हैं। हम नेटवर्क अनुरोधों के लिए URLSession और डेटा को सुरक्षित रूप से स्टोर करने के लिए Keychain का उपयोग करेंगे। कोड Swift 5.9 में लिखा गया है और iOS 15+ / macOS 12+ के साथ संगत है।
\n\nOAuth 2.0 और JWT क्या हैं?
\n\nकोड लिखने से पहले, आइए सिद्धांत को समझें।
\n\nOAuth 2.0
\nOAuth 2.0 एक प्राधिकरण प्रोटोकॉल है जो ऐप को उपयोगकर्ता का लॉगिन और पासवर्ड दिए बिना उसके संसाधनों तक सीमित पहुंच प्राप्त करने की अनुमति देता है। इसके बजाय, एक्सेस टोकन का उपयोग किया जाता है। मुख्य भागीदार:
\n- \n
- Resource Owner — उपयोगकर्ता। \n
- Client — आपका ऐप। \n
- Authorization Server — टोकन जारी करने वाला सर्वर। \n
- Resource Server — डेटा प्रदान करने वाला API। \n
मोबाइल ऐप्स के लिए सबसे लोकप्रिय फ्लो Authorization Code Flow with PKCE (Proof Key for Code Exchange) है। यह क्लाइंट सीक्रेट के बिना भी सुरक्षित है, जिसे ऐप में स्टोर करना मुश्किल है।
\n\nJWT (JSON Web Token)
\nJWT एक कॉम्पैक्ट और स्व-निहित टोकन प्रारूप है जिसमें JSON डेटा होता है। यह तीन भागों से बना होता है, जो डॉट्स द्वारा अलग किए जाते हैं:
\n- \n
- Header — टोकन का प्रकार और हस्ताक्षर एल्गोरिदम। \n
- Payload — उपयोगी डेटा (claims), जैसे उपयोगकर्ता आईडी, भूमिका, समाप्ति तिथि। \n
- Signature — अखंडता की जांच के लिए हस्ताक्षर। \n
JWT का उपयोग अक्सर OAuth 2.0 में access token के रूप में किया जाता है। यह सर्वर को डेटाबेस से संपर्क किए बिना अनुरोध की प्रामाणिकता सत्यापित करने की अनुमति देता है।
\n\nSwift में व्यावहारिक कार्यान्वयन
\n\nहम एक सरल क्लास AuthService बनाएंगे जो प्रमाणीकरण का प्रबंधन करेगा। उदाहरण के लिए, हम सर्वर https://api.example.com का उपयोग करेंगे।
चरण 1: OAuth 2.0 के माध्यम से टोकन प्राप्त करना
\n\nपहले, हम प्राधिकरण कोड द्वारा टोकन प्राप्त करने की विधि लागू करेंगे। मान लें कि हमने पहले ही वेब-व्यू (जैसे ASWebAuthenticationSession) के माध्यम से authorizationCode प्राप्त कर लिया है।
import Foundation\n\nfinal class AuthService {\n static let shared = AuthService()\n private let baseURL = "https://api.example.com"\n private let clientID = "your_client_id"\n private let redirectURI = "yourapp://callback"\n \n // MARK: - टोकन प्राप्त करना\n func exchangeCodeForTokens(code: String, codeVerifier: String) async throws -> TokenResponse {\n let url = URL(string: "\\(baseURL)/oauth/token")!\n var request = URLRequest(url: url)\n request.httpMethod = "POST"\n request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")\n \n let body = [\n "grant_type": "authorization_code",\n "code": code,\n "redirect_uri": redirectURI,\n "client_id": clientID,\n "code_verifier": codeVerifier\n ]\n .map { "\\($0.key)=\\($0.value.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "")" }\n .joined(separator: "&")\n .data(using: .utf8)\n \n request.httpBody = body\n \n let (data, response) = try await URLSession.shared.data(for: request)\n \n guard let httpResponse = response as? HTTPURLResponse,