对JWT的理解

个人理解如有错误请指正。 

什么是JWT?

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

可以理解成为它就是一个身份证,有了身份证,门卫看到了就能按权限放行,你就可以搞事情!

JWT长什么样?

其实就是一个JSON,里面有三个部分,分别是header、payload和signature。三个部分用"."隔开。具体形式就是header.payload.signature

JWT如何发挥作用?

header中蕴含了声明类型,加密方式的信息。通过Base64对称加密变成人看不懂的一串东西,但是计算机是可以解析的。他主要是为告诉计算机如何进行解密signature中的内容。

payload里面是我们携带的内容,有registered, public 和 private三种类型。里面可以存放我们自定义的键值对信息。我通常使用pulic的信息,这部分信息对外可以解密,但是无法更改,因为signature中包含了我们的加密信息,如果更改,则加密信息无法正确解析。

signature是验证的内容。根据header中的加密解密算法来看是否能够正确解析。某个JWT其实是通过某一个私钥上了锁的,只有通过这个私钥才能正确解密。

Web项目中如何使用JWT?

  1. 后台创建一个私钥,比如是: helloECNU123。
  2. 用户传递账号密码给后台,验证成功则将我们需要的信息放在payload里,通过helloECNU123上锁生成JWT返回给前端,比如id,role以及usename以及JWT的有效时间等等。
  3. 前端拿到JWT并存储在sessionStorage中,在每次提交请求的头部放入JWT。
  4. 后端会看前端的请求的header里的JWT是否正确,如果用helloECNU123解锁产生错误信息则拦截请求,如果正确就通过helloECNU123解锁JWT里的内容开放访问权限。

为什么要JWT

其实不用也可以,只要每次用户传递用户名密码去验证自己的身份就可以了,使用JWT可以减少数据库的访问量,提高效率。

我和小明的约定

使用JWT就相当于我去小明家吃饭,但是小明脑袋不好使,他必须要我的身份证才和我说话。我每次和他说一句话之前都要向他展示我的身份证。我觉得这样很麻烦,就和他约定,如果我们已经说过话了,你就给我一朵小红花,以后你只要一看到我带上小红花了,就知道是我了,不用每次都拿身份证和他说话了。不过这朵小红花通常过一天就消失了,我需要再次拿身份证和小明说一次话以便得到新的一朵小红花。

这里的身份证就是我们的账号密码,这里的小红花就是我们的JWT

你可能感兴趣的:(jwt,安全)