API开发越来越成为主流,需要各自Access Token做登录状态。

甚至目前web端mvvm应用,如angular、vue、react都使用了jwt方式,也就是不再使用cookie和session作为登录状态。有很多作为这种无状态http的身份登录状态方法,原理也差不多,无非就是获得客户端的标识,把服务器的信息和客户端的交互信息在传输时附带上。

较为流行的传输身份验证码方法就是jwt,jwt只是一种约定,可选择不同的数据加密签名。

本质上只是一种“签名”而不是加密。

jwt生成的token如下:

eyJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsImFpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsIm1vYmlsZSI6IjEzNTI5NTEzMTA0IiwiaXAiOiIwOjA6MDowOjA6MDowOjEiLCJleHAiOjE1ODU4NDc5MTJ9.edv0BBpe_S6GDmtSp6Q7stsRrxBDesWr9MOjqcGdyR8

事实上就是把token分成三段,使用点号 " ." 分割字符串。前两段的内容就是header和payload。后面的是使用选择的加密算法生成的签名。

JWT.io 上面有各种不同语言的实现,不同的语言不同的库能解析和生成,以及附加的参数不同。但基本原理就是使用base64进行数据编码,再进行签名。而不是传输数据是直接加密的,当然你也可以选择加密的算法,但是越复杂服务器解析越慢。

因为jwt只是编码,不是一种加密,所以jwt token作为身份令牌,需要注意不要把危险的参数如密码放在token里,如果你执意要这么做,那么就需要把token放在服务器数据库或者缓存,再生产一个签名使用加密签名进行api与服务器的通信,但这实在是多此一举。

jwt本就是连接授权认证,如果每次连接还做持久化查询,那么无疑增加了性能消耗。

而传输一个身份ID其实就可以了,所以,jwt尽量简短简单即可。

选择实现库或者自己实现都可以,但是最好选择github star数量多的,这是大多数人验证过的。

传输jwt一般使用header,也可以使用get参数传值。这看服务器端与客户端的http请求库如何方便实现。

比如某些前端上传工具,就不能自定义header,那就只能使用url get参数传。服务器也要做好适当的接口规划。

jwt token 附加用户信息_JWT的正确使用方法,API开发为什么使用JWT相关推荐

  1. jwt token 附加用户信息_SpringBoot+JWT实现token验证并将用户信息存储到@注解内

    springboot集成jwt实现token验证 1.引入jwt依赖 io.jsonwebtoken jjwt 0.9.0 com.auth0 java-jwt 3.9.0 2.自定义两个注解 /** ...

  2. jwt token 附加用户信息_获取jwt(json web token)中存储的用户信息

    一个JWT实际上就是一个字符串,它由三部分组成,头部(header).载荷(Payload)与签名. Payload payload中可以保存用户的信息. var claims = new Claim ...

  3. Spring Cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)

    上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * ...

  4. Auth2.0拿code换token,拿token换用户信息

    先post一篇介绍Auth2.0的文章:Auth2.0, 链接失效的话,看本地PDF文件. 来源于WeChat公众号:低并发编程 之前做过oidc的权限登陆,原理基本上就是Auth2.0. auth2 ...

  5. 微信小程序之获取用户信息(流程+2种方法)

    获取流程图 ui库Vant Weapp:Vant Weapp地址(点击跳转) 第一种方法 适用于直接点击登录获取 在界面添加登录按钮,用户点击按钮调用wx.getUserProfile()函数来提示用 ...

  6. uniapp解析token获取用户信息

    在uniapp开发中,遇到一种情况,就是在某个模块,我需要根据登录的账号判断有没有权限看到该模块.本来我以为这些信息都存在用户登录接口里,后来发现原来都装在token中,也就是说,我需要获取到toke ...

  7. uni-app如何授权:获取code、openid、token,用户信息

    1.首先要在微信小程序的编译器的Appid绑定一个id账号,不能使用自己的默认的否则获取code失败.Appid账号要从公司要,公司会提供. const login = function () {un ...

  8. 删除共享登陆用户信息||无权访问共享资源解决方法

    1.控制面板-->用户帐户-->选择"高级"选项,点击"管理密码",删除对应的ip即可.2003操作系统,控制面板中选择"存储的用户名和密 ...

  9. 程序员,别逼自己学 AI 了,掌握正确的方法,开发水平暴增!

    今天,想跟大家聊聊 Python 人工智能. 最近几年,我看过市面上很多 Python和人工智能的教程,基本都是先介绍Python基本语法.dict.tuple 等基本库的使用,最后学习机器学习.深度 ...

最新文章

  1. MongoDB update修改器: 针对Fields的$修改器 $inc $set $unset
  2. 行列式求值、矩阵求逆
  3. LeetCode 705 Design HashSet 解题报告
  4. 【C语言进阶深度学习记录】十五 编译过程简介
  5. java转换字符集_Java字符集转换解释
  6. 如何判断笔记本蓝牙硬件坏了_还在担心被套路?老司机教你如何判断车用尿素溶液的好与坏...
  7. 四边形可以分为几类_大件物流有哪些公司?大件物流公司的业务可以分为哪几类...
  8. 解决Ajax中IE浏览器缓存问题
  9. 一些常见的项目行为状态[转]
  10. 配置ftp方式的yum源的各种排错
  11. EasyUI可编辑列
  12. 【R图秀-5】将薪比薪
  13. background-size属性
  14. mysql 连接数和内存的关系_php-fpm进程数和mysql连接数之间的关系
  15. 解决桌面右键无NVIDIA控制面板选项
  16. 基础学习——MySQL基础
  17. Word 下取消高亮度显示
  18. 浅谈Redis延迟测试方法
  19. 《国风美少年》秦子墨遭质疑崩溃落泪,失传名曲重现舞台!
  20. 实现斗地主牌的大小顺序,实现分发牌的顺序,每个人手中的牌按照大小排序

热门文章

  1. java server faces
  2. 添加Silverlight应用到HTML
  3. 计算机联锁道岔故障处理,TYJL-II型计算机联锁系统的日常维护和故障处理.doc
  4. MySQL 集群 3副本,Kubernetes经典实践——运行MySQL多副本集群
  5. 用html5做一个介绍自己家乡的页面_厚溥资讯 | HTML5的小知识点小集合(上)
  6. 统计输入的字母 c语言,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  7. linux socket read 接受缓存为空_Linux直接IO、缓存IO、阻塞与同步?
  8. 合成孔径成像算法与实现_MIMO OFDM宽幅SAR成像仿真与图像融合技术
  9. UI设计|搭配色彩素材专辑,轻松掌握要点
  10. mac地址修改_【电脑知识】在纯DOS下更改BIOS中网卡MAC地址教程