PHP REST API令牌到期流程

时间:2016-08-28 00:52:01

标签: php api authentication token access-token

我正在用PHP创建一个REST API,我在解决与过期令牌有关的概念时遇到了一些问题。我有MYSQL和Json Web Tokens用于身份验证部分。

数据库结构

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `name` varchar(35) CHARACTER SET utf8 NOT NULL,
  `lastname` varchar(35) CHARACTER SET utf8 DEFAULT NULL,
  `password` text CHARACTER SET utf8 NOT NULL,
  `email` varchar(50) CHARACTER SET utf8 NOT NULL,
  `gender` enum('male','female') CHARACTER SET utf8 DEFAULT NULL,
  `description` text CHARACTER SET utf8,
  `email_verification` enum('unverified','verified','','') CHARACTER SET utf8 NOT NULL DEFAULT 'unverified',
  `updated` datetime NOT NULL,
  `created` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `device_tokens` (
  `id` int(11) NOT NULL,
  `device_id` tinyint(4) NOT NULL,
  `device_version` varchar(10) DEFAULT NULL,
  `user_id` int(11) NOT NULL,
  `token` text NOT NULL,
  `update` datetime NOT NULL,
  `created` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

LOGIN

我使用用户和密码创建一个POST请求,如果验证正确,我将返回一个包含以下数据的访问令牌(Json Web Token):

  
      
  • 电子邮件
  •   
  • 名称
  •   
  • user_creation_date
  •   
  • 到期时间
  •   

LOGOUT 我使用access_token,device_type和user_id创建一个POST请求。但是如果令牌已经过期会发生什么?我刚刚删除了?

另一个终点

for example 
/pets?id=1

我使用access_token,user_id和xx_id创建一个GET请求,所以在我返回数据之前。我验证令牌是否正确,以及令牌是否与发出请求的用户相对应。但是,如果令牌已过期会发生什么?我又创造了一个?如果我必须返回另一个未到期的令牌,我应该注销用户并再次询问密码和电子邮件吗?

我不明白最好的方法是什么。在我创建的有关身份验证的其他帖子中,许多用户建议我使用第三方身份验证系统,但我想自己开发。

全部谢谢

1 个答案:

答案 0 :(得分:1)

通常,如果令牌过期,您应该将其从数据库中删除并注销用户。但是,如果用户处于活动状态,则应该可以在他的服务请求期间延长其访问令牌的生命周期。但是,当引入附加参数刷新令牌时,还有另一种方法。在这种情况下,流程可能如下所示:

  1. 用户登录系统。生成两个令牌访问和刷新
  2. 用户请求不同的端点并仅发送访问令牌。
  3. 访问令牌已过期。用户发送刷新令牌以延长其会话的生命周期。
  4. 刷新令牌无效或已过期,系统会注销用户。
  5. 刷新令牌有效,然后延长访问令牌的生命周期。
  6. 用户很满意,可以继续使用您的服务。