关于JWTtoken的管理问题
JWT简介:
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。因为网络上有很多关于jwt的详细介绍了,所以我这里就不再赘述。但是JWT的大概还是要简要讲一下的。
众所周知,在现在的互联网世界中,越来越多的网站之间因为业务关系需要频繁的跨域互相访问,但是由于HTTP协议的同源策略,在跨域访问中如何携带用户个人信息认证就是一个大问题了。为了安全,cookie是只能在同域名下才能作用,这也使之前一直常用的session和cookie来保持用户状态的机制在这种情况下无能为力。而JWT也由此应运而生,越来越多的应用在了大型网站的单点登录中了。
简单叙述一下jwt的构成,jwt总共由3个部分构成,分别是header头部,用来存储该token的加密方式和一些简介。payload部分,用来存储用户的非敏感信息和一些因为业务需要所需的数据。而header和payload都是json格式的数据,通过可以互相转化的base64转码成字符串,这也是为什么在token中不要携带用户敏感信息的圆心。最后的部分是signature,它由保存在公司内部的密钥和前面的header还有payload通过header部分里声明的加密方式以及一些加盐操作加密而成。三个部分分别用 . 隔开,最终形成header.payload.signature这个形式。
header:
{
'typ': 'JWT',
'alg': 'HS256'
} base64(header) --> eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 payload:
{
"sub": "",
"name": "John Doe",
"admin": true
} base64(payload) --> eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9 最终组成 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
JWT是在用户注册或者登陆之后通过服务器签发给客户端,大部分客户端通过localstorage来存储token,这样就可以在前端发起请求时主动携带上token,然后服务器接收之后通过验证来判断该用户的认证信息了。也有少部分客户端是将token存储在cookie中的,在此不谈。
那么今天要谈的问题来了,因为token是存储在客户端的,那么就表示着一旦服务器在签发token之后,除了等待token到时限失效之外失去了管控token的能力。一旦客户端token丢失等情况发生,就会产生用户安全问题。
解决方案:
服务器在用户第一次登陆或者注册成功后在签发token时可以给该token配置一个token_id,并保存到服务器的redis或者mysql数据库中。用户在访问时如果携带了token便需要先经过token_id的校验,再进行后面用户身份信息的校验。一旦用户发起安全申请,便立即删除服务器保存的token_id,而用户携带的token在token_id这个步骤的校验失败之后便会跳转到登录界面,由服务器重新签发token。
关于JWTtoken的管理问题的更多相关文章
- Dubbo学习系列之九(Shiro+JWT权限管理)
村长让小王给村里各系统来一套SSO方案做整合,隔壁的陈家村流行使用Session+认证中心方法,但小王想尝试点新鲜的,于是想到了JWT方案,那JWT是啥呢?JavaWebToken简称JWT,就是一个 ...
- spring-boot-plus集成Shiro+JWT权限管理
SpringBoot+Shiro+JWT权限管理 Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 使用Shiro的易于理解的API,您可以 ...
- .Net Core 认证系统之基于Identity Server4 Token的JwtToken认证源码解析
介绍JwtToken认证之前,必须要掌握.Net Core认证系统的核心原理,如果你还不了解,请参考.Net Core 认证组件源码解析,且必须对jwt有基本的了解,如果不知道,请百度.最重要的是你还 ...
- 权限管理3-整合Spring Security
一.Spring Security介绍 1.框架介绍 Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Spring 框架,提供了一套 Web 应用安 ...
- 【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
问题描述 在APIM中配置对传入的Token进行预验证,确保传入后端被保护的API的Authorization信息正确有效,可以使用validate-jwt策略.validate-jwt 策略强制要求 ...
- PowerDotNet平台化软件架构设计与实现系列(12):HCRM人员管理平台
技术服务于业务,良好的技术设计和实现能够大幅提升业务质量和效率. PowerDotNet已经形成了自己的开发风格,很多项目已被应用于生产环境,可行性可用性可靠性都得到了生产环境验证. 编程是非常讲究动 ...
- .NET Core中的认证管理解析
.NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...
- npm 私有模块的管理使用
你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
随机推荐
- Buy or Build(UVa1151)
如果枚举每个套餐,并每次都求最小生成树,总时间复杂度会很高,因而需要先求一次原图的最小生成树,则枚举套餐之后需要考虑的边大大减少了. 具体见代码: #include<cstdio> #in ...
- zoj 1649 bfs
Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M ...
- 作业二:构建swap函数
一.swap代码 #include<stdio.h> int main() //主函数部分 { void swap(int *m,int *n); int a,b; int *p1,*p2 ...
- centos7进单用户
当重启linux系统,进入系统选择页面的时候,按e 在linux16那一行最后面添加 init=/bin/sh 按ctrl+c 挂载根分区,可读写 mount / -o rw, remount
- 关于使用jQuery操作dom时的一点发现
<body> <ul> <li>list item 1</li> <li>list item 2</li> <li> ...
- C++——volatile关键字的学习
首先声明一点,本文是关于volatile关键字的学习,学习内容主要是来自一些大牛的网络博客. 一篇是何登成先生的C/C++ Volatile关键词深度剖析(http://hedengcheng.com ...
- js求两个数组的交集|并集|差集|去重
let a = [1,2,3], b= [2, 4, 5]; 1.差集 (a-b 差集:属于a但不属于b的集合) a-b = [1,3] (b-a 差集:属于b但不属于a的集合) b-a = [4 ...
- 树莓派3代B+安装mateubuntu16.04
直接安装会卡在开机后的彩虹界面 所以先直接安装:2019-04-08-raspbian-stretch-lite.img 安装完毕后,直接在Linux环境下读取 /boot /系统分区(系统分区在wi ...
- mac中更改xampp的根目录
方法一: 1 打开 应用程序->XAMPP->xamppfiles->etc->httpd.conf 文档 2 commond+f搜索htdocs,搜到如下结果 # Docum ...
- nginx1.14.0版本server、location、rewrite配置
server配置demo 在192.168.10.140(centos7)上修改: /home/program/nginx/conf/nginx.conf 添加一个server server { li ...