Spring Cloud初體驗(一) : 微服務下登錄解決方案

這裏寫圖片描述
1、單機和分佈式應用的登錄檢驗講解

    1、單機tomcat應用登錄檢驗
        sesssion保存在瀏覽器和應用服務器會話之間
        用戶登錄成功,服務端會保證一個session,當然會給客戶端一個sessionId,
        客戶端會把sessionId保存在cookie中,每次請求都會攜帶這個sessionId

    2、分佈式應用中session共享
        真實的應用不可能單節點部署,所以就有個多節點登錄session共享的問題需要解決
        1)tomcat支持session共享,但是有廣播風暴;用戶量大的時候,佔用資源就嚴重,不推薦
        2)使用redis存儲token:
                服務端使用UUID生成隨機64位或者128位token,放入redis中,然後返回給客戶端並存儲在cookie中
                用戶每次訪問都攜帶此token,服務端去redis中校驗是否有此用戶即可

2、微服務下登錄檢驗解決方案 JWT

        1、JWT 是一個開放標準,它定義了一種用於簡潔,自包含的用於通信雙方之間以 JSON 對象的形式安全傳遞信息的方法。
            JWT 可以使用 HMAC 算法或者是 RSA 的公鑰密鑰對進行簽名

            簡單來說,就是通過一定規範來生成token,然後可以通過解密算法逆向解密token,這樣就可以獲取用戶信息
            {
                id:888,
                name:'小呆',
                expire:10000
            }

            funtion 加密(object, appsecret){
                xxxx
                return base64( token);
            }

            function 解密(token ,appsecret){

                xxxx
                //成功返回true,失敗返回false
            }

            優點:
                1)生產的token可以包含基本信息,比如id、用戶暱稱、頭像等信息,避免再次查庫

                2)存儲在客戶端,不佔用服務端的內存資源

            缺點:
                token是經過base64編碼,所以可以解碼,因此token加密前的對象不應該包含敏感信息
                如用戶權限,密碼等

        2、JWT格式組成 頭部、負載、簽名
           header+payload+signature

           頭部:主要是描述簽名算法
           負載:主要描述是加密對象的信息,如用戶的id等,也可以加些規範裏面的東西,如iss簽發者,exp 過期時間,sub 面向的用戶
           簽名:主要是把前面兩部分進行加密,防止別人拿到token進行base解密後篡改token

        3、關於jwt客戶端存儲
            可以存儲在cookie,localstorage和sessionStorage裏面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章