المصادقة والتفويض في Swift: LocalAuthentication، Firebase Auth، Keychain

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

المصادقة والتفويض في Swift (iOS/macOS): نظرة عامة على الأدوات والمكتبات



في تطوير iOS/macOS الحديث، تُعد الأمان وإدارة الوصول من الجوانب الحيوية. يوفر Swift أطر عمل مدمجة للمصادقة المحلية، بالإضافة إلى التكامل مع الخدمات السحابية. في هذا المقال، سنستعرض الأدوات والمكتبات الرئيسية لتنفيذ تسجيل الدخول والتسجيل والتحقق من صلاحيات المستخدم.



1. LocalAuthentication — Face ID / Touch ID / Apple Watch



يسمح إطار العمل LocalAuthentication بمصادقة المستخدم عبر القياسات الحيوية أو رمز الجهاز. يعمل على iOS و macOS.



الإمكانيات الرئيسية:

  • التحقق من توفر القياسات الحيوية (Face ID، Touch ID)
  • المصادقة باستخدام السياق (LAContext)
  • استخدام رمز الجهاز كخيار احتياطي


مثال على الكود:



import LocalAuthentication

func authenticateUser(completion: @escaping (Bool, Error?) -> Void) { let context = LAContext() var error: NSError?

// التحقق من توفر القياسات الحيوية guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else { completion(false, error) return }

// بدء المصادقة context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "أكد هويتك للوصول إلى البيانات") { success, authError in DispatchQueue.main.async { completion(success, authError) } }}


2. Firebase Authentication — المصادقة السحابية



Firebase Auth هي مكتبة قوية تدعم تسجيل الدخول عبر البريد الإلكتروني/كلمة المرور، Google، Apple، GitHub وغيرها من المزودين. مثالية للتطبيقات الخادمة.



التثبيت عبر Swift Package Manager:

// في Package.swift أضف:// .package(url: "https://github.com/firebase/firebase-ios-sdk.git", from: "10.0.0")// target: "YourAppTarget", dependencies: ["FirebaseAuth"]


تسجيل مستخدم جديد:



import FirebaseAuth

func signUp(email: String, password: String) { Auth.auth().createUser(withEmail: email, password: password) { authResult, error in if let error = error { print("خطأ في التسجيل: \\(error.localizedDescription)") return } print("تم تسجيل المستخدم: \\(authResult?.user.uid ?? "")") }}


تسجيل دخول مستخدم موجود:



func signIn(email: String, password: String) {    Auth.auth().signIn(withEmail: email, password: password) { authResult, error in        if let error = error {            print("خطأ في تسجيل الدخول: \\(error.localizedDescription)")            return        }        print("تم تسجيل الدخول: \\(authResult?.user.email ?? "")")    }}


3. Keychain Services — تخزين آمن للرموز



لحفظ رموز JWT أو كلمات المرور أو المفاتيح، استخدم Keychain. إنها آلية أصلية في iOS/macOS.



مثال على الحفظ والقراءة:



import Security

func saveToKeychain(key: String, data: Data) -> Bool { let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: key, kSecValueData as String: data ] SecItemDelete(query as CFDictionary) let status = SecItemAdd(query as CFDictionary, nil) return status == errSecSuccess}

func readFromKeychain(key: String) -> Data? { let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: key, kSecReturnData as String: true, kSecMatchLimit as String: kSecMatchLimitOne ] var result: AnyObject? let status = SecItemCopyMatching(query as CFDictionary, &

توصيات