JWT 认证方案学习

莎利亚 等级 463 0 0
定义

JWT (JSON WEB TOKEN) 是一种安全通讯标准,它定义了一种紧凑自包含的方式,用于在各方之间安全的传输 JSON 对象。常见应用场景是API之间的认证通讯。

一般的用户认证流程

1、请求方发送账户密码到服务器,验证账户可用性。
2、验证成功,生成 session,保存在服务端。
3、服务端返回一个 session ID, 保存在客户端 cookie 中。
4、客户端请求时携带 cookie。
5、服务器解析 cookie 中携带的 session ID,验证通过后返回响应数据。

以上流程核心是基于 session 进行状态管理,这样的认证方案有以下问题:

1、客户端如果禁用 cookie,将无法维持请求的身份验证状态。
2、分布式部署的环境中,需要考虑多机 session 的一致性。
3、请求会产生跨域问题。

JWT 原理

服务器和客户端之间的通讯信息完全采用 json 传递,不需要使用 session 进行状态维持。

  • JWT 的格式包含三个部分
    1、头部(Header),描述 JWT 的元数据,通常由令牌类型和加密用到签名算法组成,例如
{
  "alg": "HS256",  #加密方式
  "typ": "JWT"   #令牌类型
} 

2、载荷(Payload),信息传输的主要内容,包含

  • 注册信息,包含 iss(发出者),exp(到期时间),sub(主题),aud(受众)
  • 公共信息,官方定义的其它的字段,因为 JWT 默认不是加密的,任何人都可以读取到公共信息,所以不要把敏感数据放到这里
  • 私有信息,平台间协定的私有字段
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
} 

3、签名(Signature),根据头部和载荷,加盐后根据头部指定算法生成

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret) 

头部和载荷根据算法 Base64URL 进行转换,结合签名按顺序以”.“拼接形成 JWT 。

JWT 认证方案学习

jwt.png

JWT 的用法

当客户端根据凭证成功登陆时,服务器将返回 JWT,客户端每次访问都应该携带 JWT,可以将放入cookie,但存在跨域问题,好的解决方式是加入 HTTP 请求头 Authorization 中

Authorization: Bearer <token> 
JWT 的特点

1、JWT 脱离了 session 的束缚,服务端不需要再维持 session 状态,但也无法控制 token 的状态了,JWT 一旦签发,在到期之前始终有效,除非服务器有额外的验证逻辑。
2、JWT 可以很方便的支持跨域。
3、JWT 本身包含了验证信息,如果发生泄漏,任何人都可以使用令牌的权限进行请求。
4、JWT 本身不加密,需要通过更安全的 HTTPS 协议传输。

收藏
评论区

相关推荐

