使用 Apple Touch ID 登录外部数据库

Use Apple Touch ID for login with external database

我在 Swift 中有一个 iOS 应用程序,它是一个小型社交网络。用户可以连接 login/password 我保存在私人服务器上的数据库中。我想实现 TouchID 以帮助他们更快地登录。但是,我用户的帐户没有链接到他们的 Apple ID。

// Touch ID button has been clicked
func touchIDButtonClicked() {
    print("touchIDButtonClicked");

    //Is Touch ID hardware available & configured?
    if(authContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error:&error))
    {
        //Perform Touch ID auth
        authContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "Connect to the network with your fingertips", reply: {(wasSuccessful:Bool, error:NSError?) in

            if(wasSuccessful)
            {
                //User authenticated
                print("OK");
                // Log the user
            }
            else
            {
                //There are a few reasons why it can fail, we'll write them out to the user in the label
                print("NO");
               // Tell the user to use his password
            }

        })

    }
}

我寻找的是概念解决方案,而不是技术解决方案。我已经研究过 TouchID。有人可以帮助我吗?

鉴于用户名在您的数据库中是唯一的,您应该信任 TouchId 并仅通过用户名登录...顺便说一下,这就是我的家庭银行应用程序至少在低风险、非支付、功能方面的工作方式

经过一番思考后,我意识到在您不实施一些额外的架构机制以确保登录来自您的应用程序之前,我根本不确定

一个好的解决方案是使用 identifierForVendor 在用户名、应用程序和设备之间建立强关联,方法是将其存储在数据库中并在登录时检查它

Touch ID 不能识别一个人(它不能告诉你是用户 1 还是用户 2)。它验证一个人(phone 的所有者)。

所以不能单独使用Touch ID登录。您可以使用它来避免输入相同的凭据。

所以它会像这样工作:

  1. 第一次,用户名和密码,按常规登录
  2. 询问用户是否愿意在以后使用 Touch Id 进行访问。如果是这样,请安全地存储用户 ID 和密码(或者更好的是,引用用户的令牌)。
  3. 然后,在后续使用该应用程序时,不询问用户 ID 和密码,只询问 Touch ID,如果可以,则重新使用已保存的凭据。否则返回 1.