代码之家  ›  专栏  ›  技术社区  ›  Oliver Pearmain

ios keychain-lacontext.setcredential(data,.applicationpassword)在模拟器上返回false

  •  0
  • Oliver Pearmain  · 技术社区  · 6 年前

    我试图使用“applicationpassword”来保护用户存储在密钥链中的数据。

    每件事都在 真实装置 但不幸的是,在模拟器上一切都不起作用。

    为了开始,我有这个非常基本的代码来设置applicationpassword。

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

    对…的呼唤 setCredential 回报 true 在真正的设备上但是 false 在模拟器上。

    请帮忙:-)

    如果模拟器不支持这一点,那么它就不是一个真正可行的解决方案。

    以下是苹果的文档,供参考:

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Oliver Pearmain    6 年前

    看来 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/

    现在可以使用两个设备的密码对密钥链项进行加密 然后需要一个“应用程序密码”和两个值来解密 然后取回物品。这允许应用程序控制数据何时 可访问/解密,而不是在 设备已解锁。


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

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

    密码可以来自用户,也可以作为会话706s 演示者建议,可以是 服务器或保存在与电话连接的设备上的秘密。

    此安全方案至少需要存在设备密码。 因为它和它一起工作。因此,它不是 可以在ios模拟器上测试它,这使得开发 对它的支持有点困难,因为当您添加一个keychain项时 通过这种方式进行保护,甚至不需要实际的密码来检索 它。


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