2016-05-17 239 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"));