Сбросить брелок на устройстве
Я тестирую поток входа в систему (использую KeychainItemWrapper
) внутри моего приложения на устройстве. Как сбросить / удалить связку ключей для моего приложения?
На симуляторе я делаю это, нажимая на iOS Simulator -> Сбросить содержимое и настройки....
4 ответа
Элементы цепочки для ключей находятся в песочнице iOS, у пользователей нет доступа, чтобы удалить ненужный элемент цепочки для ключей. Они доступны только через API.
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:[[NSBundle mainBundle] bundleIdentifier] accessGroup:nil];
// или как вы получаете доступ к своей цепочке для ключей
[keychainItem resetKeychainItem];
или вы можете сбросить настройки устройства >> в меню "Настройки устройства", "Основные", "Сбросить", "Сбросить все настройки". Но он сбросит связку ключей для каждого приложения, установленного на устройстве.
- Скачайте и добавьте keychainWrapper отсюда в ваш проект.
- Напишите следующий код в viewController, который вы хотите сбросить связку ключей.
КОД:
#import "KeychainItemWrapper.h"
@interface YourViewController ()
{
KeychainItemWrapper *keychainItemWrapper;
}
- (void)viewDidLoad {
[super viewDidLoad];
keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"appname" accessGroup:nil];
}
- (IBAction)logoutButtonPressed:(id)sender {
[keychainItemWrapper resetKeychainItem];
}
Вы можете сбросить данные цепочки для ключей, используя дампер Keychain. Возьмите следующую ссылку https://github.com/ptoomey3/Keychain-Dumper
Просто перейдите по этому URL, скачайте zip-файл и разархивируйте его. Внутри этой папки единственный интересующий нас файл - это двоичный файл keychain_dumper. Информация, доступ к которой разрешен приложению в цепочке для ключей, указана в ее правах. Этот двоичный файл подписан самозаверяющим сертификатом с подстановочными правами и, следовательно, он может получить доступ ко всем элементам цепочки для ключей. Могли бы быть и другие способы обеспечить предоставление всей информации о цепочке ключей, например, наличие файла разрешений, содержащего все группы доступа цепочки для ключей, или использование определенной группы доступа цепочки для ключей, которая обеспечивает доступ ко всем данным цепочки для ключей. Например, инструмент Keychain-Viewer использует следующие права.
com.apple.keystore.access-брелок-ключи
com.apple.keystore.device
1) Просто загрузите этот двоичный файл на ваше устройство в папке /tmp и убедитесь, что он исполняемый.
2) Теперь убедитесь, что файл базы данных цепочки для ключей, хранящийся в каталоге /private/var/Keychains/keychain-2.db, доступен для чтения всем пользователям.
3) Теперь перейдите в терминал, и вы можете сбросить данные, передав команду
.keychain_dumper
4) Команда, приведенная выше, перечислит все имя пользователя и пароль. но выше только выкинет общие и интернет-пароли. Вы можете просмотреть информацию об использовании с помощью команды "-h".
5) Вы можете сбросить всю информацию, используя команду "-a".
Вы можете прочитать больше информации и пример здесь сбрасывая данные цепочки для ключей
Мне нужно было стереть все пользовательское хранилище для моего приложения, поэтому я использовал это:
NSMutableDictionary *storage = [[NSMutableDictionary alloc] init];
[storage setObject:"myService" forKey:(__bridge id)kSecAttrService];
[storage setObject:["myAccount" dataUsingEncoding:NSUTF8StringEncoding] forKey:(__bridge id)kSecAttrAccount];
// Possibly other attributes e.g.
[storage setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
[storage setObject:["somethingCustom" dataUsingEncoding:NSUTF8StringEncoding] forKey:(__bridge id)kSecAttrGeneric];
OSStatus status = SecItemDelete((CFDictionaryRef)storage);
// Handle status
// ...