Мне нужно простое поведение:
- Пользователь запускает приложение.
- Пользователю предлагается ввести имя пользователя и пароль Facebook.
- При успешном входе в систему пользователь прошел аутентификацию для приложения и веб-сервера. Теперь на сервере есть пользователь, связанный с идентификатором Facebook. Все дальнейшие HTTP-запросы будут иметь cookie, которые аутентифицируются на веб-сервере.
Насколько я понимаю, с этим поведением связано несколько проблем.
Facebook
Вы не можете войти в систему программно, в соответствии с условиями обслуживания; вход в систему должен быть сделан через веб-сайт Facebook или SDK, оба из которых являются интерактивными. Поэтому я не могу создать свою собственную форму, передать имя пользователя и пароль на мой веб-сервер, войти в систему и ответить успешным набором файлов cookie.
Безопасность
Если пользователь входит в систему через приложение, они аутентифицируются только для приложения. Передача идентификатора Facebook на мой веб-сервер может быть осуществлена, но, учитывая, как легко найти идентификатор FB пользователя, было бы очень легко подделать сервер. Я подумал об автоматической генерации пароля в приложении, но это только уменьшает окно для подмены и не закрывает дыру полностью.
(На самом деле безопасность не имеет большого значения для моего проекта, но я не хочу оставлять такую очевидную дыру.)
Моя технология - iOS 3.0+ для мобильного приложения и Google App Engine для сервера, на котором установлена модифицированная версия Django.
Решение, которое я разработал, и которое, я считаю, работает вокруг ограничений, выглядит следующим образом:
- Пользователь запускает приложение.
- Приложение проверяет, аутентифицирован ли установленный в данный момент файл cookie на сервере.
- Если нет, откройте Safari через схему URL-адреса для реальной страницы на веб-сервере с возможностью входа через Facebook (или через любые другие системы аутентификации, которые я добавлю позже).
- Пользователь аутентифицируется, и сервер создает пользователя (при необходимости), связанного с идентификатором Facebook.
- После успешного входа сервер перенаправляет на страницу, которая вызывает схему URL мобильного приложения с идентификатором cookie в качестве параметра.
- Успех
Итак, мой вопрос: правильно ли я поступаю? Любые мои предположения неверны?