【问题标题】:PHP REST API Token Expiration FlowPHP REST API 令牌过期流程
【发布时间】:2017-01-04 08:28:36
【问题描述】:

我正在用 PHP 创建一个 REST API,但在理解我必须对过期令牌做什么的概念时遇到了一些问题。我有身份验证部分的 MYSQL 和 Json Web 令牌。

数据库结构

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;

登录

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

  • 电子邮件
  • 姓名
  • user_creation_date
  • 过期时间

注销 我使用 access_token、device_type 和 user_id 创建了一个 POST 请求。但是如果令牌已经过期了怎么办?我刚刚删除了?

另一个终点

for example 
/pets?id=1

我使用 access_token、user_id 和 xx_id 创建了一个 GET 请求,因此在我返回数据之前。我验证令牌是否正确,以及令牌是否对应于发出请求的用户。但是,如果令牌过期了怎么办?我创建另一个?如果我必须返回另一个未过期的令牌,我是否应该注销用户并再次询问密码和电子邮件?

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

谢谢大家

【问题讨论】:

    标签: php api authentication token access-token


    【解决方案1】:

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

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

    【讨论】:

    • 首先,感谢您的帮助。因此,我创建了一个访问令牌和一个刷新令牌并将其发送给客户端。客户端存储这两个字段,当发出请求并且访问令牌过期时,客户端必须使用刷新令牌发出另一个请求?
    • 是的,你是对的。但是,如果访问令牌过期或无效,您可以使用不同的响应代码。如果过期,客户端应发送刷新令牌。如果无效,用户必须重新登录。 @JIFT
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2018-02-11
    • 2019-07-20
    • 1970-01-01
    • 2019-08-05
    • 2016-09-17
    相关资源
    最近更新 更多