JWT token信息保存


1、先來講述一下token保存在瀏覽器端的幾種不同的方式

     (1)可以選擇在cookie中進行保存,在服務端的代碼為

              String token = Jwt.createToken(payload);
             Cookie cookie = new Cookie("token", token);
             cookie.setMaxAge(3600);
             cookie.setDomain("localhost");
             cookie.setPath("/");
             response.addCookie(cookie);

      這里有一個問題就是關於 setDomain的問題,一般正常的在將用戶的信息封裝在token中后,

        可以通過 new cookie的形式將 token先保存在 cookie中,

          也就是將 cookie存在了瀏覽器中,

              具體可以在服務端用 System.out.println(response.getHeader("set-cookie"));的形式找到剛才設置的cookie,因為是第一次登錄,所以使用 set-cookie 的形式,

                  瀏覽器中也可以進行查看,具體是如圖,可以看到是 request第一次請求時是沒有 cookie的,但 response中返回后就能看到你所設置的 cookie,被放在set-cookie中

                      其中也包括我所設置的 token鍵值對,就是之前的 new cookie 所產生的

                         將 cookie 存放在了瀏覽器中

                                 那么接下來談談用戶請求時如何獲取設置在瀏覽器中的 cookie,這里使用的是ajax請求

                          接下來就是瀏覽器的事情了,瀏覽器會對你的請求進行解析,document 根節點能解析到保存在瀏覽器中的 cookie的信息,並能獲取到這個 header 中的 token 信息,然后將其發送到服務端進行請求,可以看到

通過 dom解析后會在你的請求中帶上你所需要的 token,同時你也依然可以看到 cookie 中始終保存着token的key,value字段,沒錯, token中的信息就是從 cookie中取出來的,其實也就是 客戶端發出getCookie("token")請求后瀏覽器進行解析后將保存在本地的 cookie信息中的token放入了相應的鍵值對中作為請求去請求服務端

     

          這是服務端獲取 token的情況,在服務端設置了一個過濾器來對 token進行過濾,通過request.getHeader("token")就能將經過瀏覽器轉化后的 token信息拿到手,然后對其進行一系列的驗證,這就要看 token中存放了什么信息了

        這里為什么要設置Domain?

        1、設置 cookie 時明確指定 domain 域名,子域名可讀取(子域共享該cookie),刪除時則也必須明確指定域名,否則無法刪除。

        2、設置 cookie 時不指定域名,使用默認值,則表示只有當前域名可見(子域不可共享)。刪除時也不需要指定域名,否則無法刪除。
         轉載自:http://blog.csdn.net/wab719591157/article/details/74841605

         如果不設置setDomain的信息的話,就會導致能成功登錄,但 Cookies中沒有任何的信息記錄 ,也就是說不會將cookie保存在本地,雖然有set-cookie

當用戶請求該域名下的子域名時,會看到 Request中的 token為空,

                 其實也就是說當用戶登錄時,確實有cookie的產生,也有token的產生,但瀏覽器並沒有將其保存在本地,也就是cookies中,當用戶再次發出請求想要獲取數據時,

                      瀏覽器對用戶請求進行解析,並沒有找到本地的 token,於是將其發送到服務端時才顯示 token為空,也就無法進行接下來的操作了

(2)localstorage,沒有時間限制的存儲,會一直存放在瀏覽器中

設置也是相同的道理,只要將方法換為setItem就行,那么這個localStorage是什么呢,其實就是

Window.prototype.localStorage = 0;

這是HTML5.js中的一個方法,用來獲取瀏覽器存放本地api

LocalStorage可以被 javascript 訪問,所以容易受到XSS攻擊。尤其是項目中用到很多第三方的Javascript類庫。
另外,需要應用程序來保證Token只在HTTPS下傳輸。

cookie 優點:
可以指定 httponly,來防止被Javascript讀取,也可以指定secure,來保證token只在HTTPS下傳輸。
缺點:
不符合Restful 最佳實踐。
容易遭受CSRF攻擊 (可以在服務器端檢查 Refer 和 Origin)

相比較而言,Web Storage比Cookie更容易受到攻擊

轉載自:http://blog.itpub.net/10742815/viewspace-2142725/

所以這里選擇了cookie進行token信息的存儲

(3)sessionStorage

針對一個session的用戶存儲,也可以被javascript訪問,但當用戶關閉瀏覽器時,也會隨之消失

 

                                                     

                                                          

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM