首页 > 其他分享 >认证授权JWT

认证授权JWT

时间:2024-01-15 18:13:56浏览次数:43  
标签:过期 JWT 认证 accessJWT 授权 Payload 服务端 客户端

JWT

1、从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。

JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力(因为session还需要保存,但是jwt只要签名验证没有问题就可以解密出来用了啊)

 

JWT 本质上就是一组字串,通过(.)切分成三个为 Base64 编码的部分:

 

 

  • Header : 描述 JWT 的元数据,定义了生成签名的算法以及 Token 的类型。
  • Payload : 用来存放实际需要传递的数据,Payload 部分默认是不加密的,一定不要将隐私信息存放在 Payload 当中!!!
  • Signature(签名) :服务器通过 Payload、Header 和一个密钥(Secret)使用 Header 里面指定的签名算法(默认是 HMAC SHA256)生成。

 

 

 

 

 

2、如何基于 JWT 进行身份验证?

 

 

在基于 JWT 进行身份验证的的应用程序中,服务器通过 Payload、Header 和 Secret(密钥)创建 JWT 并将 JWT 发送给客户端。客户端接收到 JWT 之后,会将其保存在 Cookie 或者 localStorage 里面,以后客户端发出的所有请求都会携带这个令牌。

 

 

 

 

3、如何加强 JWT 的安全性?
  1. 使用安全系数高的加密算法。
  2. 使用成熟的开源库,没必要造轮子。
  3. JWT 存放在 localStorage 中而不是 Cookie 中,避免 CSRF 风险。
  4. 一定不要将隐私信息存放在 Payload 当中。
  5. 密钥一定保管好,一定不要泄露出去。JWT 安全的核心在于签名,签名安全的核心在密钥。
  6. Payload 要加入 exp (JWT 的过期时间),永久有效的 JWT 不合理。并且,JWT 的过期时间不易过长。
  4、常见的避免 XSS 攻击的方式是过滤掉请求中存在 XSS 攻击风险的可疑字符串。

在 Spring 项目中,我们一般是通过创建 XSS 过滤器来实现的。

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class XSSFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
        XSSRequestWrapper wrappedRequest =
          new XSSRequestWrapper((HttpServletRequest) request);
        chain.doFilter(wrappedRequest, response);
    }

    // other methods
}
  5、注销登录等场景下 JWT 还有效解决方法

5.1、将 JWT 存入内存数据库

将 JWT 存入 DB 中,Redis 内存数据库在这里是不错的选择。如果需要让某个 JWT 失效就直接从 Redis 中删除这个 JWT 即可。但是,这样会导致每次使用 JWT 发送请求都要先从 DB 中查询 JWT 是否存在的步骤,而且违背了 JWT 的无状态原则。

5.2、黑名单机制

和上面的方式类似,使用内存数据库比如 Redis 维护一个黑名单,如果想让某个 JWT 失效的话就直接将这个 JWT 加入到 黑名单 即可。然后,每次使用 JWT 进行请求的话都会先判断这个 JWT 是否存在于黑名单中。

前两种方案的核心在于将有效的 JWT 存储起来或者将指定的 JWT 拉入黑名单。

虽然这两种方案都违背了 JWT 的无状态原则,但是一般实际项目中我们通常还是会使用这两种方案。

5.3、修改密钥 (Secret) :分布式下不友好

 

6、JWT 的续签问题

1、类似于 Session 认证中的做法

这种方案满足于大部分场景。假设服务端给的 JWT 有效期设置为 30 分钟,服务端每次进行校验时,如果发现 JWT 的有效期马上快过期了,服务端就重新生成 JWT 给客户端。客户端每次请求都检查新旧 JWT,如果不一致,则更新本地的 JWT。这种做法的问题是仅仅在快过期的时候请求才会更新 JWT ,对客户端不是很友好。

2、每次请求都返回新 JWT

这种方案的的思路很简单,但是,开销会比较大,尤其是在服务端要存储维护 JWT 的情况下。

3、JWT 有效期设置到半夜

这种方案是一种折衷的方案,保证了大部分用户白天可以正常登录,适用于对安全性要求不高的系统。

4、用户登录返回两个 JWT

第一个是 accessJWT ,它的过期时间 JWT 本身的过期时间比如半个小时,另外一个是 refreshJWT 它的过期时间更长一点比如为 1 天。客户端登录后,将 accessJWT 和 refreshJWT 保存在本地,每次访问将 accessJWT 传给服务端。服务端校验 accessJWT 的有效性,如果过期的话,就将 refreshJWT 传给服务端。如果有效,服务端就生成新的 accessJWT 给客户端。否则,客户端就重新登录即可。

这种方案的不足是:

  • 需要客户端来配合;
  • 用户注销的时候需要同时保证两个 JWT 都无效;
  • 重新请求获取 JWT 的过程中会有短暂 JWT 不可用的情况(可以通过在客户端设置定时器,当 accessJWT 快过期的时候,提前去通过 refreshJWT 获取新的 accessJWT);
  • 存在安全问题,只要拿到了未过期的 refreshJWT 就一直可以获取到 accessJWT。

标签:过期,JWT,认证,accessJWT,授权,Payload,服务端,客户端
From: https://www.cnblogs.com/lengsong/p/17965957

相关文章

  • 3C认证项目认证申请资料 CCC认证流程
    3C认证项目认证申请资料:1、强制性产品认证申请书。2、申请人的《企业法人营业执照》或登记注册证明复印件(初次申请或变更时提供);3、生产厂的组织结构图(初次申请或变更时提供);4、申请认证产品工艺流程图(初次申请或变更时提供);5、例行检验用关键仪器设备(见认证实施规则工厂质量控制检......
  • 电子产品出口欧盟如何办理CE认证
    欧盟CE认证办理流程:申请(1.填写申请表2.提供资料并寄样);报价(根据您提供的资料会有工程师来拟定相应的标准,测试时间及相应费用);付款(申请人确认报价后,签订立案申请表及服务协议并支付款项);测试(实验室根据相关的欧盟检测标准对所申请产品进行全套测试);测试通过,报告完成;项......
  • 蓝牙音响CEC认证办理流程
    一、CEC认证是什么?CEC认证怎么申请,流程是什么?符合了CEC认证的要求,产品才能在美国加利福尼亚州销售与流通,不然产品是无法在美国加利福尼亚州正常流通与销售的。CEC认证是美国加利福尼亚州能效认证,蓝牙音响做为一款需要依靠内置锂电池来供电的电子产品,它在CEC认证标准中属于smallbatt......
  • Django rest_framework用户认证和权限
    完整的代码https://gitee.com/mom925/django-system使用jwt实现用户认证pipinstalldjangorestframework-simplejwt重新定义一下User类classUsers(AbstractUser):classMeta:db_table="system_users"verbose_name="用户表"......
  • SpringSecurity表单认证(一)
    配置类创建securityConfig,并继承WebSecurityConfigurerAdapter,它是web应用的安全适配器重写configure方法,共有三个,重写参数为http的configure方法configure(HttpSecurityhttp)方法,配置表单登陆认证方法,任何请求都需要表单认证@Overrideprotectedvoidconfigure(HttpSe......
  • 喜报!思迈特荣获DCMM稳健级认证,数据管理能力达国家标准
    近日,经中国电子信息行业联合组织主办的数据管理能力成熟度评估(简称DCMM)专家评审会的严格审查,思迈特成功取得DCMM稳健级(乙方三级)证书。这一成就标志着在数据战略和执行方面,思迈特取得了显著的进展,其数据管理能力已达到行业领先水平。DCMM是我国数据管理领域的国家级评估标准,自2018年......
  • 聊城申请ISO认证包含了哪些内容有什么好处
    聊城申请ISO认证包含了哪些内容有什么好处恒标知产刘经理 什么是ISO?ISO是世界上最大的国际标准化组织(InternationalOrganizationforStandardization)的简称。它成立于1947年2月23日,它的前身是1928年成立的“国际标准化协会国际联合会”(简称ISA)。ISO的成员由来自世界上100多个......
  • Visual Studio 2010 授权修改
    参见以下步骤:32位的系统中,修改以下注册表键值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Registration\UserNameHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\RegisteredOrganization64位系统,修改以下注册表键值HKEY_LOCAL_MACHINE\SOFT......
  • Rsync未授权访问漏洞
    开设这个随笔主要是因为最近在学习王放do9gy老师的web漏洞解析与攻防实战。顺便完成里面的配套实验了,其实大部分靶场都是来在vulhub,相当于对人家的靶场进行依次复现了。内容可以在https://vulhub.org/#/environments/rsync/common/见到。毕竟理论是理论,实战是实战。搭建个靶场......
  • 每日一练 | 华为认证真题练习Day164
    1、当两台BGP邻居协商的HOLDTime参数为0时,则不发送Keeplive报文。A.正确B.错误2、ospf路由协议中,bandwidth-reference命令的单位是mbps。A.正确B.错误3、在OSPF广播或者NBMA网络类型中,ROUTERPRIORITY大的设备不一定会成为DR。A.正确B.错误4、在广播或nbma网络上,并非所有的......