【问题标题】:macOS Keychain Sharing Bypass Password DialogmacOS 钥匙串共享绕过密码对话框
【发布时间】:2019-04-21 06:54:42
【问题描述】:

我正在尝试构建一个在 macOS 上使用钥匙串共享的应用程序。但是当尝试访问钥匙串数据时,它会显示以下对话框。

这会造成非常糟糕的用户体验,用户必须输入他们的计算机密码才能使用应用程序。

我在 iOS 上没有遇到过这个问题。

如何绕过此对话框?所有的应用程序都是在同一个开发团队下签名的,所以我认为这应该不是问题。

【问题讨论】:

  • @Willeke 我的钥匙串密码与我的用户登录密码一致。所以这看起来不是问题。
  • 是每次都询问密码还是每次构建只询问一次?

标签: swift macos keychain


【解决方案1】:

来自同一开发者的应用不会自动共享对钥匙串项的访问权限;您必须明确设置某种共享策略。具体操作方式取决于项目是存储在 iCloud 钥匙串还是旧式钥匙串中。

对于 iCloud 钥匙串中的项目,您需要定义一个访问组,将您的应用程序添加到该组,并将您的钥匙串项目的 kSecAttrAccessGroup 属性设置到该组。有关详细信息,请参阅 Apple 开发文档 "Sharing Access to Keychain Items Among a Collection of Apps"

对于非 iCloud(旧式)钥匙串中的项目,您需要为每个项目定义一个访问控制列表,其中列出了应授予访问权限的每个应用程序以及访问权限的类型。有关详细信息,请参阅 Apple 开发文档 "Access Contr Lists"

注意:我认为问题中的对话框表示非 iCloud 钥匙串项目。如果您输入密码并单击“始终允许”,它将添加一个访问控制条目,授予该应用访问该项目的权限。您可以在 Keychain Access 实用程序中查看访问控制列表。

【讨论】:

  • 所以我意识到我应该使用 iCloud 钥匙串,但我没有。根据thisWe could not get the Keychain synchronization work on macOS.。不知道如何解决。但看起来我遇到了类似的问题。
【解决方案2】:

当使用新的钥匙串存储格式时,它也支持同步(iCloud 钥匙串)并且是 iOS 设备上唯一可用的存储格式,您只能通过钥匙串访问组或应用程序组共享钥匙串项目。当一个应用程序写入一个钥匙串项并且它属于这样一个组时,属于同一组的所有其他应用程序都可以读取它,而系统不会提示用户访问。

Apple 在此页面上详细记录了您需要了解的所有内容:

https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps

有关更多提示,另请参阅我关于此主题的以下回复:

https://stackoverflow.com/a/63728698/15809

当使用旧的 keychain 存储格式时,其项目不可同步,访问由 SecAccessRef 对象控制,该对象与每个 keychain 项目一起存储。有关详细信息,请参阅这些页面(尤其是图像非常有用):

https://developer.apple.com/documentation/security/keychain_services/access_control_lists

https://developer.apple.com/documentation/security/1393522-secaccesscreate

使用旧格式,您需要明确命名允许访问该项目的应用程序,并且您需要指定允许它们执行的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 2020-01-26
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多