一、HS256和RS256的區別
HS256 使用密鑰生成固定的簽名,RS256 使用成非對稱進行簽名。
簡單地說,HS256 必須與任何想要驗證 JWT的 客戶端或 API 共享秘密。
RS256 生成非對稱簽名,這意味着必須使用私鑰來簽簽名 JWT,並且必須使用對應的公鑰來驗證簽名。與對稱算法不同,使用 RS256 可以保證服務端是 JWT 的簽名者,因為服務端是唯一擁有私鑰的一方。這樣做將不再需要在許多應用程序之間共享私鑰。

二、JWT常用的兩種簽名算法
JWT簽名算法中,一般有兩個選擇,一個采用HS256,另外一個就是采用RS256。
簽名實際上是一個加密的過程,生成一段標識(也是JWT的一部分)作為接收方驗證信息是否被篡改的依據。
RS256 (采用SHA-256 的 RSA 簽名) 是一種非對稱算法, 它使用公共/私鑰對: 標識提供方采用私鑰生成簽名, JWT 的使用方獲取公鑰以驗證簽名。由於公鑰 (與私鑰相比) 不需要保護, 因此大多數標識提供方使其易於使用方獲取和使用 (通常通過一個元數據URL)。
另一方面, HS256 (帶有 SHA-256 的 HMAC 是一種對稱算法, 雙方之間僅共享一個 密鑰。由於使用相同的密鑰生成簽名和驗證簽名, 因此必須注意確保密鑰不被泄密。
在開發應用的時候啟用JWT,使用RS256更加安全,你可以控制誰能使用什么類型的密鑰。另外,如果你無法控制客戶端,無法做到密鑰的完全保密,RS256會是個更佳的選擇,JWT的使用方只需要知道公鑰。
由於公鑰通常可以從元數據URL節點獲得,因此可以對客戶端進行進行編程以自動檢索公鑰。如果采用這種方式,從服務器上直接下載公鑰信息,可以有效的減少配置信息。

三、JWT介紹
JWT 代表 JSON Web Token ,它是一種用於認證頭部的 token 格式。這個 token 幫你實現了在兩個系統之間以一種安全的方式傳遞信息。出於教學目的,我們暫且把 JWT 作為“不記名 token”。一個不記名 token 包含了三部分:header,payload,signature。
header 是 token 的一部分,用來存放 token 的類型和編碼方式,通常是使用 base-64 編碼。
payload 包含了信息。你可以存放任一種信息,比如用戶信息,產品信息等。它們都是使用 base-64 編碼方式進行存儲。
signature 包括了 header,payload 和密鑰的混合體。密鑰必須安全地保存儲在服務端。
你可以在下面看到 JWT 剛要和一個實例 token:


四、HS256和RS256實戰演練
一、HS256使用:
根據指定用戶生成Token

驗證指定用戶的Token是否有效

二、HS256使用:
生成一個rsa非對稱密鑰對。

私鑰加密,公鑰驗簽。

五、源代碼示例下載
掃碼關注下方微信公眾號,回復8ks5關鍵字獲取源代碼下載地址。
有問題微信公眾號回復wx關鍵字,加阿笨的個人微信號。
