iOS钥匙串-LAContext.setCredential(data,.applicationPassword)在模拟器上返回false

时间:2018-11-16 15:50:27

标签: ios swift keychain

我正在尝试使用“ applicationPassword”来保护用户存储在钥匙串中的数据。

一切都可以在真实设备上完美运行,但不幸的是,模拟器上的所有功能都无法正常工作。

为了入门,我有一个非常基本的代码来设置applicationPassword。

let authenticationContext = LAContext()
let applicationPassword = "123".data(using: .utf8)
let result = authenticationContext.setCredential(applicationPassword, type: .applicationPassword)
print(result)

setCredential的调用在真实设备上返回true,在模拟器上返回false

请帮助:-)

如果Simulator不支持此功能,则它实际上不是可行的解决方案。

这是Apple的文档,供参考:

https://developer.apple.com/documentation/localauthentication/lacontext/1514168-setcredential

1 个答案:

答案 0 :(得分:0)

似乎applicationPassword与设备的系统密码一起使用。

因此applicationPassword不适用于:

  • 模拟器(无法设置系统密码)
  • 没有设置系统密码的真实设备

我已经从以下来源确定了这些信息:


WWDC 2015 - Session 706 - Security & Your Apps(请参见视频的43:23左右)

解说词:https://asciiwwdc.com/2015/sessions/706?q=applicationpassword

  

现在,让我们看一个受ApplicationPassword保护的项目。

     

仅设备密码不再足够。

     

您的应用程序还必须提供自己的密码。

     

同样,我们从中派生一个加密密钥,只有当   设备密码和应用密码都存在,表示访问权限为   授予钥匙串项目。


https://nabla-c0d3.github.io/blog/2015/06/16/ios9-security-privacy/

  

钥匙串项目现在可以使用设备的密码进行加密   和“应用密码”;然后需要两个值来解密   并检索该项目。这使Apps可以控制何时将数据   可访问/解密,而不是尽快将数据解密   设备已解锁。


https://macbirdie.net/2016/03/app-pwd

  

另一个有趣的新功能是使用   应用程序提供的密码,这是   设备解锁PIN或密码。

     

密码可以来自用户,也可以来自会话706   主持人建议,可以是   服务器或与手机相连的设备中保存的机密信息。

     

此安全方案要求至少存在一个设备密码,   因为它与它协同工作。因此,这不是   可以在iOS模拟器上对其进行测试,这使得开发   支持它有点困难,因为添加钥匙串项时   以这种方式进行保护,甚至不需要实际密码即可检索   它。


可惜的是,苹果自己的文件似乎都没有提到这一点: