LINUX.ORG.RU

Tokenы

 , ,


1

3

Приветствую! Пишу небольшой pet project (RESTful API) для веба (в будущем возможно и мобильное приложение) и хочу для аутентификации использовать token'ы. Хотелось бы обратиться за разъяснением некоторых вопросов:

  1. Как хранят сгенерированный токен? в БД? Правильно ли я понимаю, что это отдельная таблица например tokens, в которой сам токен (sha1|md5|etc) hash, id пользователя которуму этот токен принадлежит и столбец expire_date (нужен ли он вообще)? Или это можно добавить в таблицу users?
  2. Когда пользователь зарегался впервые и сервер вернул сгенеренный токен, где его необходимо хранить? в кукисах?
  3. Хотелось бы еще спросить про то, как организовать правильнее urlы, можно ли через GET /users отдавать форму регистрации пользователя, а не как рекомендуется везде списко пользователей? Понятно что RESTful это не стандарт, но может есть какой-нибудь общий принцип для организации urlов. Глянул в API твиттора, пейсбука, там очень много и непонятно, по крайней мере на данный момент.

Как хранят сгенерированный токен?

Как хранить это уже второй вопрос. Можете хоть в БД, хоть в Memcached/Redis/etc. Это не так важно. Важно обеспечить безопасность.
Как минимум HTTPS, дабы избежать элементарного mitm.

этот токен принадлежит и столбец expire_date (нужен ли он вообще)

Обязательно нужно давать возможность запрашивать время жизни клиенту самостоятельно, повышаете безопасность через своих же клиентов. Но и не забудьте дать возможность выдавать «неограниченные» токены определенной, «доверенной» группе лиц.

Когда пользователь зарегался впервые и сервер вернул сгенеренный токен, где его необходимо хранить? в кукисах?

Нет, конечно же, RESTful и cookie - понятие несовместимые. Во-первых, зачем вы собрались генерировать и отдавать токен после регистрации? Токен вы будете отдавать при аутентификация на запрос пользователя. Придерживайтесь нескольких простых правил при отправке токена:

  • не используйте HTTP basic auth, если не уверены что абонент, запрашивающий токен сможет безопасно его хранить.
  • во всех остальных случаях, используйте oauth2 bearer tokens, либо с помощью параметризации в URL, тут уже как вам удобно будет.

Ну и самые элементарные вещи - никаких сессий, верные коды состояний (например, 401 Unauthorized при ошибки аутентификация) и т.д. и т.п.
И вот только после того как все условия выполнены, и клиент был успешно аутентифицирован, можете смело приступать к авторизации :)

Хотелось бы еще спросить про то, как организовать правильнее urlы, можно ли через GET /users отдавать форму регистрации пользователя

На последний вопрос вообще не смогу вам ответить. Какая форма регистрации через RESTful?

znenyegvkby
()

Или это можно добавить в таблицу users?

У юзера может быть несколько одновременно выданных токенов, если сервис не запрещает использование с нескольких устройств одновременно. Делать это в некоей таблице users было бы достаточно неудобно.

risenshnobel ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.