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

StackOverflow https://stackoverflow.com/questions/351627

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

salt = 'afG553Dvbf3'

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top