引言

今天的文章,主要介绍一下 JWT 。看这篇文章之前,你需要有如下基础:

  1. 会使用 composer。

  2. 在趣编程顺利完成了 1 个任务及以上。

读完本篇文章,你能收获:

  1. 什么是 JWT 。

  2. 如何使用 JWT 。

  3. JWT 的安全问题。

什么是 JWT

JWT的全名,是 JSON Web Token。是一种 【认证规范】。目的,是为了保证【信息在 Web 应用间安全的传递】。JWT 具象化到代码上,其实就是一串【String】。

但是,如果你仔细观察这一串字符,你会发现

存在两个点,将他分成了三部分。

JWT 由三部分组成:

  1. 头部 Header

  2. 载荷 Payload

  3. 签名 Signature

载荷 Payload

为了更好的理解这三部分的具体意思,下面我举一个具体的例子:

在A用户关注了B用户的时候,系统发邮件给B用户,并且附有一个链接“点此关注A用户”。链接的地址可以是这样的

我们先将上面的这个操作,具象化为一个 JSON 对象:

前面的五个字段都是由 JWT 标准定义的。可以参考 Github 的 Wiki ,主要的作用:

  1. 声明 JWT 的签发者(iss)

  2. 该 JWT 面向的用户(sub)

  3. 该接受 JWT 的一方(aud)

  4. 过期时间(exp)

  5. 签发时间(iat)

将这个 JSON 对象进行 【base64编码】,即可得到 Payload (即一串字符串)。

同样,我们用 JSON 对象来具象化一个头部

主要说明了这是一个 JWT,并且签名算法是 【HS256】。进行 【base64编码】,即可得到 Header(即一串字符串)。

签名 Signature

将上面得到的两串字符串,用【.】连接,对新得到的【Header.Payload】进行【base64编码】,即可得到最后的

【Header.Payload.Signature】

于是,我们可以将链接地址改为

参考文章

如何使用 JWT

JWT 安装

首先你需要初始化 Laravel 项目。

在composer.json下添加

执行

在config下的app.php文件下添加

执行

JWT Installation is done~

JWT 使用

那么如何在项目里使用 JWT 认证登录呢?

既然是登录,用户表是必须的。

Migrate

Seeder

运行迁移填充命令

创建路由

到 Kernel.php 下注册中间件

到 web.php 下声明路由

建立 AuthenticateController 控制器

测试。打开 Postman,输入 email 和 password

然后你就能得到一个 Token。根据这个 Token,去获取所有用户数据

至此,JWT 最基础的应用就搭建完成了。

参考文章 JWT 实践

JWT 的安全问题

JWT 存在如下几个问题:

  1. base64 编码可破解

  2. token有可能被截获

针对如上两个问题,在使用 JWT 时需注意如下几个要点

  1. Payload 不可存储敏感信息(密码)。

  2. 缩短 Token 的刷新时间。

发表评论

电子邮件地址不会被公开。 必填项已用*标注