JWT token无效invalid signature

django+ JWT 生成发token无效

请求需要验证的接口,返回

invalid signature

 

我的user模型是这样的

 

 

后面看https://www.jianshu.com/p/f0a55f39dfa8链接说,jwt生成token时默认是需要用到username,并且username需要保证唯一,或者重写UserManager的get_by_natural_key方法

所以解决方法有两个:

方法1.username需要修改为唯一约束,修改迁移后只对后续用户有效,以前同username的token还是会无效,修改username也还是会无效

 

方法2.

重写UserManager的get_by_natural_key方法,查询的必须是唯一值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现JWT token的刷新可以通过以下步骤: 1. 在生成JWT token时,将过期时间(exp)设置为一个较短的时间,比如10分钟。 2. 在生成JWT token时,将JWT的唯一标识符(jti)设置为一个随机的字符串,并将其存储在服务器端的缓存或数据库中。 3. 当JWT token过期时,客户端需要向服务器发送一个请求,请求刷新JWT token。 4. 服务器端验证客户端请求中的JWT token是否过期,并检查其jti是否存在于缓存或数据库中。如果验证通过,则生成一个新的JWT token,并将其返回给客户端。 5. 客户端收到新的JWT token后,将其保存到本地,并在下一次请求时使用它。 下面是一个使用Java实现JWT token刷新的示例代码: ```java public class JwtUtils { private static final String SECRET_KEY = "your_secret_key"; private static final long EXPIRATION_TIME = 10 * 60 * 1000; // 10 minutes private static final String TOKEN_PREFIX = "Bearer "; public static String generateToken(String username) { String jwt = Jwts.builder() .setId(UUID.randomUUID().toString()) .setSubject(username) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) .signWith(SignatureAlgorithm.HS512, SECRET_KEY) .compact(); return TOKEN_PREFIX + jwt; } public static String refreshToken(String token) { Claims claims = Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token.replace(TOKEN_PREFIX, "")) .getBody(); String username = claims.getSubject(); String jti = claims.getId(); // check if jti exists in cache or database if (isJtiValid(jti)) { return generateToken(username); } else { throw new JwtException("Invalid token"); } } private static boolean isJtiValid(String jti) { // check if jti exists in cache or database // return true if jti is valid, false otherwise } } ``` 在这个示例代码中,generateToken()方法用于生成JWT token,refreshToken()方法用于刷新JWT token。在刷新JWT token时,我们首先解析出原始token中的username和jti,然后检查jti是否存在于缓存或数据库中。如果jti是有效的,则生成一个新的JWT token并返回给客户端;否则,抛出一个JwtException异常。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值