Я успешно смог реализовать TouchID с помощью ключей, а также обмена ключей (синхронизировать элементы ключей между несколькими устройствами) отдельно. Когда я пытаюсь сделать их обоих, я получаю ошибку «-50», которая является неверными параметрами.
из кода ниже, на основе либо ksecattraccesscontrol или ksecattrsynchronicable , как и ожидалось. Возможности некоторых инструментов упрощения API для ключей, таких как uickeychainstore , кажется, что если я использую аутентификацию Touch ID, обмен ключами не сработает, и наоборот. Я ищу документацию Apple, в которой говорилось, но не смог бы ее найти. Ключ KSECATTRACTACIBLE может быть только тем, чье имя не заканчивается «ThisEdeCiceonly», поскольку они не могут синхронизировать с другим устройством ». Тем не менее, я не использую «thisEdeviceonly» (в настоящее время я использую ksecattraccessiblealways для целей тестирования)
Можете ли вы помочь указать, если и где Apple задокументировала это ограничение? Это помогло бы мне документировать это для записей и двигаться дальше. Спасибо. < /P>
- (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]];
});
}
Подробнее здесь: https://stackoverflow.com/questions/297 ... an-ios-app
Можно ли использовать аутентификацию Touch-ID и обмен ключами в приложении iOS? ⇐ IOS
Программируем под IOS
1748527699
Anonymous
Я успешно смог реализовать TouchID с помощью ключей, а также обмена ключей (синхронизировать элементы ключей между несколькими устройствами) отдельно. Когда я пытаюсь сделать их обоих, я получаю ошибку «-50», которая является неверными параметрами.
из кода ниже, на основе либо [b] ksecattraccesscontrol или ksecattrsynchronicable [/b], как и ожидалось. Возможности некоторых инструментов упрощения API для ключей, таких как [b] uickeychainstore [/b], кажется, что если я использую аутентификацию Touch ID, обмен ключами не сработает, и наоборот. Я ищу документацию Apple, в которой говорилось, но не смог бы ее найти. Ключ KSECATTRACTACIBLE может быть только тем, чье имя не заканчивается «ThisEdeCiceonly», поскольку они не могут синхронизировать с другим устройством ». Тем не менее, я не использую «thisEdeviceonly» (в настоящее время я использую ksecattraccessiblealways для целей тестирования)
Можете ли вы помочь указать, если и где Apple задокументировала это ограничение? Это помогло бы мне документировать это для записей и двигаться дальше. Спасибо. < /P>
- (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]];
});
}
Подробнее здесь: [url]https://stackoverflow.com/questions/29784266/is-it-possible-to-use-touch-id-authentication-and-keychain-sharing-in-an-ios-app[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия