文档章节

JWT(Json web token)

lemonwater
 lemonwater
发布于 2017/09/08 15:06
字数 569
阅读 21
收藏 1
点赞 0
评论 0

首先了解一下JWT使用过程:
Token 是服务器端在验证客户端user_id/pwd 没问题后, 签发给客户端的, 作为标示该用户的一个令牌, 之后客户端就使用该令牌和服务器端进行交互.  

Token的根本作用:
就一点: 用于服务器端标示是哪个用户的请求

JWT 安全吗? 
基本上很安全, 否则就没有人用了, 具体分析:
1. JWT 令牌可以防止信息伪造, 服务器在生成token中的signature部分, 可以使用一些高级的加密算法, 比如使用HMAC算法 + Secret key, 因为Secret key是只有服务器知道, 所以别人仿造不了. 随意仿造, JWT token的完整性就改变了. 
2. JWT 令牌可以防止重放攻击. JWT不好伪造, 如果整个token被人直接套牌不也可以吗? token中增加失效期设置, 这样就缩小了重放攻击的窗口. 
3. token 作为 http head的 authentication 取值, 本身是明文的, 可以上 https, 这样 token 也被加密了. 在公网下, https是必须的, 尤其是登录环节, 明文提交用户名/密码明文太可怕了. 

关于防止被套牌, 除了增加失效期属性, 还可以做进一步工作, 具体为:
  客户端请求令牌时候, 不仅需要提交 user_id/pwd, 而且需要提交一个 device_id, 也就是说 user_id对应一个有效的令牌, 同时在server端的user表中将token和device_id都存下来, 如果下次客户端来自其他设备, 查询 user表中的token和device_id, 如果请求中的token或device_id和user表不一致, 清空user表的token, 即在服务器端强制标记该token失效. 
  除非安全要求很严, 否则不推荐这么复杂的作法,JWT的token本来可以在server端通过算法验证的, 不需要查询数据表, 而现在引入了数据表, 如果觉得这个方式丑陋, 可以持久化到redis而不是user表中. 
 

================================
更多文档  
================================
基于Token的WEB后台认证机制 http://www.cnblogs.com/xiekeli/p/5607107.html
JSON Web Token (JWT) 简介 https://mozillazg.github.io/2015/06/hello-jwt.html
jwt官网 https://jwt.io

© 著作权归作者所有

共有 人打赏支持
lemonwater
粉丝 2
博文 60
码字总数 6420
作品 0
西安
八幅漫画理解使用 JWT设计的单点登录系统

上次在《JSON Web Token - 在Web应用间安全地传递信息》中我提到了JSON Web Token可以用来设计单点登录系统。我尝试用八幅漫画先让大家理解如何设计正常的用户认证系统,然后再延伸到单点登录...

John Wu ⋅ 04/18 ⋅ 0

Json Web Token介绍与基本使用

一、Session与JWT 1.1 传统Cookie+Session +的存在主要是为了解决HTTP这一下服务器如何识别用户的问题。 其原理就是在用户登录通过验证后,服务端将数据加密后保存到客户端浏览器的Cookie中,...

yuanlaijike ⋅ 05/03 ⋅ 0

SpringBoot 整合 oauth2(五)实现 jwt 及 扩展

什么是jwt,即 json web token。JWT是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。也是一种token,但是和token有一些不同。 jwt优点: 自包含 防篡改 可自定义扩展 JW...

FantJ ⋅ 05/22 ⋅ 0

SpringBoot--JWT集成配置

一, JWT简介 JWT 全名 JSON WEB Token 主要作用为用户身份验证, 广泛应用与前后端分离项目当中. JWT 的优缺点 : https://www.jianshu.com/p/af8360b83a9f 二, JWT 在 spring boot 项目当中的...

ge洋 ⋅ 05/19 ⋅ 0

tomsun28/bootshiro

bootshiro 自己在前后端分离上的实践 要想实现完整的前后端分离,安全这块是绕不开的,这个系统主要功能就是动态restful api管理,这次实践包含两个模块,基于搭建的权限管理系统后台bootshi...

tomsun28 ⋅ 04/25 ⋅ 0

基于Token的WEB后台认证机制:Token

一、常见的集中认证机制 1、HTTP Basic Auth 在每次访问 API 时,都要提供用户的username 和 password,Basic Auth 是配合 RESTful使用的最简单的认证方式,只需要提供用户名和密码即可。因此...

厚简 ⋅ 05/09 ⋅ 0

Java Token的原理和生成使用机制

在此之前我们先了解一下什么是Cookie、Session、Token 1、什么是Cookie? cookie指的就是浏览器里面能永久存储数据的一种数据存储功能。cookie由服务器生成,发送给浏览器,浏览器把cookie以...

心月狐 ⋅ 05/18 ⋅ 0

OAuth 及 移动端鉴权调研

OAuth OAuth是一个解决用户无需向第三方应用提供用户名密码,让第三方应用访问用户私密资源的授权方案。 举例: 用户a,在网站B存有私密信息(年龄、邮箱、头像),而a在访问第三方网站C时,为...

马肱 ⋅ 05/15 ⋅ 0

年薪20万Python工程师进阶(1):Django-第三方登录框架

1.安装 pip install social-auth-app-django 2.配置 INSTALLED_APPS=( ... 'social_django', ... ) 3.数据生成,直接migrate,因为源码中的 makemigrtasion 生成的数据库迁移文件已经存在了。...

程序员八阿哥 ⋅ 05/11 ⋅ 0

OpenID Connect 协议入门指南

如果要谈单点登录和身份认证,就不得不谈OpenID Connect (OIDC)。最典型的使用实例就是使用Google账户登录其他应用,这一经典的协议模式,为其他厂商的第三方登录起到了标杆的作用,被广泛参...

sunrongxin.py ⋅ 2017/06/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考...

算法之名 ⋅ 26分钟前 ⋅ 0

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部