Каков наилучший способ расширить restful_authentication / AuthLogic для поддержки отложенного входа в систему анонимного iPhone? - PullRequest
8 голосов
/ 09 декабря 2008

Я создаю приложение для iPhone, которое взаимодействует с бэкэндом Ruby on Rails. Приложение Ruby on Rails также будет обслуживать веб-пользователей. Плагин restful_authentication - отличный способ обеспечить быструю и настраиваемую аутентификацию пользователя. Однако я хотел бы, чтобы пользователи приложения iPhone имели учетную запись, автоматически созданную по уникальному идентификатору телефона ([[UIDevice device] uniqueIdentifier]), сохраненную в новом столбце. Позже, когда пользователи будут готовы создать имя пользователя / пароль, учетная запись будет обновлена, чтобы содержать имя пользователя и пароль, оставляя уникальный идентификатор iPhone без изменений. Пользователи не должны иметь доступ к веб-сайту до тех пор, пока не установят свое имя пользователя / пароль. Однако они могут использовать приложение iPhone, поскольку приложение может аутентифицировать себя, используя свой идентификатор.

Каков наилучший способ изменить restful_authentication для этого? Создать плагин? Или изменить сгенерированный код?

Как насчет альтернативных фреймворков, таких как AuthLogic. Как лучше всего разрешить айфонам получать сгенерированный токен авторизации, привязанный к их UUID, но затем позволить пользователю создать имя пользователя / пароль позже?

Ответы [ 4 ]

6 голосов
/ 14 декабря 2008

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

Вы должны относиться к идентификатору устройства аналогично имени пользователя - оно предназначено для идентификации, а не для аутентификации. Я предлагаю вам заставить пользователя выбрать пароль или, что еще лучше, автоматически сгенерировать случайный код, а затем отправить сначала идентификатор устройства + этот пароль / код, чтобы сначала зарегистрировать устройство, а затем впоследствии выполнить аутентификацию устройства.

Вы также можете поспорить, что у некоторых пользователей будет более одного устройства - либо они в конечном итоге заменит одно, либо вы получите кого-то вроде Стивена Фрая, который будет использовать 4 iPhone. Чтобы справиться с этим, я бы посоветовал вам найти способ создания экземпляра restful_authentication дважды, один раз для аутентификации пользователей и второй раз для аутентификации устройств. Я не использовал этот плагин, но я ожидаю, что вам просто нужно использовать разные параметры таблицы, чтобы это произошло. Тогда в логике вашего приложения разрешите пользователям связывать более одного устройства со своей учетной записью.

Чтобы сделать это безопасно, либо сделайте это с устройства, либо попросите устройство отобразить случайный код, который они затем вводят в веб-приложение, чтобы доказать, что они владеют устройством (это звучит более болезненно, чем сейчас - это тот же процесс что Apple использует в Itunes, Apple TV и в удаленном приложении - посмотрите, как они это делают - так что для пользователей это не будет удивительным).

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

0 голосов
/ 03 апреля 2010

Что вы думаете об использовании UDID и случайного пароля, сгенерированного с использованием UDID + соли, определенной по всему миру?

Что-то вроде:

salt = 'afG553Dvbf3'

udid = '1234567890'
pass = Digest::MD5.hexdigest(udid + salt)

И отправьте этот пароль на iPhone при следующем подключении.

0 голосов
/ 06 января 2009

Генерация случайного пароля в Rails текст ссылки Я использую плагин Restful_authentication для одного из моих проектов. В рамках моего рабочего процесса создания пользователей система должна сгенерировать случайный пароль для нового пользователя.

0 голосов
/ 09 декабря 2008

Вы пытались использовать другую схему аутентификации, например Authlogic ? Я нашел restful_authentication довольно навязчивым (хотя я обманул, используя bort ).

...