可以使用设备密码对 iOS 应用程序的用户进行身份验证吗?

Posted

技术标签:

【中文标题】可以使用设备密码对 iOS 应用程序的用户进行身份验证吗?【英文标题】:Is it OK to use device passcode to authenticate user to an iOS app? 【发布时间】:2020-05-08 05:18:20 【问题描述】:

我正在为我的应用添加用户身份验证支持。唯一的要求是用户应该是设备的所有者(应用程序不访问远程服务,也不需要访问钥匙串中的密钥)。

我已阅读 LocalAuthentication 框架文档并进行了实验。我知道调用LocalAuthentication API 以首先使用触摸/面部 id 对用户进行身份验证在技术上是可行的,如果失败则回退到要求用户输入设备密码

但是,在我使用过的所有 ios 应用程序中,我从未见过像这样对用户进行身份验证的应用程序(我的意思是,使用 设备密码)。当我在这些应用程序中启用触摸/面部身份验证时,他们都要求我首先设置一个较短且几乎从未使用过的应用程序特定密码,在我看来这不仅不方便而且不安全。我想知道他们为什么不只使用设备密码? Apple Store 中是否有不允许这样做的政策?我的应用会因为这样做而被拒绝吗?感谢您的任何解释。

更新

根据this article,使用keychain比使用LocalAuthentication更安全,因为前者是系统级组件,后者是应用层组件。但是,文章建议在访问钥匙串中的项目时使用设备密码,而不是应用程序特定密码

开发人员在钥匙串上设置访问控制至关重要,这样当用户尝试检索安全项目时,他们必须使用设备密码进行身份验证(因此,启用时需要面容 ID)。

【问题讨论】:

我在谷歌上搜索过这个问题,除了这个:***.com/questions/46030483/…,没有找到任何关于这个主题的讨论,很遗憾,这没有帮助。 我不希望你有任何问题。这就是本地身份验证框架的用途。其他应用程序可能让您存储另一个引脚的原因是,他们可以将其存储在钥匙串中,并设置一个在生物特征发生变化时将其删除(例如,有人添加了指纹或外观)。这样,如果有人试图将他们的生物识别信息添加到您的手机(无论如何都需要密码),PIN 码将失效,并且他们将无法自动访问该其他应用程序。 嗨@Paulw11 感谢您的重播。你指的是kSecAccessControlApplicationPassword标志,它用于保护钥匙串中的钥匙吗?知道这一点很有趣(直到你提到它,我才意识到这一点。谢谢)。但我怀疑我手机上的 iOS 应用程序(例如 Microsoft onedrive)以这种方式使用特定于应用程序的密码,因为尽管这些应用程序确实将密钥或密码保存在钥匙串中,但它们在检索密钥时从不提示我输入特定于应用程序的密码.该密码的唯一用途是在我打开应用程序时,但这是可选的,因为使用触摸/面部 ID 就足够了。 不过,我认为您的回答非常有帮助。您认为这些应用程序开发人员是否有可能滥用该功能或​​只是遵循不再有意义的过时约定?如果您愿意,请随时使用该提交创建答案。我想给你声望点:) OneDrive 和其他 Microsoft 应用程序对 pin 码的使用略有不同; Microsoft 应用可以由 InTune 管理,并且 PIN 码用作额外的加密密钥 【参考方案1】:

现在我已经在 App Store 中发布了我自己的应用程序,我想我可以对我的问题给出一个明确的答案。我实际上问了两个问题:

    是否可以使用设备密码向 iOS 应用程序验证用户身份?

答:是的。我在我的应用中执行此操作,该应用已被 App Store 接受。

    为什么大多数(如果不是全部)应用都会引入应用专用密码?

A:我对此不是 100% 确定的。我认为一些应用程序这样做是因为它们将用户凭据保存在钥匙串中,并希望使用特定于应用程序的密钥代码来保护这些数据。然而,对于其他应用程序,我怀疑它们不会使用特定于应用程序的代码。

【讨论】:

以上是关于可以使用设备密码对 iOS 应用程序的用户进行身份验证吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以仅使用密码进行身份验证,即使设备在 ios 中具有 touch id 功能,swift

使用 Devise 从 Rails 上的 json api 进行身份验证

验证移动设备

是否可以使用用于登录的 ssh 密钥在第三方应用程序中对用户进行身份验证?

即使在注销后,适用于 iOS 应用程序的 ADAL for .NET 也可以对以前的用户进行身份验证

使用自定义用户名/密码对 WooCommerce API 进行身份验证