【Golang】Golang + jwt 实现简易用户认证
<p本文已同步发布到我的个人博客:<a href"https://links.jianshu.com/go?tohttps%3A%2F%2Fglorin.xyz%2F2019%2F11%2F23%2FGolangjwtsimpleauth%2F" target"_blank"https://glorin.xyz/2019/11/23/Golang
go语言web开发框架_Iris框架讲解(六):Session的使用和控制
在实际的项目开发中,我们会经常有业务场景使用到Session功能。在iris框架中,也为我们提供了方便使用,功能齐全的Session模块。Session模块的源码目录为kataras/iris/sessions包。 Session与Cookie的区别 在学习web开发过程中,我们总会和session和cookie打交道。本节课我们学习sesion相关的
cookie和session的详解与区别
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。 1.1  C
Session原理
\ 开发工具与关键技术:Java,HTTP协议,session原理 撰写时间:20190617 \ 以下这些大多都是文字表达,没有一一写实际的案例出来演示,但是详细的看一下的话,也就知道什么意思了,文中表达比较通俗。 We
iris-session梳理
入口 api : iris.New() api.Adapt(gm.NewSession()) session的构造 go func NewSession() sessions.Sessions { db : redis.New(rs.Config{Network: rs.DefaultRedisNetwork, Ad
PHP Cookie与Session的使用与区别
Cookie与SessionCookie和session是目前使用的两种存储机制。cookie是从一个WEB页到下一个WEB页面的数据传送方法,cookie存储在客户端;Session是让数据在页面中持续有效的一个传递方法,session存储在服务器端。掌握了cookie与session这两个技术,在WEB网站页面间信息传递的安全性是
JWT 认证方案学习
定义JWT (JSON WEB TOKEN) 是一种安全通讯标准,它定义了一种紧凑自包含的方式,用于在各方之间安全的传输 JSON 对象。常见应用场景是API之间的认证通讯。 一般的用户认证流程 1、请求方发送账户密码到服务器,验证账户可用性。 2、验证成功,生成 session,保存在服务端。 3、服务端返回一个 s
PHP 中 firebase/php-jwt RS256 公私钥生成指南
所有关于 openssl_sign(): supplied key param cannot be coerced into a private/public key、Algorithm not allowed 等错误按照文章来一遍,基本就能解决了GitHub 用多了,第一反应用 puttygen.exe 这个程序来生成,得到 id_rsa
Django+Vue开发生鲜电商平台之7.用户登录和注册功能
@toc 聪明是智慧者的天敌,傻瓜用嘴讲话,聪明的人用脑袋讲话,智慧的人用心讲话。所以永远记住,不要把自己当成最聪明的,最聪明的人相信总有别人比自己更聪明。 ——马云Github和Gitee代码同步更新:;。 一、DRF的token基本使用 1.DRF的token登录原理基于DRF的前后端分离登录与单独使用Django登录的原理不同,
JarvisOJ——Web-wp
写在前面 这几天 BUU 平台机房出故障了,回来把 JarvisOJ 平台已经做过的和剩下的 web 全部写一遍 wp 吧,很怀念大一那时候跟鹏神晚上通宵干题的时光,一转眼都过了一年了 PORT51需要用公网的一台服务器访问其 51 端口curl localport 51 http://web.jarvisoj.com:32770/ LOCALHOST添加
每日一题(五)
写在前面继续努力 [CISCN2019 华东南赛区]Double Secret进来一句话,做题全靠猜web 题,直接去/secret目录这句话提到了发送 secret 过去,会有 encrypt加密,get 一个 secretadmin123过去直接进报错,又是 flask发现可疑的源码泄露点pythonif(secretNone): return '
Java面试真题解析火爆全网,讲的太透彻了
8.15 一面 (60min) 自我介绍,为什么投客户端 python和java有什么区别 java内存模型 gc讲讲 http https区别 cookie,session https握手过程 对称非对称加密算法?哪个效率高? tcp握手要三次,挥手要几次,为什么 进程和线程,描述一下 进程通信方式 线程同步
盘点Python网页开发轻量级框架Flask知识(上篇)
前言今天来给大家说一个Python的轻量级web开发框架Flask,为什么要推荐它呢?当然是因为它够轻量级了,开发迅速是它的特点,当然它也有缺点,不过这里不说,因为既用它又说它差感觉不好。一、安装flaskpip install flask 需要注意的是,还有flake,那个是检查错误的模块,不要搞混了可以看到成功了,总共下载了四个模块,分别是对应的web开
BAT这种大厂履历意味着什么?面试篇
8.15 一面 (60min) 自我介绍,为什么投客户端 python和java有什么区别 java内存模型 gc讲讲 http https区别 cookie,session https握手过程 对称非对称加密算法?哪个效率高? tcp握手要三次,挥手要几次,为什么 进程和线程,描述一下 进程通信方式 线程同步
个人博客开发之技术选型规划
项目技术1. SpringBoot2.4.7 技术栈2. MybatisPlus3.4.x ORM框架3. Mysql8.0 数据库4. IDEA 2021 开发工具5. Mac pro 电脑6. Redis 缓存7. Thymeleaf 模版引擎 项目架构1. 打算用现在最流行的架构模式,前后端分离,采用RESTful API 规范风格json api