Token和Refresh Token

这篇具有很好参考价值的文章主要介绍了Token和Refresh Token。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Token

在计算机身份认证中代表令牌,在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位。

1.1、Jwt简介

JWT(JSON Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。

它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证;应用场景如用户登录。

1.2、为什么有Jwt

目前主流的Web开发模式有两种:

  • 基于服务端渲染的传统Web开发模式
  • 基于前后端分离的新型Web开发模式

对于这两种开发模式的身份认证,服务端渲染推荐使用 Session认证机制,前后端分离推荐使用JWT认证机制。

对于传统的session认证,因为HTTP是无协议的,为了记住用户状态,服务器在用户第一次访问时会返回一个cookie同时服务端保存一个对应的session,但是这种基于session的认证使应用本身很难得到扩展,随着不同客户端用户的增加,大量session会话的创建对服务器是一个巨大的开销;

同时,当服务端为集群时,用户登录其中一台服务器,会将session保存在该服务器的内存中,
只有再次访问这台服务器才能拿到授权资源。

另外session认证机制依赖Cookie,但是Cookie默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现跨域Session认证。这就有了JWT的出现,流程上是这样的:

  • 用户使用用户名密码来请求服务器
  • 服务器进行验证用户的信息
  • 服务器通过验证发送给用户一个token
  • 客户端存储token,并在每次请求时附送上这个token值
  • 服务端验证token值,并返回数据

token和refreshtoken,web,网络安全,后端

1.3、Jwt Token结构

JWT由三部分构成,第一部分我们称它为头部(header),第二部分我们称其为载荷(payload),第三部分是签证(signature)。

  • header:Header通常由两部分组成:令牌的类型,即JWT。和常用的散列算法,如HMAC SHA256或RSA。

{
“typ”: “JWT”,
“alg”: “HS256”
}
由上可知,该token使用HS256加密算法,将头部进行base64加密(该加密是可以对称解密的),构成了第一部分:
eyJhbGciOiJIUzI1NiJ91

  • Playload:载荷就是存放有效信息的地方,这些有效信息包含三个部分

    1、 Registered claims(注册声明): 这些是一组预先定义的声明,它们不是强制性的,但推荐使用,以提供一组有用的,可互操作的声明。 其中一些是:iss(发行者),exp(到期时间),sub(主题),aud(受众)等
    2、Public claims (公开声明): 公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密。
    3、Private claims(私有声明): 私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。

{
“iss”: “Online JWT Builder”,
“iat”: 1416797419,
“exp”: 1448333419,
…….
“userid”:10001
}
有效载荷中存放了token的签发者(iss)、签发时间(iat)、过期时间(exp)等以及一些我们需要写进token中的信息。然后将其进行base64加密,得到Jwt的第二部分:
eyJ1c2VyaWQiOjB91

  • Signature:这个部分需要base64加密后的header和base64加密后的payload使用,连接组成的字符串(头部在前),然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。

例如头部与载体加密拼接后的字符串为eyJhbGciOiJIUzI1NiJ91.eyJ1c2VyaWQiOjB91再次利用加密算法(HS256)与自定义的密钥(secret)加密得到签名部分字符:
rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM
将上面三个方法生成的字符串再次拼接就得到了完整的Token:
eyJhbGciOiJIUzI1NiJ91.eyJ1c2VyaWQiOjB91.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM

如果服务器应用对头部和载荷再次以同样方法签名之后发现,自己计算出来的签名和接受到的签名不一样,那么就说明这个Token的内容被别人动过的,我们应该拒绝这个Token

1.4、JWT的优缺点

  • 优点
    1、因为json的通用性,所以JWT是可以进行跨语言支持的,像JAVA,JavaScript,NodeJS,PHP等很多语言都可以使用。
    2、payload可以在自身存储一些其他业务逻辑所必要的非敏感信息。
    3、它不需要在服务端保存会话信息, 所以它易于应用的扩展

  • 缺点
    1、安全性:由于JWT的payload是使用Base64编码的,并没有加密,因此JWT中不能存储敏感数据。而Session的信息是存在服务端的,相对来说更安全。
    2、一次性:无状态是JWT的特点,但也导致了这个问题,JWT是一次性的。想修改里面的内容,就必须签发一个新的JWT。即缺陷是一旦下发,服务后台无法拒绝携带该jwt的请求(如踢除用户)

二、Refresh Token

Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位,而Token的playload部分一般会存储相关的过期时间,一旦Token过期就会被拦截,因此如何设置Token刷新机制也是一个重点。

过长的过期时间会让系统有长期暴露在接口的风险,理论上过期时间越短越好,但是过短的时间明显会带来不好的用户体验。那么我们可以考虑使用Refresh Token刷新,一旦 Token 过期,就反馈给前端,前端使用 Refresh Token 申请一个全新 Token 继续使用。

这种方案中,服务端只需要在客户端请求更新 Token 的时候对 Refresh Token 的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。

2.1、实现原理

前端第一次发起请求时,后端准备两个 token,一个有效时间较短的作为认证 token(token),一个有效时间较长的作为刷新 token(refreshToken),返回给前端。

前端拿到两个 token 后,把它们都存储在 localStorage 中,后面再次发起请求时携带两个token:

  • token 未过期时,可以正常请求。
  • token 过期了,refreshToken 未过期,请求后端的刷新token接口对两个token进行更新并返回给前端。
  • token 和 refreshToken 均过期了,则用户必须重新登录。

2.2、代码实现

demo:
Token refresh的实现文章来源地址https://www.toymoban.com/news/detail-744718.html

到了这里,关于Token和Refresh Token的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web 学习笔记 - 网络安全

    目录 m前言 正文 XSS 攻击 简单示例 XSS 防御 CSRF  Web 安全方面的基本知识是有很必要的,未必就要深入理解。本文主要介绍常见的网络攻击类型,不作深入探讨。 网络攻击的形式种类繁多,从简单的网站敏感文件扫描、弱口令暴力破解,到 SQL 注入,再到复杂的网络劫持等,

    2023年04月24日
    浏览(49)
  • 网络安全——Web目录扫描

    一、Web目录扫描原因 1、发现网站后台管理登录页面,可以尝试发现漏洞,进行爆破 2、寻找未授权页面,有些网站在开发时有一些没有授权的页面,在上线后没有及时清除,可以利用这个弱点进行入侵 3、寻找网站更多隐藏信息 二、Web目录扫描方法 1、robots.txt  例:可以看到

    2024年02月05日
    浏览(46)
  • 【web网络安全基础阶段一】

    在学习web网络安全,需要了解web安全前端基础,我将会从HTML,CSS,JavaScript前端技术,以及HTTP协议运作原理进行阐述。 前端技术作用 前端开发是创建Web页面或App等前端界面呈现给用户的过程。 • HTML,CSS及JavaScript • 网页制作是Web1.0时代的产物,早期网站主要内容都是静态

    2024年04月25日
    浏览(41)
  • 网络安全CTF之Web基础

    Web类的考试,在CTF比赛中十分常见。 本人从计算机专业转网络安全发展,属于半路出家,一知半解,如有总结不到位的地方,欢迎交流分享。 攻防世界Web Web基础中,常见的考点如下: 1、源代码隐藏 打开网页,显示 FLAG is not here。 F12查看源代码,取得flag 2、GET和POST传参 G

    2024年02月07日
    浏览(50)
  • 浅谈网络爬虫与Web安全

           网络爬虫(Web Crawler) ,又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种按照一定的规则自动抓取万维网资源的程序或者脚本,已被广泛应用于互联网领域。搜索引擎使用网络爬虫抓取Web网页、文档甚至图片、音频、视频等资源,通过相应的索引技术组织这些信息

    2024年03月10日
    浏览(50)
  • 网络安全入门 5 天速成教程_ WEB 安全渗透攻防技术

    前言 随着 Web 技术发展越来越成熟,而非 Web 服务越来越少的暴露在互联网上,现在互联网安全主要指的是 Web 安全。 为了自身不“裸奔”在大数据里,渐渐开始学习 Web 安全,在学习 Web 安全的过程中,发现很大一部分知识点都相对零散,如果没有相对清晰 的脉络作为参考,

    2024年04月23日
    浏览(49)
  • 零基础自学网络安全/web安全,看这一篇就够了

    作为一个安全从业人员,我自知web安全的概念太过于宽泛,我本人了解的也并不够精深,还需要继续学习。 但看到这个问题之后又想说说自己的看法,所以今天随手写写关于web安全的内容,希望对初次遇到web安全问题的同学提供帮助! 我先把自己整理的web安全自学路线贴出

    2024年02月06日
    浏览(83)
  • 零基础如何学习Web 安全,如何让普通人快速入门网络安全?、

    网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多不用怕,以后各大厂也都会要网络安全人员,后续法律也会改革,网络安全只会

    2024年04月22日
    浏览(59)
  • 零基础如何学习 Web 安全,如何让普通人快速入门网络安全?

    前言 网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 【一一帮助安全学习(网络安全面试题+学习路线+视频教程+工具)一一】 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多

    2024年02月12日
    浏览(68)
  • 网络安全kali web安全 Kali之msf简单的漏洞利用

    靶机的IP地址为:192.168.173.136 利用nmap工具扫描其开放端口、系统等 整理一下目标系统的相关信息 系统版本:Windows server 2003 开放的端口及服务: 从扫描出的端口发现,目标主机开启了135端口,服务为msrpc(远程过程调用服务),即Windows的RPC服务。 ​针对这个服务,我们就可

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包