使用JWT来实现对API的授权访问

Beginner java思维导图 前天

什么是JWT

JWT(JSON Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,可以在各个系统之间用JSON作为对象安全地传输信息,并且可以保证所传输的信息不会被篡改。

JWT通常有两种应用场景:

  • 授权。这是最常见的JWT使用场景。一旦用户登录,每个后续请求将包含一个JWT,作为该用户访问资源的令牌。

  • 信息交换。可以利用JWT在各个系统之间安全地传输信息,JWT的特性使得接收方可以验证收到的内容是否被篡改。

本文讨论第一点,如何利用JWT来实现对API的授权访问。这样就只有经过授权的用户才可以调用API。

JWT的结构

JWT由三部分组成,用.分割开。

Header

第一部分为Header,通常由两部分组成:令牌的类型,即JWT,以及所使用的加密算法。

{  "alg": "HS256",  "typ": "JWT"}

Base64加密后,就变成了:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

Payload

第二部分为Payload,里面可以放置自定义的信息,以及过期时间、发行人等。

{  "sub": "1234567890",  "name": "John Doe",  "iat": 1516239022}

Base64加密后,就变成了:

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

Signature

第三部分为Signature,计算此签名需要四部分信息:

  • Header里的算法信息

  • Header

  • Payload

  • 一个自定义的秘钥

接受到JWT后,利用相同的信息再计算一次签名,然年与JWT中的签名对比,如果不相同则说明JWT中的内容被篡改。

解码后的JWT

将上面三部分都编码后再合在一起就得到了JWT。

需要注意的是,JWT的内容并不是加密的,只是简单的Base64编码。也就是说,JWT一旦泄露,里面的信息可以被轻松获取,因此不应该用JWT保存任何敏感信息。

JWT是怎样工作的

  • 应用程序或客户端向授权服务器请求授权。这里的授权服务器可以是单独的一个应用,也可以和API集成在同一个应用里。

  • 授权服务器向应用程序返回一个JWT。

  • 应用程序将JWT放入到请求里(通常放在HTTP的Authorization头里)

  • 服务端接收到请求后,验证JWT并执行对应逻辑。

在JAVA里使用JWT

引入依赖

这里使用了一个叫JJWT(Java JWT)的库。

JWT Service

生成JWT这里设置过期时间为10秒,因此生成的JWT只在10秒内能通过验证。

  • 需要提供一个自定义的秘钥。

解码JWT

解码时会检查JWT的签名,因此需要提供秘钥。

验证JWT

JJWT并没有提供判断JWT是否合法的方法,但是在解码非法JWT时会抛出异常,因此可以通过捕获异常的方式来判断是否合法。

注册/登录

需要为还没有获取到JWT的用户提供一个这样的注册或者登录入口,来获取JWT。

获取到响应里的JWT后,要在后续的请求里包含JWT,这里放在请求的Authorization头里。

验证JWT

  • 将验证操作放在Filter里,这样除了登录入口,其它的业务代码将感觉不到JWT的存在。

  • 将登录入口放在WHITE_LIST里,跳过对这些入口的验证。

  • 需要刷新JWT。如果JWT是合法的,那么应该用同样的Payload来生成一个新的JWT,这样新的JWT就会有新的过期时间,用此操作来刷新JWT,以防过期。

  • 如果使用Filter,那么刷新的操作要在调用doFilter()之前,因为调用之后就无法再修改response了。

API

这时候API就处于JWT的保护下了。API可以完全不用感知到JWT的存在,同时也可以主动获取JWT并解码,以得到JWT里的信息。如上所示。

  • 完整的DEMO可以在这里找到:https://github.com/Beginner258/jwt-demo

  • 参考资料:https://jwt.io/

转载于:https://www.cnblogs.com/hongwu/p/9684915.html

jwt https://mp.weixin.qq.com/s/8FdzMq4msyhqE9Rrhgwqjw相关推荐

  1. 转:https://mp.weixin.qq.com/s/O_D_FVRIIII1wqq4jGZqHA

    非常伟大震撼人心的演讲,希望每个人每天看一遍 传送门:https://mp.weixin.qq.com/s/O_D_FVRIIII1wqq4jGZqHA

  2. https://mp.weixin.qq.com/s/_ZxzEo1HfyM4DH-rLKcgIg? 电容(2)之旁路电容

    https://mp.weixin.qq.com/s/_ZxzEo1HfyM4DH-rLKcgIg? 电容(2)之旁路电容

  3. 不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html

    出现"不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html"这种 ...

  4. 如何系统地自学一门Python 语言?https://mp.weixin.qq.com/s?__biz=MzA3ODY0MzEyMA==mid=408122444idx=2sn=ae6f3ddd

    网页链接:https://mp.weixin.qq.com/s?__biz=MzA3ODY0MzEyMA==&mid=408122444&idx=2&sn=ae6f3ddddf ...

  5. 微信小程序报错 http://localhost:8084 不在以下 request 合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/a

    http://localhost:8084 不在以下 request 合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/netwo ...

  6. https://mp.weixin.qq.com/s/j7YdtmyuzBFRK1BViDtp2w

    干货 | Elasticsearch多表关联设计指南 0.题记 Elasticsearch多表关联问题是讨论最多的问题之一,如:博客和评论的关系,用户和爱好的关系. 多表关联通常指:1对多,或者多对多 ...

  7. https://mp.weixin.qq.com/s/ilO6DZwRpWdrruKm4J8CMw

    近日安全漏洞频发,小编在此收集了近期大家会比较关注的漏洞,做个总结,供大家查漏补缺,若有缺失,欢迎留言补充. 目录 一.OA系统 二.E-mail 三.Web中间件 四.源代码管理 五.项目管理系统 ...

  8. CENTOS6.5安装CDH5.12.1(一) https://mp.weixin.qq.com/s/AP_m0QqKgzEUfjf0PQCX-w

    CENTOS6.5安装CDH5.12.1(一) 原创: Fayson Hadoop实操 2017-09-13 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看. 1.概述   本文档主要描 ...

  9. https://api.douban.com 不在以下 request 合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/net

    微信小程序报错: 解决方案: 一.点开工具,并选择项目详情 . 二.勾中选项即可

最新文章

  1. [20160910]低级错误.txt
  2. batch_size 和 fetch_size作用
  3. pandas DataFrame isin
  4. OpenCV、OpenCL、OpenGL、OpenPCL
  5. php编译成二进制文件_2020年小米高级 PHP 工程师面试题
  6. 发现很多人的基础都不好
  7. 2018CES智能硬件与新技术盘点
  8. WaveShaperNode
  9. laravel services.php,「Laravel框架中使用Service模式」- 海风纷飞Blog
  10. 火狐插件 打开html 死机,Firefox火狐Flash插件卡死问题完美解决方法
  11. 盛迈坤电子商务:网店有哪些营销活动
  12. C语言:memcmp()---字符串比较
  13. 用小鸟云服务器搭建网站常用的伪静态设置规则
  14. CSS3炫酷发光文字 ,自定义色彩
  15. java_vinson_02:jdk下载安装
  16. 58同城运维开发-BASE北京
  17. 【飞鱼科技】最新社招信息
  18. 网管软件哪家比较好用
  19. 百度最强大脑在想什么? —— 36氪硅谷专访百度首席科学家 Andrew Ng
  20. 微念入局螺蛳粉餐饮供应链,或成下一个颐海、蜀海

热门文章

  1. 每日整理Python基础——python教程入门学习
  2. 厉害了,比Transformer还好用!
  3. 收藏 | 李飞飞经典CS231N《卷积神经网络视觉识别》第十一讲!
  4. mysql无损复制_MySQL无损复制(转)
  5. 字符编码看不懂你来打我!(ASCII,Unicode,Utf-8,GB2312…)
  6. 基于Opencv--图像上采样
  7. syntaxnet python调用
  8. 滴滴人脸识别申诉照片怎么拍_涅槃乐队Nevermind封面照片是怎么拍出来的?
  9. 湖首大学计算机科学硕士申请,湖首大学王牌专业之一丨计算机科学专业
  10. java 2个小数点_在java程序中取后面两个小数点的方法