2013-09-18 7 views
10

Я начинаю с Laravel 4 framework и PHP.Реализовать токен для Laravel 4 RESTful API-аутентификация

В настоящее время я пытаюсь выполнить простой процесс аутентификации между клиентским приложением и сервером.

Ниже мой планируемый подход:

  1. Клиент регистрируется в сервере с помощью запроса GET с именем пользователя и паролем.

  2. Сервер проверяет и возвращает строку токена в случае успеха. Строка токена будет закодирована (hashed?) С именем пользователя, паролем и временем истечения.

  3. Клиент отправляет запрос, включая указанный токен. Сервер будет проверять токен (декодировать его -> проверить имя пользователя/пароль и истекшее время). В случае успеха он обработает запрос клиента.

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

Спасибо, и я ценю ваше время и помощь.

+0

Если вы передаете имена пользователей и пароли с каждым запросом, вы можете рассмотреть возможность использования нескольких солей/шифров. Вы можете посмотреть библиотеки laravel, но с чистой точки зрения PHP вы можете посмотреть новый набор функций password_hash, встроенный в PHP 5.5, по адресу http://php.net/manual/en/book.password.php и его библиотечную совместимость для PHP 5.3.7+ по адресу https://github.com/ircmaxell/password_compat –

ответ

11

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

Вы можете хранить записи о каждом входе в таблицу с колонками token, user_id, valid_until. После каждого запроса найдите токен в базе данных, проверьте, действительно ли он действителен, и используйте для проверки подлинности user_id.

Вы можете думать о токенах как о единовременном пользователе и пароле, например. рассмотрите первые 8 символов токена как временного имени пользователя, а остальное как пароль, если вам неловко рассказать о доступе без пароля :)

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

+3

Разве это не нарушало бы принцип, согласно которому REST должен быть без гражданства? – cjol

+0

Согласен auth @Hephistocles, REST не имеет гражданства. Было бы лучше отправить имя пользователя и пароль или ключ в заголовках HTTP, если требуется аутентификация. –

1

Вы можете использовать тестеры JWT JSON для аутентификации, чтобы полностью исключить сеансы и файлы cookie. Подобный подход используется Facebook. Как только вы входите в систему с помощью электронной почты и pwd, вы получаете сетевой токен, поэтому даже если его взломали, вы не сможете получить из него pwd. Вы можете установить срок для истечения срока действия маркера.

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