2017-08-25 252 views
1

在Auth0中,有2種用於jwt令牌簽名的算法:RS256和HS256。jwt簽名:RS256或HS256

RS256是一種非對稱算法,這意味着有兩個密鑰:一個公鑰和一個私鑰(祕密)。 Auth0具有用於生成簽名的密鑰,JWT的用戶擁有公鑰,用於驗證簽名。

HS256是一種對稱算法,這意味着只有一個祕密密鑰,在雙方之間共享。使用相同的密鑰來生成簽名並驗證它。爲了使密鑰保密,應特別小心。

在他們的文檔中,他們描述了RS256的優點。有人可以解釋我使用HS256算法的優點嗎,我現在沒有看到它們,但我確信它有一些。

+1

可能重複[RS256 vs HS256:有什麼區別?](https://stackoverflow.com/questions/39239051/rs256-vs-hs256-whats-the-difference) –

+0

@Vitalii - 請參閱我的回答 - 我是否爲你回答這個問題?有什麼不清楚的地方? – arcseldon

+0

感謝您的承認! – arcseldon

回答

2

您已經詢問了HS256優於RS256的好處,例如:

  • 認爲方便
  • 容易理解並開始使用,如果新 到OAuth2/OIDC(與感知的便利)
  • 性能(?)

讓我們快速瀏覽一下其中每一個:

知覺方便/理解該怎麼做 - 確實是抄襲一個客戶tId和clientSecret在應用程序中的配置很容易理解,並且很快完成。但是,今天的庫使得RS256的設置簡單 - 庫/框架通常會提供檢索公鑰的功能,並執行與HS256類似配置的驗證,但不需要提供祕密。如果您不熟悉,請參閱一些使用您的技術選項的Auth0示例,以瞭解這一點。

性能 - 是的,這裏HS256可能有一個利基。除了緩存公共證書等之外,擁有對稱密鑰並在應用程序中使用本地應用程序而不需要任何網絡請求等,可能證明效率更高。

但是真的應該問的問題是這些好處(性能優化?)是否超過了缺點 - 當然從安全角度來看。

看到這個answer,如果仍然不服氣,隨意留言(Auth0社區網站)。默認情況下,Auth0已切換到使用RS256的新客戶端,其資源API也默認爲RS256。

RS256的一個主要優點是勝過大多數選擇HS256的參數,只需簡單地說就是不需要在客戶端應用程序中存儲(共同定位)祕密 - 私鑰僅由授權服務器知道(Auth0等等),祕密不能泄露。僅此一項就能告訴你爲什麼RS256絕大多數情況下都是更好的選擇。

機密vs公衆客戶 - 如果您的客戶被認爲是Confidential Client,您應該只考慮HS256。由於機密客戶能夠保密,因此您可以選擇使用以下兩種方式之一簽發的身份證令牌 - 對於非機密客戶,您絕不應使用HS256,因爲根據定義,客戶端無法使用保密祕密。

HS256還有其他一些考慮因素,例如需要手動更新所有使用給定客戶端配置的應用程序(如果有簽名密鑰翻轉)。

0

就我而言,使用對稱算法的優點是創建一個令牌,只有服務器知道如何讀取它。對此,一個對稱算法是最好的,因爲速度很快並且產生一個小的結果。