面试官:Session和JWT有什么区别?

目录

  1. 引言
  2. 什么是JWT?
  3. JWT优点分析
  4. JWT基本使用
  5. JWT实现原理
  6. Session VS JWT
  7. 总结

引言

在用户和服务器之间建立认证状态是Web开发中常见的需求。SessionJWT(JSON Web Token)是两种常用的机制,但它们在工作原理、存储方式和安全性等方面存在差异。

什么是JWT?

JWT是一种开放标准(RFC 7519),用于在网络上安全传输信息的简洁、自包含的方式。它通常被用于身份验证和授权机制。JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

  • 头部(Header):包含了关于生成该JWT的信息以及所使用的算法类型。
  • 载荷(Payload):包含了要传递的数据,例如身份信息和其他附属数据。JWT官方规定了7个字段,可供使用:
    • iss (Issuer):签发者。
    • sub (Subject):主题。
    • aud (Audience):接收者。
    • exp (Expiration time):过期时间。
    • nbf (Not Before):生效时间。
    • iat (Issued At):签发时间。
    • jti (JWT ID):编号。
  • 签名(Signature):使用密钥对头部和载荷进行签名,以验证其完整性。

JWT优点分析

相较于传统的基于会话(Session)的认证机制,JWT具有以下优势:

  • 无需服务器存储状态:服务器无需存储任何会话状态信息,所有的认证和授权信息都包含在JWT中。
  • 跨域支持JWT可以轻松地在多个域之间进行传递和使用,实现跨域授权。
  • 适应微服务架构:在微服务架构中,很多服务是独立部署并且可以横向扩展的,这就需要保证认证和授权的无状态性。
  • 自包含JWT包含了认证和授权信息,以及其他自定义的声明,这些信息都被编码在JWT中。
  • 扩展性JWT可以被扩展和定制,可以按照需求添加自定义的声明和数据。

JWT基本使用

在Java开发中,可以借助JWT工具类来方便的操作JWT,例如HuTool框架中的JWTUtil

3.1 添加HuTool框架依赖

pom.xml中添加以下依赖:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>

3.2 生成Token

Map<String, Object> map = new HashMap<String, Object>() {
   
   
    private static final long serialVersionUID = 1L;
    {
   
   
        put("uid", Integer.parseInt("123")); // 用户ID
        put("expire_time", System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 15); // 过
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值