Jwt由符號“.”分隔成三個部分。
HEADER:token header,它描述了令牌的類型和加密方法,並將json內容轉換為base64。
有效載荷:內容是暴露的信息,敏感信息不能存儲。將json內容更改為base64。
簽名:SIGNATURE,根據令牌頭的加密方法對頭和凈荷的信息進行加密,生成簽名。以下是官網介紹,地址:https://jwt.io/.
Jwt的token是不能篡改的。雖然base64解碼後可以明文讀取前兩部分的內容,但是由於簽名的第三部分是用密鑰對前兩部分的內容進行加密的,所以在驗證是否與原簽名壹致時,也需要對前兩部分的內容進行重新加密。如果內容被篡改,兩個簽名不壹致的驗證將失敗。
問題1:同壹個公司的系統,如果每個系統都有自己的用戶名和密碼,那麽用戶記得。
妳有壹個大腦袋。所以這個時候就產生了壹個認證中心,所有的系統都使用同壹套用戶信息在同壹個地方登錄。
問題二:使用同壹套用戶信息是可以的,但是如果要進入各個系統的話,還是要登錄壹次,很麻煩。所以這裏我們需要在壹個地方登錄,在任何地方登錄,登錄其中壹個系統,進入其他系統不需要登錄。
效果如下圖所示。
用戶登錄sso中心後的令牌在A、B兩個站點都可以使用,A、B站點和sso中心無需通信即可自行識別令牌是否有效。
如何串聯站點和sso?具體過程是用戶打開站點A,發現沒有登錄。然後站點A會跳轉到sso中心登錄,自帶網址。sso中心登錄成功後,他會跳回站點自帶的網址,並隨身攜帶令牌。
站點A登錄成功,那麽站點B * * *怎麽享受這個令牌呢?實踐是,當sso中心成功登錄時,它將壹個令牌保存到cookie(或localstorage,等等)。).當用戶進入B站點,發現沒有登錄,跳轉到sso中心自帶網址。sso中心發現cookie有令牌,就直接跳回B站點的url,帶上令牌,讓B站點實現* * *共享,自動登錄。
創建新的AuthenticationCenter項目。
創建新的AuthenticatinController控制器。
查看登錄視圖
其他相關類別
上面sso的登錄功能完成,打開登錄頁面就可以獲得令牌。
創建新網站a
修改startup.cs文件,並添加ConfigureServices方法。
添加Configure方法。
創建新的UserController。
其他相關類別
密鑰應該與sso中心的壹致。以上5000端口為sso端口,端口27271為站點端口。