JWT令牌实现登录认证

JWT令牌

简介

全称:JSON Web Token(JSON Web Tokens - jwt.io)

定义了一种简洁、自包含的格式,用于通信双方以json数据格式安全的传输信息。

组成:

第一部分:Header(头),记录令牌类型,签名算法等,例如{"alg":"HS256","type":"JWT"}

第二部分:Payload(有效载荷),携带一些自定义信息,默认信息等。例如:{"id":"1","username":"Tom"}

第三部分:Signature(签名),防止Token被篡改、确保安全性。将header、payload、并加入指定秘钥,通过指定签名算法计算而来

引入依赖

<!--    jwt坐标-->
    <dependency>
      <groupId>com.auth0</groupId>
      <artifactId>java-jwt</artifactId>
      <version>4.4.0</version>
    </dependency>
<!--    test-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>

创建测试类

package org.example;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import org.junit.jupiter.api.Test;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JwtTest {
    @Test
    public void testGen(){
        Map<String,Object> claims=new HashMap<>();
        claims.put("id",1);
        claims.put("username","张三");
//        生成jwt代码
        String token= JWT.create()
                .withClaim("user",claims)//添加载荷
                .withExpiresAt(new Date(System.currentTimeMillis()+1000*60*60*12))//有效时间
                .sign(Algorithm.HMAC256("szpnkswdzaqpa"));//制定算法配置秘钥
        System.out.println(token);

    }
}

生成token令牌

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6IuW8oOS4iSJ9LCJleHAiOjE3MDU5MzUzNjV9.hPyWHNsE-VFA-TaItLAa0ExVDMNDgk15Pn98F1sygNo

JWT验证

测试验证

@Test
public void testParse(){
    String token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" +
            ".eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6IuW8oOS4iSJ9LCJleHAiOjE3MDU5MzUzNjV9" +
            ".hPyWHNsE-VFA-TaItLAa0ExVDMNDgk15Pn98F1sygNo";
    JWTVerifier jwtVerifier= JWT.require(Algorithm.HMAC256("szpnkswdzaqpa")).build();
    DecodedJWT decodedJWT=jwtVerifier.verify(token);//验证token生成一个解析后的JWt对象
    Map<String, Claim> claims=decodedJWT.getClaims();
    System.out.println(claims.get("user"));
}

验证失败原因

篡改了头部和载荷数据部分验证失败
篡改秘钥验证失败
生成的token过期验证失败

注意事项

JWT校验时使用的签名秘钥,必须和生成 JWT 令牌时使用的秘钥是配套的 。

如果 JWT令牌解析校验时报错,则说明JWT令牌被篡改或失效了,令牌非法 。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值