JWT的原理

见相关资料:
https://www.jianshu.com/p/576dbf44b2ae //写得很清楚
https://zhuanlan.zhihu.com/p/27370773
https://zhuanlan.zhihu.com/p/43094841

原理:

三部分:头部(header)载荷(payload)签证(sign)

其中载荷中:
标准中注册的声明:
iss:jwt签发者
sub:jwt所面向的用户
aud:接收jwt的一方
exp:jwt的过期时间,这个过期时间必须大于签发时间
nbf:定义在什么时间之前,该token都是不可用的
iat:jwt的签发时间
jti:jwt的唯一身份标识,避免重复

JWT的相关特点

优点

不需要储存在服务器的session中,更容易扩展服务器由于用户信息可以放入token中,所以可以少了一次数据库 / 缓存的查询操作,有更好的性能不需要预防CSRF的攻击

不足

token一经泄露或者被盗取,将会暴露该用户

建议

token的过期时间,不宜过长
非常重要的操作,需要手机验证码,支付密码等二次验证作为保险
尽量使用 https

https://zhuanlan.zhihu.com/p/43094841
// Header
{"alg": "HS256","typ": "JWT"
}// Payload负载: iss(签发者),exp(过期时间戳), sub(面向的用户), aud(接收方), iat(签发时间)
{"iss": "a.com","exp": "1d","http://a.com": true,"company": "A","awesome": true
}// Signature
HS256(Base64(Header) + "." + Base64(Payload), secretKey)// JWT
JWT = Base64(Header) + "." + Base64(Payload) + "." + $Signature

Rust中JWT的库见https://github.com/Keats/jsonwebtoken。
具体Rust库相关示例代码如下:

use std::{thread, time};
extern crate jsonwebtoken as jwt;
#[macro_use]
extern crate serde_derive;use jwt::errors::ErrorKind;
use jwt::{decode, encode, Algorithm, Header, Validation};#[derive(Debug, Serialize, Deserialize)]
struct Claims {sub: String,company: String,exp: usize,
}fn main() {let sleep_seconds = time::Duration::from_secs(1000);let my_claims = Claims {sub: "b@b.com".to_owned(),company: "ACME".to_owned(),exp: 10000000000,};let key = "secret";let mut header = Header::default();header.kid = Some("signing_key".to_owned());header.alg = Algorithm::HS512;let token = match encode(&header, &my_claims, key.as_ref()) {Ok(t) => t,Err(_) => panic!(), // in practice you would return the error};println!("token:{:?}", token);let token_data =match decode::<Claims>(&token, key.as_ref(), &Validation::new(Algorithm::HS512)) {Ok(c) => c,Err(err) => match *err.kind() {ErrorKind::InvalidToken => panic!(), // Example on how to handle a specific error_ => panic!(),},};println!("claims:{:?}", token_data.claims);println!("header:{:?}", token_data.header);println!("jwt, i am learning it!");thread::sleep(sleep_seconds);
}

Rust : Json Web Token相关推荐

  1. JWT(JSON Web Token)简介及实现

    JWT(JSON Web Token):是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为Json对象安全地传输信息.由于此信息是经过数字签名的,因此可以被验证和信 ...

  2. SpringBoot 2.x 使用 JWT(JSON Web Token)

    一.跨域认证遇到的问题 由于多终端的出现,很多的站点通过 web api restful 的形式对外提供服务,采用了前后端分离模式进行开发,因而在身份验证的方式上可能与传统的基于 cookie 的 S ...

  3. 在吗?认识一下JWT(JSON Web Token) ?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:是虎子呀  地址:my.oschina.net/u/4062 ...

  4. JWT(JSON Web Token)自动延长到期时间

    本文翻译自:JWT (JSON Web Token) automatic prolongation of expiration I would like to implement JWT-based ...

  5. JSON Web Token - 在Web应用间安全地传递信息

    JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 让我们来假想一下一个场景.在A用户关注了B用户的时候,系统发邮件给B用户, ...

  6. Python 生成 JWT(json web token) 及 解析方式

    一.关于 jwt 的原理及概念可以自行在网络上搜索了解一下,这里推荐一篇写的比较好的博客 深入了解Json Web Token之概念篇 另附 JWT 的官方文档: https://jwt.io/int ...

  7. JSON WEB TOKEN(JWT)的分析

    JSON WEB TOKEN(JWT)的分析 一般情况下,客户的会话数据会存在文件中,或者引入redis来存储,实现session的管理,但是这样操作会存在一些问题,使用文件来存储的时候,在多台机器上 ...

  8. JSON WEB TOKEN

    什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...

  9. JSON Web Token(缩写 JWT) 目前最流行、最常见的跨域认证解决方案,前端后端都需要会使用的东西

    JSON Web Token(缩写 JWT)是目前最流行,也是最常见的跨域认证解决方案.无论是咱们后端小伙伴,还是前端小伙伴对都是需要了解. 本文介绍它的原理.使用场景.用法. 关于封面:这个冬天你过 ...

  10. JWT(JSON Web Token)简介

    文章目录 一.JWT是什么 二.跨域认证问题 三.JWT原理 四.JWT数据结构 1.header(头部) 2.Payload(负载) 3.Signature 五.JWT是如何工作的 一.JWT是什么 ...

最新文章

  1. 科技公司狂挖高校AI学者:涸泽而渔还是产学双赢
  2. 瓷博会开幕,《锦绣中华》引围观
  3. java 三角依次递增在递减_java中用for循环怎样打印三角行啊,主要是不理解什么情况外层循环递增什么时候递减,如等腰三角形...
  4. 【杂谈】2020年如何长期、系统,全面地学习深度学习和计算机视觉,这是有三AI的完整计划...
  5. 《守望先锋》中的末日铁拳是怎么摧毁玩家体验的?
  6. .NET应用程序7种最常见的性能问题及其解决方案
  7. Spring Boot面试题(2020最新版)
  8. 舱机器人尾巴毛茸茸_毛茸茸的(Fluffy)——欧美有史以来最伟大的机器人战争机器人...
  9. (转)一台服务器安装两个tomcat6 服务的解决方案
  10. python、java大作战,python测试dubbo接口
  11. HDU1232 畅通工程【并查集】
  12. HttpClient4 TIME_WAIT和CLOSE_WAIT
  13. 跟我一起玩Win32开发(18):使用对话框的两个技巧
  14. 安利FeHelper
  15. MacBook Pro(13 英寸,2011 年末)A1278 官方最高支持macOS High Sierra,使用macOS Catalina Patcher成功安装macOS Catalina
  16. ussd代码大全_USSD查询器app
  17. 蓝宝石英语怎么读,sapphire是什么意思_sapphire的翻译_音标_读音_用法_例句_爱词霸在线词典...
  18. java tic tac toe_确定Tic Tac Toe游戏的算法
  19. 数据集制作之xml文件转化为csv
  20. 全面接入:ChatGPT杀进15个商业应用,让AI替你打工

热门文章

  1. 安全服务,从“被动应对”到“主动防范”
  2. Spring Boot 集成 RabbitMQ 升级
  3. 派生类构造函数 创建顺序(阿里笔试题)
  4. ali 媒体转码签名生成-php
  5. audio-音频标签
  6. 如何保持自己 fork 的项目和原始项目同步
  7. grub2 引导光盘
  8. 关于Union,Struct and Class的大小计算问题
  9. 常见的一些正则表达式!
  10. ListControl