大名鼎鼎的JSON Web Tokens你知多少

什么是JWT(JSON Web Tokens)?

  • JWT(JSON Web Token)是一个非常轻巧的规范,允许我们使用JWT在用户和服务器之间传递安全可靠的信息。

为什么冒出个JWT(JSON Web Tokens)?有什么用,解决什么问题?

  1. 传统session、cookies有以下明显的缺点:

a、cookies的安全性不好,攻击者可以通过获取本地cookies进行欺骗或者利用cookies进行CSRF攻击。

b、使用cookies时,在多个域名下,会存在跨域问题。

c、session在一定的时间里,需要存放在服务端,因此当拥有大量用户时,也会大幅度降低服务端的性能。

d、多服务器时需要共享session。

2. 为了解决这些问题,JWT出现了。它不再有session、cookies上面列举的缺点,不易被攻击者利用,安全性提高了。利用Http传输token,没有跨域问题。信息分散存储在客户端,服务端占用资源变少,也就不存在session共享问题。

JWT(JSON Web Tokens)是如何工作的?

  1. 要了解工作原理,我们先看下JWT的组成结构

大名鼎鼎的JSON Web Tokens你知多少

JWT结构

JWT实际上是一个字符串,由三部分组成,头部(HEADER)载荷(PAYLOAD)签名(VERIFY SIGNATURE)

  • 头部

    头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。

    {

    "alg": "HS256",

    "typ": "JWT"

    }

    这是一个头部样例,描述了token的类型为JWT,使用的算法是HS256

  • 载荷

    载荷用于存储数据,可以包含JWT标准字段,也可以自定义。列举几个标准字段以及含义:

    iss: JWT的签发者

    sub: JWT所面向的用户

    aud: 接收JWT的一方

    exp(expires): 什么时候过期

    iat(issued at): 什么时候签发

    {

    "sub": "1234567890",

    "name": "John Doe",

    "iat": 1516239022

    }

    这就是一个载荷样例,有3个字段,意思是:在这个1516239022(Unix时间戳)签发的包含name=John Doe的token发送给1234567890用户。

  • 签名

    对头部和载荷编码连接内容使用加密算法进行加密,加密过程使用特定秘钥。

    HMACSHA256(

    base64UrlEncode(header) + "." +

    base64UrlEncode(payload),

    ) secret base64 encoded

2.JWT的工作流程:

  • 客户端使用账户密码登录

  • 登录成功后服务端返回JWT

  • 客户端再次请求其他时带上JWT

  • 服务端接收到JWT后验证签名的有效性。

大名鼎鼎的JSON Web Tokens你知多少

JWT工作流程

大名鼎鼎的JSON Web Tokens你知多少

大名鼎鼎的JSON Web Tokens你知多少


分享到:


相關文章: