10

我是 Laravel 4 框架和 PHP 的初学者。

目前,我正在尝试在客户端应用程序和服务器之间进行简单的身份验证过程。

以下是我计划的方法:

  1. 客户端通过 GET 请求使用用户名和密码登录到服务器。

  2. 如果成功,服务器将验证并返回一个令牌字符串。令牌字符串将使用用户名、密码和到期时间进行编码(散列?)。

  3. 客户端提交一个请求,包括给定的令牌。服务器将验证令牌(解码它 -> 检查用户名/密码和过期时间)。如果成功,它将处理客户端的请求。

使用给定的上述参数生成令牌并在服务器端对其进行解码的最佳方法是什么?

谢谢你,我感谢你的时间和帮助。

4

2 回答 2

11

我认为将用户名和密码存储在某种令牌中并不是一个好主意。而是在成功登录后生成随机令牌并将与令牌相关的数据存储在服务器端。

您可以将有关每次登录的记录存储到带有 , , 列的tokenuser_idvalid_until。每次请求后,在数据库中查找令牌,检查它是否仍然有效并user_id用于身份验证。

您可能会将 token 视为一次性用户和密码,例如,如果您对允许无密码访问感到不安,可以将 token 的前 8 个字符视为临时用户名,其余字符视为密码 :)

此外,您可能希望每天运行一些 cron 作业以从数据库中删除过期记录。

于 2013-09-18T10:16:09.677 回答
1

您可以使用 JWT JSON Web Tokens 进行身份验证,以完全消除会话和 cookie。Facebook 使用了类似的方法。一旦您使用电子邮件和密码登录,您将获得一个 Web 令牌,因此即使它被黑客入侵,您也无法从中获取密码。您可以设置令牌过期的时间限制。

于 2015-05-26T13:48:50.123 回答