生物识别保险库

SwiftBlade iOS macOS CI

BiometricsVault 是一个适用于 iOS 和 macOS 的 Swift 6.0 包,它可以简化对生物识别登录的支持。

描述

场景 生物识别保险库
用户刚刚登录 跨应用启动在钥匙串上持久保存凭据
用户启用 FaceID/TouchID 使用生物识别保护凭据
用户禁用 FaceID/TouchID 删除凭据或在没有生物识别安全的情况下存储它们
应用由于安全原因被锁定 要求 FaceID/TouchID 验证并检索凭据
用户继续应用会话 要求 FaceID/TouchID 验证并检索凭据
用户注销 从钥匙串中删除凭据

要求

安装

Swift Package Manager

Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,并已集成到 swift 编译器中。

设置好 Swift 包后,只需将其添加到 Package.swiftdependencies 值或 Xcode 中的 Package 列表中,即可轻松地将 BiometricsVault 添加为依赖项。

dependencies: [
    .package(url: "https://github.com/ariskox/BiometricsVault.git", .upToNextMajor(from: "1.0.0"))
]

BiometricsVault 作为依赖项添加到您的目标

.product(name: "BiometricsVault", package: "BiometricsVault")

用法

没有 FaceID/TouchID

let vault = BiometricsVault<Credentials>(key: "biometrics_credentials")
try vault.enableKeychainVault(saving: credentials)
let vault = BiometricsVault<Credentials>(key: "biometrics_credentials")
switch vault.state {
case .keychainSecured(let credentials):
    // we can login the user, validate the token, or any other operation we'd like
default:
    break
}
let vault = BiometricsVault<Credentials>(key: "biometrics_credentials")
vault.resetEverything()

升级到 FaceID/TouchID

let vault = BiometricsVault<Credentials>(key: "biometrics_credentials")
try await vault.upgradeKeychainWithBiometrics()
let vault = BiometricsVault<Credentials>(key: "biometrics_credentials")
let savedCredentials = try await vault.unlockWithBiometrics()

使用凭据登录并使用 FaceID/TouchID 记住

重新验证设备所有者

switch error {
case let laError as LAError where laError.code == LAError.biometryLockout:
    let _ = try await vault.reauthenticateOwner()
default:
    break // do other stuff

示例

有关更多信息,请查看目录 Example 中的示例应用程序

状态

状态图

简单状态图

从设置启用 FaceID/TouchID 选项的简单登录流程如下

stateDiagram-v2
    [*] --> Ready
    Ready --> KeychainSecured: enableKeychainVault
    KeychainSecured --> ΒiometricsSecured: upgradeKeychainWithBiometrics
    ΒiometricsSecured --> Locked: lock
    Locked --> ΒiometricsSecured: unlockWithBiometrics
    ΒiometricsSecured --> Ready: disableBiometricsSecureVault
加载中

完整图表

stateDiagram-v2
    [*] --> Ready
    [*] --> Unavailable
    Ready --> ΒiometricsSecured: enableSecureVaultWithBiometrics
    ΒiometricsSecured --> Locked: lock
    Locked --> ΒiometricsSecured: unlockWithBiometrics
    Ready --> KeychainSecured: enableKeychainVault
    KeychainSecured --> Ready: resetEverything
    ΒiometricsSecured --> Ready: disableBiometricsSecureVault
    ΒiometricsSecured --> KeychainSecured: downgradeBiometricsToKeychain
    KeychainSecured --> ΒiometricsSecured: upgradeKeychainWithBiometrics
    Locked --> Ready: resetEverything
加载中

许可协议

BiometricsVault 在 MIT 许可证下发布。 有关详细信息,请参阅 LICENSE