今天在使用 jwt 的时候遇到一点疑问,没有想明白,来请教一下各位大佬
資深大佬 : zhongpingjing 9
token 在签发后,校验的时候发现,payload 部分的内容如果有值,但是传参为 null 时却能校验通过
具体案例如下
token 解析后 payload 的内容
{ "institutionId":10, "id":1, "isAdmin":true, "exp":1603180144 }
institutionId 为 10,但是校验的时候,institutionId 输入 null 却能够通过,institutionId 为其他数字就不会通过。这是为什么?这是个 bug 吗?
我想为 null 时,如果与 payload 的内容不一致时校验无法通过,应该怎么做?
测试代码
public static void main(String[] args) { String password = "$2a$10$G2GVQwHC1ankbyEu3nSAS.gWosqEyzg5pAzFbbxa9gLHhtgBq7DJ."; String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpbnN0aXR1dGlvbklkIjoxMCwiaWQiOjEsImlzQWRtaW4iOnRydWUsImV4cCI6MTYwMzE4MDE0NH0.9d1W50_xnfU4kT0-YWYUkPV-gM8GWa_-U6nCbuEnC84"; boolean verify1 = verify(token, password,null); System.out.println(verify1); // true 这里我期待的结果是 false,应该怎么做 boolean verify2 = verify(token, password,1L); System.out.println(verify2); // false boolean verify3 = verify(token, password,10L); System.out.println(verify3); // true }
检验方法
public static boolean verify(String token,String password,Long institutionId) { try { Algorithm algorithm = Algorithm.HMAC256(password); JWTVerifier verifier = JWT.require(algorithm) .withClaim("institutionId",institutionId) .build(); verifier.verify(token); return true; } catch (Exception exception) { return false; } }
jwt 库
<dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.8.1</version> </dependency>
大佬有話說 (19)