jwt token注销_详解JWT token心得与使用实例
本文你能学到什么?
token的组成
token串的生成流程。
token在客户端与服务器端的交互流程
Token的优点和思考
参考代码:核心代码使用参考,不是全部代码
JWT token的组成
头部(Header),格式如下:
{
“typ”: “JWT”,
“alg”: “HS256”
}
由上可知,该token使用HS256加密算法,将头部使用Base64编码可得到如下个格式的字符串:
eyJhbGciOiJIUzI1NiJ9
有效载荷(Playload):
{
“iss”: “Online JWT Builder”,
“iat”: 1416797419,
“exp”: 1448333419,
…….
“userid”:10001
}
有效载荷中存放了token的签发者(iss)、签发时间(iat)、过期时间(exp)等以及一些我们需要写进token中的信息。有效载荷也使用Base64编码得到如下格式的字符串:
eyJ1c2VyaWQiOjB9
签名(Signature):
将Header和Playload拼接生成一个字符串str=“eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyaWQiOjB9”,使用HS256算法和我们提供的密钥(secret,服务器自己提供的一个字符串)对str进行加密生成最终的JWT,即我们需要的令牌(token),形如:str.”签名字符串”。
token在服务与客户端的交互流程
1:客户端通过用户名和密码登录
2:服务器验证用户名和密码,若通过,生成token返回给客户端。
3:客户端收到token后以后每次请求的时候都带上这个token,相当于一个令牌,表示我有权限访问了
4:服务器接收(通常在拦截器中实现)到该token,然后验证该token的合法性(为什么能验证下面说)。若该token合法,则通过请求,若token不合法或者过期,返回请求失败。
关于Token的思考
服务如何判断这个token是否合法?
由上面token的生成可知,token中的签名是由Header和有效载荷通过Base64编码生成再通过加密算法HS256和密钥最终生成签名,这个签名位于JWT的尾部,在服务器端同样对返回过来的JWT的前部分再进行一次签名生成,然后比较这次生成的签名与请求的JWT中的签名是否一致,若一致说明token合法。由于生成签名的密钥是服务器才知道的,所以别人难以伪造。
token中能放敏感信息吗?
不能,因为有效载荷是经过Base64编码生成的,并不是加密。所以不能存放敏感信息。
Token的优点
(1)相比于session,它无需保存在服务器,不占用服务器内存开销。
(2)无状态、可拓展性强:比如有3台机器(A、B、C)组成服务器集群,若session存在机器A上,session只能保存在其中一台服务器,此时你便不能访问机器B、C,因为B、C上没有存放该Session,而使用token就能够验证用户请求合法性,并且我再加几台机器也没事,所以可拓展性好就是这个意思。
(3)由(2)知,这样做可就支持了跨域访问。
Java实例:JWT token使用
部分代码来自互联网,找不到原作者了。。
编写JWT(Java Web Token)操作类:JavaWebToken
public class JavaWebToken {
private static Logger log = LoggerFactory.getLogger(JavaWebToken.class);
//该方法使用HS256算法和Secret:bankgl生成signKey
private static Key getKeyInstance() {
//We will sign our JavaWebToken with our ApiKey secret
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("bankgl");
Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
return signingKey;
}
//使用HS256签名算法和生成的signingKey最终的Token,claims中是有效载荷
public static String createJavaWebToken(Map claims) {
return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS256, getKeyInstance()).compact();
}
//解析Token,同时也能验证Token,当验证失败返回null
public static Map parserJavaWebToken(String jwt) {
try {
Map jwtClaims =
Jwts.parser().setSigningKey(getKeyInstance()).parseClaimsJws(jwt).getBody();
return jwtClaims;
} catch (Exception e) {
log.error("json web token verify failed");
return null;
}
}
}
编写登录Conreoller,在服务器端给客户返回token.
public LoginStatusMessage checkUserAndPassword(
@RequestParam(value="username",required=true) String username,
@RequestParam(value="password",required=true) String password,User user,HttpServletRequest request) throws Exception{
User u = new User();
//登录成功
if((u = userService.checkUsernameAndPassword(user)) != null){
Map m = new HashMap();
m.put("userid", user.getUserid());
String token = JavaWebToken.createJavaWebToken(m);
System.out.println(token);
LoginStatusMessage lsm = new LoginStatusMessage();
lsm.setUser(u);
lsm.setToken(token);
return lsm;
};
//登录失败,返回Null
return null;
}
在拦截器中对请求中的Token验证(部分代码,表示下意思):
String token = request.getParameter("token");
if(JavaWebToken.parserJavaWebToken(token) != null){
//表示token合法
return true;
}else{
//token不合法或者过期
return false;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
jwt token注销_详解JWT token心得与使用实例相关推荐
- python爬关键词百度指数_详解python3百度指数抓取实例
百度指数抓取,再用图像识别得到指数 前言: 土福曾说,百度指数很难抓,在淘宝上面是20块1个关键字: 哥那么叼的人怎么会被他吓到,于是乎花了零零碎碎加起来大约2天半搞定,在此鄙视一下土福 安装的库很多 ...
- python的pillow给图片加文字_详解PILLOW图片中加入中文的实例
索引简述 准备 示例 效果图 结语 简述 我在使用opencv2或3的时候想要在图片上添加中文文字,需要去下载Freetype库,编译好链接到opencv库中才能中文的输出.网上大部分在图片中插入中文 ...
- JWT(Json web token)认证详解
JWT(Json web token)认证详解 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该to ...
- Token 防盗链详解
前言 随着互联网的高速发展,无论是移动 APP 还是 WEB 站点,访问的安全问题始终困扰着内容提供商.CDN ( Content Delivery Network,内容分发网络 ) 服务作为当今互联 ...
- 大脑构造图与功能解析_大脑的结构和功能分区_详解人脑构造与功能
大脑的结构和功能分区 _ 详解人脑构造与功能 学习,可以开阔人的大脑 ; 学习,可以使人的大脑拥有更多的知识,人的大脑和肢 体一样,多用则灵,不用则废.那么下面学习啦小编给大家分享一些大脑的结构和功 ...
- jwt token注销_辩证的眼光搞懂 JWT 这个知识点
什么是 JWT 概念 JSON Web Token(简称 JWT)是目前最流行的跨域认证解决方案. JWT 原理 JWT 组成 JWT 由三部分组成:Header,Payload,Signature ...
- jwt token注销_【原创精选】OAuth 2.0+JWT+spring security完成认证授权-生产级-附带源码...
前言导读 分析一下为什么要用OAuth2和JWT来做 1. **单点登录(SSO)**方案单击登录方案是最常见的解决方案,但单点登录需要每个与用户交互的服务都必须与认证服务进行通信,这不但会造成重复, ...
- 一文详解jwt token以及sprig boot如何整合实现 jwt token操作
文章目录 1. jwt是什么 2. jwt的来源 2.1 传统的session认证 2.2 基于token的鉴权机制 3. JWT的构成 3.1 header 3.2 playload 3.3 sig ...
- jwt token注销_退出登录时怎样实现JWT Token失效?
退出登录时,如果不使JWT Token失效会产生如下2个问题 问题1-未过期的token还是可以用 要是用户在多个设备登录了,而且本地保存了token.当一个地方丢弃token,但是这个token要是 ...
最新文章
- mongodb jar包_MongoDB是什么?看完你就知道了!
- 恩智浦AI视觉组之逐飞岁末彩蛋
- DTS增量/同步支持DDL迁移的说明
- java如何配置环境_java如何配置环境变量
- 阿里大规模数据中心性能分析
- 怎么在mysql查询自己建的表格_oracle数据库中怎么查询自己建的表
- C/C++获取CPU相关信息(非WMI)
- (三)Qt语言国际化
- sequelize 外键关联_用Sequelize计算关联条目
- Palo Alto Networks下一代安全平台五大创新功能:云安全为重中之重
- C++语言定义的标准转换
- 【298天】每日项目总结系列036(2017.11.30)
- php 生成vbs文件路径,vbs下一些取特殊路径的方法总结
- MATLAB绘制微分方程的相图/方向场/向量场
- 人类2100年长啥样?3D建模模拟出来让人惊掉下巴!
- 安旭生物科创板上市:曾遭弃购1400万元,凌世生夫妇控制60%股份
- Java线程Dump分析-工具TDA
- 小公司真的能培养出来自己的人吗?员工真的成长过快是好事吗?
- 6-1 判断顺序表是否有序(Java语言描述 )
- 程序设计阶段性总结报告二
热门文章
- scala的字符串的方法(五)
- 计算机编程英语怎么写,计算机编程英语词汇大全.pdf
- python怎么算积分_python计算积分
- php curl 发送checkbox,使用curl 提交表单(多维数组+文件)数据到服务器的有关问题...
- Spring(二)Spring IOC
- OpenShift 4 - 设置集群节点和Pod容器的时间和时区
- OpenShift 4 之Istio-Tutorial (9) 访问限流
- SQL Server中的假期表和GetWorkDays函数
- Linux 引入自动化测试平台 KernelC
- 在MVC 6 .NET核心应用程序中添加种子数据