2

Я проводил много времени, исследуя, как наилучшим образом реализовать аутентификацию пользователя из приложения Android на веб-сервере Rails. Я знаю, что есть механизмы, доступные для проверки подлинности на стороне Rails для меня, но то, что мне нужно, не очень сложно, и поэтому я думаю, что лучше всего написать собственный код аутентификации.Аутентификация для файла cookie или RESTful Key?

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

Поскольку для моего приложения требуются учетные записи пользователей, которые поддерживают свои собственные контексты, пользователям необходимо пройти аутентификацию при обращении к веб-серверу. Если бы я должен был реализовать это приложение полностью RESTful, я бы не занимался сессиями, и вместо этого требовал, чтобы приложение Android (клиентская сторона) передало учетные данные текущего пользователя (вероятно, единственный уникальный ключ, возвращаемый в приложение Android с веб-сервера при первом входе в систему) по каждому запросу. Это было бы приемлемым подходом, но я беспокоюсь о вычислительных издержках, которые могут возникнуть на стороне сервера.

Вот почему:

  • Глядя пользователь по длинной строке на каждый запросе для того, чтобы действовать на этом пользователь будет медленнее, чем иметь целочисленный идентификатор пользователя для соответствующей строки таблицы в Сеанс CookieStore.

  • Я, вероятно, не буду хранить аутентификацию RESTful ключ в виде простого текста в базе данных. Я бы, вероятно, использовал BCrypt и вместо этого сохранил соль и хэш для ключа. Это, конечно, приводит к вычислительным накладным расходам, которые эта пуля адресует: используя BCrypt для хеширования полученного ключа для каждого запроса для проверки хеша, хранящегося в базе данных.

Когда я в конце концов, требуется хостинг для сервера производства, я действительно не могу позволить себе платить за зверь, просто так, что я могу щеголять REST значок.

Предполагая, что типичный пользователь составляет 10-30 запросов в день, а количество пользователей зависит от популярности приложения (чего я не могу предсказать, но ради этого вопроса предположим, что он является средним), возможно ли реализовать аутентификацию RESTfully в моем конкретном случае? Другими словами, это вычислительные накладные расходы, которые он может создать, чтобы существенно увеличить требования к оборудованию для сервера?

Thanks

ответ

0

В моих проектах я обычно использую другой подход.

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

В основном я сделать что-то вроде этого:

key = User.id.to_s + SHA1::Digest.hexdigest("#{SECRET_KEY}#{User.id}#{User.name}#{User.created_at.to_i}")

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

  1. Нет требования хранить ключ на БД, как это может быть вычислено по требованию.
  2. Ключ вернулся к þér пользователю коротка (сеть выгода) и легко отправлять (потому что в ASCII, нет необходимости в Base64 или аналогичной)

Надеется, что это не помогает!

Смежные вопросы