我有以下场景,在我的 vertx 应用程序中,我有一个端点/login,在收到正确的凭据后,会发出一个有效期为 30 分钟的 JWT。
我使用此 token 来保护/api/* 端点下的所有路由。
所有这些都按预期进行。
我的问题是,我希望能够拦截这些/api/* 请求,并在进行 token 身份验证之前检查 token ,以及 token 是否即将过期,以生成可以在 header 中返回的新 token 响应,以便客户端可以在后续请求中使用它。
我想要实现的是:
- 避免发放永远有效的 token ,就像泄露一样,我无法阻止对应用程序的访问
- 避免维护任何类型的 token 黑名单
- 避免必须发行非常短的生存代币并根据每个请求重新发行这些代币
总的来说,任何类型的策略都是受欢迎的。
谢谢
最佳答案
为了在 JWT 验证之前处理请求,您需要做的就是在 Auth 处理程序之前添加自定义处理程序,例如:
路由器router = Router.router(vertx);
// Create a JWT Auth Provider
JWTAuth jwt = JWTAuth.create(vertx, new JsonObject()
.put("keyStore", new JsonObject()
.put("type", "jceks")
.put("path", "keystore.jceks")
.put("password", "secret")));
router.route("/api/*").handler(ctx -> {
// here do what you're planning to achieve, and the call
ctx.next();
});
// protect the API
router.route("/api/*").handler(JWTAuthHandler.create(jwt, "/api/newToken"));
关于jwt - Vert.X 检查 JWT token 的过期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37282043/