JWT介绍

JSON Web Token的简称

  用户登录之后,在服务端生成jwt,然后服务端将jwt发送给用户端,然后客户端将jwt存到cookie里面,以后客户端每次向服务端通信都会携带jwt,服务端收到这个jwt就能解析用户的身份

jwt分成三部分:头部header   数据playload   签名signature,中间用.进行拼接,组成一个字符串

(1)header是一个json对象使用Base64URL转成的字符串:原始json 包含两个信息,第一个属性type指定token的类型,这里是JWT,最重要的是第二个属性alg,指定第三部分签名signature所使用的算法,默认是HSA256,然后将这个Json对象使用Base64URL转成字符串

(2)playload也是一个Json对象,用来存放实际需要传递的数据,这个Json对象也会使用Base64URL转成字符串

(3)signature:使用header里面的加密算法,对header,playload,服务端的密钥(可能是一个字符串,比如说“secret”)使用header中规定的HSA256算法进行加密,得到字符串signature

这里secret就是服务端的密匙

最后JWT由以上三部分组成,部分与部分之间用点作为分隔 :

总结jwt的生成流程:

 

jwt在项目中怎么使用:

step1加入jwt依赖

	<dependency>
			<groupId>com.auth0</groupId>
			<artifactId>java-jwt</artifactId>
			<version>4.1.0</version>
	</dependency>

step2:加密和解密

    String signature="admin";
    public void jwt()
    {
        //算出一天有多少毫秒,注意是为了后面设置jwt有效时间做准备
        long time=1000*60*60*24;



        //创建一个Jwt对象
        JwtBuilder jwtBuilder=Jwts.builder();

        //设置一个JWT的三部分:Header,Payload,Signature
        String jwtToken=jwtBuilder.setHeaderParam("Type","JWT")
                                  .setHeaderParam("alg","HS256")

                                  //上面是设置Header,下面设置payload载荷
                                  .claim("username","tom")//添加payload载荷
                                  .claim("role","tom")
                                  .setSubject("admin-test")//设置子主题,这个可以自己加
                                  .setExpiration(System.currentTimeMillis()+time)//设置有效时间,当前时间+24小时
                                  .setId(UUID.randomUUID().toString())

                                   //接下来设置Signature
                                   .signWith(SignatureAlgorithm.HS256,signature)
                                   .compact();//将三部分用点进行拼接
        System.out.println(jwtToken);//可以打印出jwt:XXXXX.XXXXX.XXXXX
    }

    //对上面生成的jwt进行解密
    public  void  Decoder()
    {
        String  token="XXXXX.XXXXX.XXXXX";
        JWTParser jwtParser=Jwts.parser();

        jwtParser.setSigningKey(signature).parseClaimsJws(token);

        Claims  claims=claimsJws.getBody();


        //接下来就可以拿到jwt里面Payload负载信息了
        claims.get("username");

        claims.get("role");

        claims.getId();

        claims.getSubject();
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JWT(JSON Web Token)是一种用于在网络应用程序之间安全传输信息的开放标准。它以 JSON 为基础并使用数字签名或消息认证码(MAC)来验证信息的完整性和真实性。 JWT 由三个部分组成:头部、载荷和签名。 头部包含 JWT 使用的签名算法信息,例如 HMAC SHA256 或 RSA。载荷包含需要传输的信息,例如用户 ID 或权限信息。签名是将头部、载荷和秘钥组合后生成的哈希值,用于验证信息的真实性。 JWT 的工作原理如下: 1. 用户使用用户名和密码进行身份验证。 2. 服务器验证用户名和密码的正确性。 3. 如果验证成功,服务器生成 JWT 并将其发送回客户端。 4. 客户端将 JWT 存储在本地并在每个后续请求中将其包含在请求头部中。 5. 服务器在接收到请求时,验证 JWT 的签名并检查载荷中的信息是否与所需的一致。如果验证成功,服务器会处理请求。 JWT 的优点是: 1. 轻量级和简单:JWT 以 JSON 格式编码,易于理解和实现。 2. 安全性:使用数字签名或消息认证码(MAC)验证信息的完整性和真实性,确保信息不被篡改或伪造。 3. 可扩展性:JWT 载荷可以包含任意数量的属性和元数据,使其非常适合用于身份验证和授权。 4. 无状态:JWT 包含所有必要的信息,因此服务器不需要存储任何会话信息,使其易于扩展和实现负载均衡。 然而,JWT 也存在一些缺点,例如: 1. JWT 一旦生成就无法撤销,因此必须确保密钥的安全性。 2. JWT 中包含的信息对于攻击者来说是可见的,因此敏感信息不应该存储在 JWT 中。 3. JWT 无法在传输过程中进行更新,因此在过期之前必须生成新的 JWT。 总体来说,JWT 是一种非常有用的身份验证和授权解决方案,但在使用时需要仔细考虑其安全性和缺点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值