JWT

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: JWT

序言



在实际应用中,有很大一部分的后台接口应该是在用户登录的情况下才能进行操作的,而这种需要用户认证的接口显然不可能每次都去传一遍用户名和密码,另外不同的用户,操作后台系统的权限也会有所不同,为了解决这些问题,相信你对 token 这个词不陌生吧。



JWT



JSON Web Token ( JWT ),现行的一种开放标准,不局限于编程语言。


JWT 由三部分构成:header (头部)、payload(载荷,也叫 claim)、signature(签名)。


header (头部) 主要有两个部分:

  • alg :声明使用的加密算法
  • typ :token 的类型,当然这里就是 JWT


payload(载荷)定义了七个标准字段:

  • iss :token的发行者
  • sub :token面向的用户
  • aud :受众
  • exp :token的过期时间,Unix时间戳
  • nbf :not before , 如果当前时间在 nbf 里的时间之前,则Token不被接受
  • iat :token的签发时间,Unix时间戳
  • jti :当前token的唯一标识


signature(签名):由 header 和 payload 的base64 编码拼接而成,中间以 . 间隔。


最终的 token 由三部分拼接而成:header 的 base64 编码、payload 的base64 编码、signature 加密后的字符串,中间以 . 间隔。



应用过程



1、用户以正常的用户名和密码成功登录

2、服务器生产 token 返回给用户保存起来

3、用户以后的所有操作均带上 token 以表明合法身份

4、服务器接受 token 检验其合法性以进行后续操作




实战



原理上面说过了,下面写点代码自己生成 token :



看图就知道很简单,加密使用 node 的核心模块 crypto 即可,对时间的操作推荐使用第三方库 moment ,加密算法不建议使用 md5 和 sha1 了,因为已经被证明不安全。


关于 token 验证,base64 反编译 header 和 payload 部分,判断其中的字段是否合法,比如 token 面向的唯一用户对不对得上、时间是否过期等等,当然为了以防篡改,还可以自己重新将签名加密一遍进行比对。


JWT 定义的标准只是一种实现形式,诸如 payload 载荷部分中的字段都是可选的,同样的,我们完全可以自己去定义我们的 json 形式,完全不参照标准字段,只要保证加密验证的一致性即可。说到这,用户权限区分的问题怎么解决,很简单,payload 里面自己加一个表明权限的字段,token 验证的时候判断一下就得了。

目录
相关文章
|
8月前
|
存储 JSON 安全
JWT 还能这样的去理解嘛??
JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的。JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。可以看出,。并且, 使用 JWT 认证可以攻击,因为 JWT 一般是存在在中,使用 JWT 进行身份验证的过程中是的。
223 1
|
6月前
|
存储 JSON 算法
JWT
【7月更文挑战第5天】
57 0
|
7月前
|
存储 JSON 算法
12.Jwt
12.Jwt
34 0
|
前端开发
什么是JWT?深入理解JWT从原理到应用(下)
什么是JWT?深入理解JWT从原理到应用(下)
130 0
|
8月前
|
JSON 算法 数据库
JWT 是什么
JWT 是什么
|
8月前
|
存储 JSON 算法
什么是JWT?
什么是JWT?
74 0
|
8月前
|
存储 JSON 算法
快速了解什么是jwt及如何使用jwt
快速了解什么是jwt及如何使用jwt
204 0
|
存储 JSON 安全
了解什么是JWT
了解什么是JWT
76 0
|
JSON 数据格式
jwt->jwt简介,jwt工具类,jwt集进成spa项目
jwt->jwt简介,jwt工具类,jwt集进成spa项目
89 0
|
JSON 算法 前端开发
什么是JWT?深入理解JWT从原理到应用(上)
什么是JWT?深入理解JWT从原理到应用(上)
1964 0