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>
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.