问题描述
背景
我正在尝试构建一个使用本地IKEv2实现连接到VPN的应用。该应用程序应为iOS构建,但也可以通过使用Catalyst平台在macOS上运行。
情况
在iOS / macOS中使用本地IKEv2实现连接到VPN时-要使用用户名和密码身份验证,应用必须将持久性钥匙串引用传递给包含密码的钥匙串项。 (Reference)
问题
在iOS上,它可以完美运行,但是在Catalyst平台上启动VPN连接时,VPN服务无法使用给定的持久引用来检索密码。控制台打印:
[] (null): Failed to copy content,SecKeychainItemcopyContent returned The contents of this item cannot be retrieved.
钥匙串项存储在钥匙串中,持久引用不是nil
,但是由于某种原因,操作系统的VPN服务无法检索密码。
如果我尝试使用相同的持久引用来检索密码-一切都会按预期进行,并且会检索到密码。
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平台上从钥匙串检索持久引用时,也许应该添加一些标志?