JWT Token儲存在Cookie還是LocalStorage
JWT 是將web 應用無狀態化的一種方式。
POST /token
Host: galaxies.com
Content-Type: application/x-www-form-urlencoded
username=abc&password=password
伺服器返回
HTTP/1.1 200 OK
{
"access_token": "eyJhbGciOiJIUzI1NiIsI.eyJpc3MiOiJodHRwczotcGxlL.mFrs3Zo8eaSNcxiNfvRh9dqKP4F1cB",
"expires_in":3600
}
下次請求時,需要帶上這個token,以便伺服器驗證。
缺點:
由於LocalStorage 和 SessionStorage 都可以被 javascript 訪問,所以容易受到XSS攻擊。尤其是專案中用到很多第三方的Javascript類庫。
另外,需要應用程式來保證Token只在HTTPS下傳輸。
Set-Cookie: access_token=eyJhbGciOiJIUzI1NiIsI.eyJpc3MiOiJodHRwczotcGxlL.mFrs3Zo8eaSNcxiNfvRh9dqKP4F1cB; Secure; HttpOnly;
隨後的請求需要帶上Token
GET /stars/pollux
Host: galaxies.com
Cookie: access_token=eyJhbGciOiJIUzI1NiIsI.eyJpc3MiOiJodHRwczotcGxlL.mFrs3Zo8eaSNcxiNfvRh9dqKP4F1cB;
優點:
可以指定 httponly,來防止被Javascript讀取,也可以指定secure,來保證token只在HTTPS下傳輸。
缺點:
不符合Restful 最佳實踐。
容易遭受CSRF攻擊 (可以在伺服器端檢查 Refer 和 Origin)
1. 首先拿到JWT Token
HTTP/1.1POST /token
Host: galaxies.com
Content-Type: application/x-www-form-urlencoded
username=abc&password=password
伺服器返回
HTTP/1.1 200 OK
{
"access_token": "eyJhbGciOiJIUzI1NiIsI.eyJpc3MiOiJodHRwczotcGxlL.mFrs3Zo8eaSNcxiNfvRh9dqKP4F1cB",
"expires_in":3600
}
2. 將Token儲存於LocalStorage或SessionStorage
function tokenSuccess(err, response) {
if(err){
throw err;
}
$window.sessionStorage.accessToken = response.body.access_token;
}
接下來的請求需要帶上Token:
HTTP/1.1
GET /stars/pollux
Host: galaxies.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsI.eyJpc3MiOiJodHRwczotcGxlL.mFrs3Zo8eaSNcxiNfvRh9dqKP4F1cB
缺點:
由於LocalStorage 和 SessionStorage 都可以被 javascript 訪問,所以容易受到XSS攻擊。尤其是專案中用到很多第三方的Javascript類庫。
另外,需要應用程式來保證Token只在HTTPS下傳輸。
3. 將Token儲存於Cookie
HTTP/1.1 200 OKSet-Cookie: access_token=eyJhbGciOiJIUzI1NiIsI.eyJpc3MiOiJodHRwczotcGxlL.mFrs3Zo8eaSNcxiNfvRh9dqKP4F1cB; Secure; HttpOnly;
隨後的請求需要帶上Token
GET /stars/pollux
Host: galaxies.com
Cookie: access_token=eyJhbGciOiJIUzI1NiIsI.eyJpc3MiOiJodHRwczotcGxlL.mFrs3Zo8eaSNcxiNfvRh9dqKP4F1cB;
優點:
可以指定 httponly,來防止被Javascript讀取,也可以指定secure,來保證token只在HTTPS下傳輸。
不符合Restful 最佳實踐。
容易遭受CSRF攻擊 (可以在伺服器端檢查 Refer 和 Origin)
4. 推薦使用Cookie來儲存Token
相比較而言,Web Storage比Cookie更容易受到攻擊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10742815/viewspace-2142725/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 除了cookie,你還可以用jwt(json web token)!CookieJWTJSONWeb
- 【網路傳輸】Cookie、Session、Token、JWTCookieSessionJWT
- 一文搞懂Cookie,Session,Token,JWTCookieSessionJWT
- 一文搞懂 Cookie,Session,Token,JWTCookieSessionJWT
- BOM_資料儲存Cookie& localStorageCookie
- cookie、sessionStorage、localStorageCookieSession
- cookie, sessionStorage, localStorageCookieSession
- JWT TokenJWT
- 什麼是Cookie、令牌與JWT?CookieJWT
- 前端儲存除了 localStorage 還有啥前端
- localStorage、sessionStorage、Cookie的SessionCookie
- JavaScript操作cookie與localStorageJavaScriptCookie
- cookie, localStorage, sessionStorage區別CookieSession
- Cookie LocalStorage SessionStorage對比CookieSession
- cookie、sessionStorage、localStorage區別CookieSession
- jwt生成token和token解析基礎JWT
- 詳說 Cookie, LocalStorage 與 SessionStorageCookieSession
- cookie、sessionStorage、localStorage的區別?CookieSession
- localStorage 與 sessionStorage / cookie 和 sessionSessionCookie
- JWT(Json WEB Token)JWTJSONWeb
- jwt生成token報錯JWT
- 理解 cookie、session、tokenCookieSession
- Cookie && Session && localStorage && sessionstorage && HTTP快取CookieSessionHTTP快取
- 深入瞭解瀏覽器儲存:對比Cookie、LocalStorage、sessionStorage與IndexedDB瀏覽器CookieSessionIndex
- token 會話設計 (JWT)會話JWT
- Jwt建立身份令牌TokenJWT
- localStorage、sessionStorage、Cookie的區別及用法SessionCookie
- 獲取jwt(json web token)中儲存的使用者資訊JWTJSONWeb
- jwt token 重新整理問題JWT
- Spring Boot中使用token:jwtSpring BootJWT
- 自己寫token類(無視jwt)JWT
- JSON Web Token(JWT) 簡介JSONWebJWT
- 徹底理解cookie,session,tokenCookieSession
- 本地儲存localStorage使用
- SpringBoot 整合 JWT 實現 token 驗證,token 登出Spring BootJWT
- Cookie是什麼?從哪來?存在哪?往哪去?Cookie
- localStorage,sessionStorage和cookie的區別及使用SessionCookie
- 記錄--localStorage是同步還是非同步的?為什麼?非同步