2016-05-17 242 views
0

我有以下情况,在我的vertx应用程序中,我有一个端点/登录名,在收到正确的凭证后发出30分钟有效的JWT。Vert.X检查JWT令牌的过期时间

我使用此令牌来保护/ api/*端点下的所有路由。

所有这些都按预期工作。

我的问题是,我希望能够拦截这些/ api/*请求,并在做令牌认证之前检查令牌,如果它即将到期生成一个新的可以返回响应的标题,以便客户端可以在随后的请求中使用它。

我想实现的是:

  1. ,不发给永久有效令牌,就好像泄露我没有办法阻止访问应用程序
  2. 避免维护的anykind
  3. 避免令牌黑名单发行非常短的生活代币并在每个请求中重新发行

一般来说,任何一种策略都是受欢迎的。

感谢

+0

您是否尝试过多次添加相同的路线?见http://vertx.io/docs/vertx-web/java/#_route_order – alexvetter

+0

嗨@alexvetter,我没有拦截路线的问题,我的问题是与检查令牌的机制,无论是我还是vertx缺乏这种能力。有一件事我可能会错过要注意的是,我正在使用JavaScript。 – bulforce

+1

姆姆,JWT包含在标题和['JWTAuthHandlerImpl'](https://github.com/vert-x3/vertx-web/blob/master/vertx-web/src/main/java/io/ vertx/ext/web/handler/impl/JWTAuthHandlerImpl.java)解析标题。也许你需要实现类似于'JWTAuthHandlerImpl'的东西。 – alexvetter

回答

2

为了处理JWT验证之前的请求,所有你需要做的是验证处理例如为:

路由器路由器= 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"));