2016-07-22 70 views
2

我有一個多微服務體系結構,我打算應用安全性。

我的安全設計觀: 認證將與LDAP和發生在用戶身份驗證的JSON網絡令牌(JWT)將使用一個「密鑰」和令牌將有角色得到產生,到期時間等。每次調用微服務時,都會將此令牌傳遞到Header中進行授權。在我看來,我只有一個身份驗證服務器來驗證用戶並生成JWT。SpringCloud微服務JSON Web令牌(JWT)安全

我的疑問:
現在,當微服務將接收呼叫(包含在頭中的JWT)將它總是打auth服務器獲得令牌驗證?
如果是的話,它不會導致多次調用auth服務器,因此是一種不好的做法?
如果沒有,客戶端將如何驗證令牌以及auth服務器的範圍是什麼?

回答

2

智威湯遜始終是簽名的,這樣您就可以在不調用某個中心auth實例的情況下驗證給定的令牌。 auth服務器知道簽署令牌的祕密,並且所有想要驗證令牌的服務都需要有一種方法來檢查。

有兩種不同的方法來簽名:

  • 對稱:一個祕密值是散列法有效載荷之前追加。消費服務還需要知道這個祕密,並且可以通過將祕密附加到所接收的有效載荷並使用所發送的哈希來檢查所得到的哈希來進行驗證。
  • 非對稱:通過使用一些PKI簽名/驗證,可能只有auth服務器有私鑰才能對令牌進行簽名。所有消費服務只需要公共部分進行驗證。

我更喜歡第二種方式,因爲它減少了鑰匙被盜的機會。如果其中一個消費服務遭到劫持,則不會丟失任何祕密,以至於攻擊者可以創建有效的令牌。使用這樣的算法可能需要更多的時間/ CPU週期進行驗證,而不是以對稱方式使用簡單的哈希。

請參閱官方JWT頁面的不同機制的例子:https://jwt.io/

+0

謝謝你,這個答案非常的它。因此,如果我們擁有所有微服務共有的公共密鑰,那麼分發公鑰的最佳方法是什麼?通過數據庫或通過配置服務器在微服務的情況下? –

+0

如果您已經擁有正在運行的配置服務器並使用PKI版本,那麼以這種方式分配公鑰沒有任何問題。請注意,此通信必須安全。另一種方法是從某個集中式密鑰註冊表中獲取密鑰。有一個特殊的屬性'孩子'列出了名字。有關更多詳細信息,請參閱jws附錄:https://tools.ietf.org/html/rfc7515#appendix-D –