JWT

简介: 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 验证的时候判断一下就得了。

目录
相关文章
|
JavaScript 前端开发 区块链
|
8月前
|
JavaScript 前端开发
TypeScript 定义同步方法
本文详细介绍了在TypeScript中定义同步方法的多种方式,包括使用类、接口、泛型和复杂的数据操作示例。通过理解这些方法,你可以在实际项目中有效地组织和管理你的代码,提高代码的可读性和维护性。
185 19
|
11月前
|
人工智能 开发者
中国CRM市场竞争格局分析:谁能与Salesforce比肩?
在全球CRM市场,Salesforce始终占据领导地位,但中国本土CRM厂商正迅速崛起。销售易在技术创新和产品深度上接近Salesforce,纷享销客聚焦中小企业市场,明源云在房地产行业表现出色。尽管与Salesforce存在技术架构、产品功能和生态系统等方面的差距,但本土厂商在本地化和响应速度上具备优势,未来有望在特定领域逐步缩小差距。
|
安全 定位技术 数据安全/隐私保护
|
调度 开发者 Python
python超详细的日期操作【建议收藏备用】
python超详细的日期操作【建议收藏备用】
219 0
|
机器学习/深度学习 数据采集 人工智能
智能化运维的探索与实践:AI在IT运维中的应用
【6月更文挑战第19天】随着人工智能技术的不断成熟,其在IT运维领域的应用也愈发深入。本文将探讨AI技术如何赋能传统IT运维,提升效率和响应速度,实现故障预测、自动化处理及优化决策。通过分析AI在运维中的实际应用案例,我们能更好地了解其潜力与挑战,并预见未来智能化运维的发展路径。
1051 6
|
存储 移动开发 C#
一篇文章讲明白MIME详解
一篇文章讲明白MIME详解
351 0
西门子S7-1200的运动控制功能、系统使能指令块、错误确认指令块、回参考点或设置参考点指令块的参数含义
今天我们来介绍西门子S7-1200的运动控制功能。西门子S7-1200的运动控制指令是通过使用相关工艺数据块和CPU的专用脉冲串输出来控制轴的运动。
西门子S7-1200的运动控制功能、系统使能指令块、错误确认指令块、回参考点或设置参考点指令块的参数含义
|
前端开发 JavaScript 持续交付
从零开始 - Docker部署前后端分离项目(三)
**此django项目部署采用的方案****nginx+gunicorn** 容器环境及需要启动的服务: 1. python3.8的 (使用的是小型的3.8-alpine) 2. celery worker 3. celery beate server 4. gunicorn
349 0
抢红包算法(公平版和手速版)
抢红包有两种算法:二倍均值法(公平版)和线段切割法(手速版)
抢红包算法(公平版和手速版)