Как мне спроектировать и реализовать аутентификацию по паролю для IOS? - PullRequest
7 голосов
/ 22 августа 2011

У меня есть простая проблема, но я не могу найти решение.Я потратил часы, пытаясь найти пример, который показывает, как создать представление, позволить пользователю ввести пароль, аутентифицировать пароль и вернуть представление в назначенное представление.Я нашел много отличных ресурсов по кусочкам, но все они несколько расплывчаты в том, как аутентифицировать пароль и затем отправить пользователя в назначенное представление.

Похоже, это лучшее решение моей проблемы: у меня есть несколько PDF-файлов, которые мне нужно защитить паролем в приложении для iPad.

Ответы [ 4 ]

9 голосов
/ 22 августа 2011

Issue1: запрос имени пользователя и пароля

Представить вид модально. если комбинация имени пользователя и пароля верна, отклоните модальное представление. Кроме того, вы можете использовать предупреждение с текстовыми полями.

Issue2: безопасное хранение имени пользователя и пароля

Используйте цепочку для ключей, как предложено в другом ответе. Использование цепочки ключей так же просто, как использование NSUserDefaults с PDKeychainBindingsController от Carlbrown. Вы можете найти его по ссылке ниже

https://github.com/carlbrown/PDKeychainBindingsController

ИЗМЕНЕНО, чтобы добавить информацию, запрошенную в комментарии:

Предполагая, что вы используете настраиваемый контроллер представления для запроса входа в систему, вы должны сделать что-то подобное, когда вы хотите запросить пароль. это может быть в вашем приложении didFinishLaunchingWithOptions.

LoginViewController *controller = [LoginViewController alloc];
            [self presentModalViewController:controller animated:YES];
                        [controller release];

Затем в вашем LoginViewController вы должны сделать что-то вроде этого.

  PDKeychainBindings *keyChain =[PDKeychainBindings sharedKeychainBindings];
            if ([[keyChain objectForKey:@"User Name"] isEqualToString:userName] && [[keyChain objectForKey:@"Password"] isEqualToString:passWord] ) {
                [self dismissModalViewControllerAnimated:YES];
            }else {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ERROR" message:@"Wrong User Name and/or Password\nEnter Login Information Again"
                                                               delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
                [alert show];
                [alert release];
                  }

Обратите внимание, что строки userName и PassWord записываются из ваших текстовых полей в контроллере представления входа в систему.

4 голосов
/ 22 августа 2011

В ожидании вашего ответа на мой комментарий -

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

Я бы порекомендовал загрузить пример проекта Apple для примера хранения / извлечения данных из цепочки для ключей.

1 голос
/ 23 августа 2011

У Оливера на Cocoanetics.com есть очень хорошая реализация экрана безопасности, который использует Apple.Посмотрите на класс PinLockController в MyAppSales.

https://github.com/Cocoanetics/MyAppSales

Для хранения цепочки для ключей я использую SFHFKeychainUtils.Это простой вызов метода для хранения и восстановления безопасных паролей.Но я думаю, что стандартных NSUserDefaults будет достаточно для ваших нужд.

(удобный сайт http://gorgando.com/blog/tag/sfhfkeychainutils)

0 голосов
/ 22 августа 2011

Однако, если вы хотите продать это приложение, имейте в виду, что яблоко говорит

Пользователь может установить четырехзначный персональный идентификационный номер (ПИН) для предотвратить несанкционированное использование устройства, поэтому нет необходимости пользователь должен быть аутентифицирован и нет аутентификации или API авторизации в iPhone OS.

Это можно найти в

Инструкции по кодированию безопасности.
...