[英]Is it possible to use Touch-ID Authentication AND Keychain sharing in an iOS app?
我已经成功地分别使用钥匙串和钥匙串共享(在多个设备之间同步钥匙串项)来实现TouchID。 当我尝试同时执行它们时,我收到错误“-50”,这是无效参数。 从下面的代码中,删除kSecAttrAccessControl或kSecAttrSynchronizable按预期工作。
根据我的经验(阅读 - 几天的挫折)到目前为止,并基于一些钥匙串API简化工具(如UICKeychainStore)的功能 ,似乎如果我使用Touch ID身份验证,钥匙串共享将无法工作,反之亦然。 我正在寻找可以说明但无法找到它的Apple文档。
我已经浏览了Apple的SecItem.h页面,我找到了一个有用的信息,其中包含有关kSecAttrAccessible和kSecAttrSynchronizable的信息 :“如果在OS X或iOS上都指定了这两个属性,则kSecAttrAccessible密钥的值可能只是其名称之一不会以“ThisDeviceOnly”结尾,因为那些不能同步到另一台设备。“但是,我没有使用”ThisDeviceOnly“(我目前正在使用kSecAttrAccessibleAlways进行测试)
您能否指出Apple是否以及在何处记录此限制? 这将有助于我记录它的记录,并继续前进。 谢谢。
- (void)addKeychainItemWithIdentifier:(NSString *)identifier andData:(NSData *)data {
CFErrorRef error = NULL;
SecAccessControlRef sacObject;
sacObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleAlways,
kSecAccessControlUserPresence, &error);
if(sacObject == NULL || error != NULL)
{
NSString *msg0 = [NSString stringWithFormat:NSLocalizedString(@"SEC_ITEM_ADD_CAN_CREATE_OBJECT", nil), error];
[self printResultWithMessage:msg0];
return;
}
NSDictionary *attributes = @{
(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
(__bridge id)kSecValueData: data,
(__bridge id)kSecAttrAccessible:(__bridge id)kSecAttrAccessibleAlways,
(__bridge id)kSecAttrService: identifier,
(__bridge id)kSecAttrSynchronizable:(__bridge id)kCFBooleanTrue,
(__bridge id)kSecAttrAccessControl: (__bridge_transfer id)sacObject
};
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
OSStatus status = SecItemAdd((__bridge CFDictionaryRef)attributes, nil);
NSError *statuserror = [NSError errorWithDomain:NSOSStatusErrorDomain code:status userInfo:nil];
[self printResultWithMessage:[self keychainErrorToString:status]];
});
}
我想我可能已经找到了答案
在WWDC 2014视频711中,在31:48提到以下内容
ACL受保护的项目 - 无同步,无备份
因此,Touch ID身份验证不能用于设备之间的Keychain Sharing,因为这些项目是“仅设备”
这个示例项目可能会有所帮助,标题是KeychainTouchID:使用Touch ID和Keychain以及LocalAuthentication :
https://developer.apple.com/library/ios/samplecode/KeychainTouchID/Introduction/Intro.html
这可能仅限于本地,不分享。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.