Аутентификация пользователей в приложении iPhone - PullRequest
11 голосов
/ 15 мая 2010

Я разрабатываю HTTP API для нашего веб-приложения. Первоначально основным потребителем API будет приложение для iPhone, которое мы разрабатываем, но я разрабатываю его с учетом будущего использования (например, мобильных приложений для других платформ). Я пытаюсь выбрать лучший способ аутентификации пользователей, чтобы они могли получить доступ к своим учетным записям с iPhone. У меня есть дизайн, который, как мне кажется, работает хорошо, но я не эксперт по безопасности, поэтому я подумал, что было бы хорошо попросить обратную связь здесь.

Дизайн аутентификации пользователя имеет 3 основных цели:

  1. Хороший пользовательский опыт : мы хотим разрешить пользователям вводить свои учетные данные один раз и оставаться в системе неограниченное время до тех пор, пока они явно не выйдут из системы. Я бы рассмотрел OAuth, если бы не тот факт, что приложение для iPhone довольно ужасно, из того, что я слышал (т. Е. Оно запускает форму входа в Safari, а затем говорит пользователю вернуться в приложение, когда аутентификация прошла успешно) .
  2. Нет необходимости хранить пользовательские кредиты с приложением : я всегда ненавижу идею хранить пароль пользователя в виде простого текста или симметрично зашифрованного в любом месте, поэтому я не хочу, чтобы приложение имело сохранить пароль для передачи его в API для будущих запросов API.
  3. Безопасность : Нам определенно не нужна строгая безопасность банковского приложения, но я бы, очевидно, хотел, чтобы это было безопасно.

В целом, API основан на REST (то есть обрабатывает URL-адреса как ресурсы и семантически использует методы HTTP и коды состояния). Каждый запрос к API должен включать два пользовательских заголовка HTTP: ключ API (уникальный для каждого клиентского приложения) и уникальный идентификатор устройства. API требует, чтобы все запросы выполнялись с использованием HTTPS, чтобы заголовки и тело были зашифрованы.

Текущая стратегия:

Мой план состоит в том, чтобы в моей базе данных была таблица api_sessions . Он имеет уникальное ограничение на ключ API и уникальный идентификатор устройства (так что устройство может быть зарегистрировано только в одной учетной записи пользователя через данное приложение), а также внешний ключ к таблице пользователей.

API будет иметь конечную точку login , которая получает имя пользователя / пароль и, если они соответствуют учетной записи, регистрирует пользователя, создавая запись api_sessions для данного ключа API и идентификатора устройства. Будущие запросы API будут искать api_session, используя ключ API и идентификатор устройства, и, если запись найдена, обрабатывать запрос как входящий в систему под учетной записью пользователя, на которую ссылается запись api_session.

Также будет конечная точка API logout , которая удалит запись из таблицы api_sessions.

Кто-нибудь видит в этом очевидные дыры в безопасности?

1 Ответ

1 голос
/ 16 мая 2010

Я согласен с комментариями oAuth - вы, конечно, можете сделать так, чтобы oAuth хорошо работал на iPhone - UX полностью зависит от вас.Существуют механизмы (jQuery) для извлечения PIN-кода из oAuth и его использования (без повторного ввода PIN-кода пользователем в приложении).Это уменьшает UX до

1) Отображение веб-страницы (во встроенном элементе управления) 2) пользователь вводит пользователя и пароль и нажимает кнопку 3) Страница ответа oAuth анализируется автоматически.

Этот твиттер oAuth implmentationделает это http://github.com/bengottlieb/Twitter-OAuth-iPhone, используя уже существующую библиотеку oAuth.

Однако вернемся к исходному вопросу.Это выглядит хорошо.Единственный элемент, который вы не упомянули, - это то, что вам нужно предоставить механизм веб-приложения, чтобы позволить пользователю выйти из системы / деавторизовать сеанс устройства (в случае, если он потерял свое устройство).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...