我對Web令牌安全性並不熟悉,我試圖實現一個目前無法運行的場景。我已經看過很多教程和代碼示例和項目,但它們要麼太高級,只有大量的代碼,或者明確聲明此代碼僅用於學習目的,並非用於生產。使用JWT在JAVA中保護REST服務ee
我的要求如下:
我有3個服務需要由多個外部的經銷商網絡應用程序調用。
我需要確保從經銷商應用程序的電話到我們的應用程序。我們將使用SSL進行通信。
我正在使用JBOSS EAP7和Java EE,我打算使用JWT的實現(如jjwt)。
從我在網上找到的典型場景是,客戶端應用程序首先調用身份驗證服務(我們編寫)傳遞應用程序標識和祕密(字符串)密碼以獲取JWT令牌。在此之後,應用程序會在每次調用這3個服務時傳遞該令牌,並且我們必須在遵守每個請求之前對其進行驗證。
我的問題有以下幾點:
- 當應用程序調用獲得令牌,它需要通過這一要求與我們提供或沒有必要,因爲我們使用SSL的公共密鑰加密? 如果我們需要使用私鑰/公鑰,有沒有一個簡單的例子來說明如何使用Java生成這些私鑰,以及如何使用它們來加密/解密請求?
令牌生成。我不確定在發送它之前是否需要加密令牌本身。一些網站談論使用base64加密,並且一些人談論用私鑰加密簽名。我對JWS和JWE的概念感到困惑。有沒有一個很好的例子或教程可以指導我如何安全地生成令牌?
在這樣的情況下,JWT令牌的典型到期時間是什麼?他們是否需要在每次服務調用之前調用並獲取新令牌?如果令牌已過期,那麼客戶端應用程序在再次調用之前是否必須檢查它是否過期,或者等到我們的服務返回錯誤?
有沒有一個簡單的例子,說明如何傳遞一個請求令牌以及如何在服務器上驗證它?
客戶端應用程序是否需要將令牌存儲在Cookie或會話中,如果它可以重用?
謝謝