macOS 催化剂上钥匙串项目的 PersistentRef

Posted

技术标签:

【中文标题】macOS 催化剂上钥匙串项目的 PersistentRef【英文标题】:PersistentRef of keychain item on macOS catalyst 【发布时间】:2021-02-11 16:51:40 【问题描述】:

背景

我正在尝试构建一个使用本机 IKEv2 实现连接到 *** 的应用。该应用程序应为 ios 构建,但也应使用 Catalyst 平台在 macOS 上运行。

情况

在 iOS/macOS 中使用本机 IKEv2 实现连接到 *** 时 - 要使用用户名和密码身份验证,应用程序必须将持久钥匙串引用传递给包含密码的钥匙串项。 (Reference)

问题

在 iOS 上它运行良好,但在 Catalyst 平台上启动 *** 连接时,*** 服务无法使用给定的持久引用检索密码。控制台打印:

[] (null): Failed to copy content, SecKeychainItemCopyContent returned The contents of this item cannot be retrieved.

钥匙串项存储在钥匙串中,持久引用不是nil,但由于某种原因,操作系统的***服务无法检索密码。

如果我尝试使用相同的持久引用检索密码 - 一切都按预期工作,并且密码被检索。

let query: [String: Any] = [
    kSecClass as String: kSecClassGenericPassword,
    kSecAttrPersistentReference as String: persistentRef,
    kSecReturnData as String: true
]
        
var item: CFTypeRef?
let status = SecItemCopyMatching(query as CFDictionary, &item)

任何信息将不胜感激。将密码保存到钥匙串时可能应该添加一些标志?在 Catalyst 平台上从钥匙串中检索持久引用时,也许应该添加一些标志?

【问题讨论】:

嗨!你找到解决办法了吗? 嗨。不,我没有。似乎 Catalyst 还没有完全发挥作用,所以我暂时放弃了这个主题。但是,如果您找到任何有价值的信息 - 请分享,这将非常有价值。 谢谢,我们决定放弃尝试并创建一个新的 macOS 目标... 【参考方案1】:

我直接通过苹果的反馈支持问了这个问题,得到的答案是:

【讨论】:

以上是关于macOS 催化剂上钥匙串项目的 PersistentRef的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio Code 上调试 Flutter 应用程序时如何停止 MacOS 上的“钥匙串访问”权限对话框?

使用用户 _www 或守护进程设置 macOS 钥匙串搜索列表

使用无人值守的 xcodebuild 管理钥匙串以协同设计 macOS / iOS 应用程序

有没有一种快速简便的方法来转储 MacOS X 钥匙串的内容?

有没有办法让 Firefox 与 macOS 钥匙串一起工作?如果不是很好的替代密码管理器?

macOS 存取keychain 密码