标签归档:JWT

JSON Web Token

一、简介

JSON Web Token 简称 JWT,是token认证的一种。它是一个开放标准,这个开放标准允许我们使用JWT在用户和服务器之间传递安全可靠的信息。

二、JWT的组成

JWT由三部分组成:
– header(头)
– payload(载体)
– signature(签名)

通常如下所示

xxxxxxx.yyyyyyy.zzzz

2.1、header

header包含2部分信息:令牌的信息,即JWT,以及签名所用的算法,例HMAC SHA256RSA

2.2、payload

payload也称为 JWT Claims,这里放置的是我们需要传输的信息,有多个项目如注册的claim名称,公共claim名称和私有claim名称。

注册claim名称有下面几个部分:

  • iss: token的发行者
  • sub: token的题目
  • aud: token的客户
  • exp: 经常使用的,以数字时间定义失效期,也就是当前时间以后的某个时间本token失效。
  • nbf: 定义在此时间之前,JWT不会接受处理。
  • iat: JWT发布时间,能用于决定JWT年龄
  • jti: JWT唯一标识. 能用于防止 JWT重复使用,一次只用一个token

公共claim名称用于定义我们自己创造的信息,比如用户信息和其他重要信息。

私有claim名称用于发布者和消费者都同意以私有的方式使用claim名称。

下面是JWT的一个案例:

2.3、signature

通过上面两部分信息我们可以得到一个字符串

然后指定的加密算法加上密钥以后可以得到我们的签名。

最后我们将签名凭借到最后我们就可以得到我们需要的JWT

三、适用场景

3.1、信息会暴露

在JWT中,不应该在载荷里面加入任何敏感的数据。像密码这样的内容就不能被放在JWT中了。如果将用户的密码放在了JWT中,那么怀有恶意的第三方通过Base64解码就能很快地知道你的密码了。

3.2、会话凭证

当用户登录成功后,我们将JWT返回给客户端。之后客户端每次请求将JWT传给后端,后端通过解码就可以得到用户的相关信息。

3.3、最适合的应用场景[开票]或者[签字]

1)邮箱确认。用户注册成功后,发送邮件到注册邮箱。然后用户点击链接跳转验证服务器,确认邮箱有效。

2)好友关注。在A用户关注了B用户的时候,系统发信息给B用户,并且附有一个链接“点此关注A用户”。B点击连接后添加关注A。

有上面2个例子,我们会发现一些相似性,如下: