MSession
MSession是一个用Swift编写的会话和身份验证解决方案
它是构建具有最新苹果生物识别身份验证的安全和模块化应用的一个简单易用的解决方案。
MSessions使用Keychain
来身份验证用户并保存会话(秘密密钥、用户)。它在您的应用程序中非常灵活、易于使用和扩展。
要求
- Xcode 10.0+
- Swift 5.0+
版本
- Swift 4.2: 0.1.6
- Swift 5.0: 1*
安装
您可以使用每个解决方案(会话/认证)单独使用,但默认情况下,这些解决方案是结合使用的。
Cocoapods
pod 'MSession'
如果您想使用应用会话解决方案,请使用此子规格。
pod 'MSession/Session'
如果您想使用应用认证解决方案,请使用此子规格。
pod 'Mession/Auth'
手动
如果您不使用任何依赖项管理器,可以通过仅添加包含
会话
会话模块包含管理应用会话的所有类。
所有这些模块围绕着 SessionManager<T: AnyObject>
类运行。该类负责处理 创建、更新、过期和注销 应用会话。默认情况下,SessionManager 需要一个 AnyObject
来保存在会话中。这个对象将是您的 "用户" 或 "客户端"。
因此,基本上要使用此模块,您需要此类的实例或创建自己的。
创建一个共享实例
static let shared = SessionManager<User>(service: "MyAppService")
如果您想进一步改进应用程序的会话,例如设置过期时间或其他更合适的东西,则创建自己的类是合适的。
创建自己的类
import MSession
class AppSessionManager: SessionManager<User> {
static let shared = AppSessionManager(service: "MyAppService")
...
}
创建自己的类是最合适的方法
要创建 SessionManager
实例,您需要提供一个 service
,它是一个标识符,用于保存和恢复您应用程序的会话。
SessionManager
默认有一个称为 SessionDataStore
的 DataStore
实现名为,使用 NSKeyedArchiver
和 Keychain
保存会话。
如果您想要使用 Realm 或 Core Data 创建本地存储,您也可以使用 MSession。您只需创建自己的 DataStore 并实现 SessionDataStoreProtocol
。
import MSession
class AppSessionDataStore: SessionDataStoreProtocol {
// implement all methods
}
然后将新数据存储传递给您的 SessionManager
import MSession
class AppSessionManager: SessionManager<User> {
static let shared = AppSessionManager(dataStore: AppSessionDataStore())
...
}
注意:如果您正在使用默认数据存储(SessionDataStore),您的 User
类必须扩展 NSObject & NSCoding
认证
认证模块包含所有用于使用 生物识别(面部识别)
和 密钥链
进行身份验证的类。 AuthManager
类包含确保您应用安全认证所需的所有方法。
与 Session 模块一样,您需要一个 AuthManager
类的实例或创建自己的实例。
创建共享实例
static let shared = AuthManager(service: "MyAppService")
创建自己的类
import MSession
class AppAuthManager: AuthManager {
static let shared = AppAuthManager(service: "MyAppService")
...
}
要创建 AuthManager
实例,您需要提供一个 service
以及可选的 occupationGroup
service
:用于保存和恢复保存的账户和密码的标识符。occupationGroup
:一个访问组将在应用程序之间创建项。
不指定 occupationGroup
(访问组)将创建特定于每个应用程序的项。
AuthManager
可以分为两个部分
- 保存账户和密码(密钥链)
- 使用生物识别身份验证(面容/触控 ID)
保存账户和密码
AuthManager 提供了一些与密钥链交互以及保护用户账户和密码的功能。这些功能包括
open func deleteAllAccounts()
open func getSavedAccounts() throws -> [MAccount]
open func renameAccount(_ account: String, newAccount: String) throws
open func saveAccount(account: String, password: String, deleteOthers: Bool = false) throws
MAccount
是一个别名,它返回一个元组 account: String
和 password: String
生物识别身份验证
AuthManager 提供了一些使用 LAContext
与生物识别身份验证交互的功能。这些功能包括
public var biometryType: BiometryType
public var automaticallyBiometryAuth: Bool
open func biometryIsAvailable() -> Bool
open func biometryAuthentication(reason: String, completion: @escaping ((BiometryError?) -> Void))
LAContext
仅适用于 iOS 11 或更高版本,但您无需检查任何函数即可调用。MSession 会为您处理,但当然,如果您尝试在 iOS 10 上使用它,一些函数将返回错误。
贡献
如果您认为我们可以使 MSession 更加强大,请为这个项目做出贡献。让我们一起改进它,以帮助其他开发者。
提交一个合并请求或者在我们的 issues 中讨论一些内容。非常感谢。
作者
维托·梅希塔,[email protected]
许可证
MSession 在MIT许可证下可用。更多信息请参见LICENSE文件。