Не восстанавливайте пароли, вставленные в проблему брелка iOS - PullRequest
0 голосов
/ 22 сентября 2011

Я занимаюсь разработкой приложения для iPad2, которому нужно написать некоторые элементы в связке ключей, но я не хочу, чтобы оно копировалось на каждом подключаемом компьютере, выполняя резервное копирование / восстановление устройства. Я использую ключ kSecAttrAccessible, чтобы выбрать вид доступа, который я хочу, со значением kSecAttrAccessibleWhenUnlockedThisDeviceOnly, чтобы быть уверенным, что если я сделаю резервную копию всех вещей, находящихся на устройстве, цепочка для ключей не будет присутствовать в этой резервной копии.

Итак, я поступаю следующим образом: я сбрасываю цепочку для ключей, вставляю элемент в цепочку для ключей и выгружаю все содержимое цепочки для ключей, так что я вижу, что этот элемент есть. Затем я делаю резервную копию iPad. Я сбрасываю цепочку для ключей и восстанавливаю резервную копию, поэтому в цепочке для ключей не должно быть ключей, если процедура восстановления не связана с цепочкой для ключей. В следующий раз, когда я запускаю приложение, я сбрасываю содержимое цепочки для ключей, и ключ там, так что он не работает так, как должен. Я использую iphone-lib (http://code.google.com/p/iphone-lib/) для сброса и сброса учетных данных на моем iPad. Моя версия SDK 4.3.

Код, который я использую для вставки предмета в цепочку для ключей, следующий:

NSMutableDictionary *dic = [NSMutableDictionary dictionary];
NSData* identifier = [@"mypassword" dataUsingEncoding: NSASCIIStringEncoding];
[dic setObject:(id)kSecAttrAccessibleWhenUnlockedThisDeviceOnly forKey:(id)kSecAttrAccessible];
[dic setObject:identifier forKey:(id)kSecAttrGeneric];
[dic setObject:@"myaccount" forKey:(id)kSecAttrAccount];
[dic setObject:@"myservice" forKey:(id)kSecAttrService];
[dic setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass];
[dic setObject:identifier forKey:(id)kSecValueData];
OSStatus error = SecItemAdd((CFDictionaryRef)dic, NULL);

Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 декабря 2014

kSecAttrAccessibleWhenUnlockedThisDeviceТолько может быть причина.
Можете ли вы попробовать что-то еще?

например.kSecAttrAccessibleWhenUnlocked

0 голосов
/ 22 сентября 2011

Есть два замечательных примера (с рабочим примером кода) от Apple, которые помогли мне понять, как работает сервис связки ключей на iOS. Я предлагаю вам взглянуть на них и надеюсь, что они помогут вам решить вашу проблему:

  1. Универсальная цепочка для ключей : В этом примере показано, как добавлять, запрашивать, удалять и обновлять элемент цепочки для ключей универсального типа класса. Также демонстрирует использование общих элементов цепочки для ключей. Все классы демонстрируют очень похожее поведение, поэтому включенные примеры будут масштабироваться для других классов элемента цепочки для ключей: Интернет-пароль, Сертификат, Ключ и Идентификация.
  2. AdvancedURLConnections : В этом примере демонстрируются различные передовые сетевые технологии с NSURLConnection. В частности, он демонстрирует, как реагировать на проблемы аутентификации, как изменить оценку доверия сервера по умолчанию (например, для поддержки сервера с самозаверяющим сертификатом) и как предоставить идентификационные данные клиента.
...