以JSON Web Token 替代傳統Token – 電腦玩瞎咪 | JWT Token
前後端工程師,善用JavaScript、HTML5、CSS3和Golang與PHP、Node.js、C#。目前正為台灣的社群網站進行趕工,然而這東西卻趕了很久。JSONWebToken(JWT)[1]是由Auth0[2]所提構出的一個新Token想法,這並不是一套軟體、也不是一個技術,如果你在做網站時有用Token驗證使用者身份的習慣,那麼這個方法你應該很快就能上手。本篇將解說為什麼JWT會比起傳統Token要來得好。在傳統網站中我們會以Session來辨別使用者是否有登入,由於Session只會被伺服端知道,所以我們就可以Session中擺放一些機密資訊並且供之後驗證用。為什麼大家不用S...
前後端工程師,善用 JavaScript、HTML 5、CSS 3 和 Golang 與 PHP、Node.js 、C#。目前正為台灣的社群網站進行趕工,然而這東西卻趕了很久。
JSON Web Token (JWT)[1] 是由 Auth0[2] 所提構出的一個新 Token 想法,這並不是一套軟體、也不是一個技術,如果你在做網站時有用 Token 驗證使用者身份的習慣,那麼這個方法你應該很快就能上手。本篇將解說為什麼 JWT 會比起傳統 Token 要來得好。
在傳統網站中我們會以 Session 來辨別使用者是否有登入,由於 Session 只會被伺服端知道,所以我們就可以 Session 中擺放一些機密資訊並且供之後驗證用。
為什麼大家不用 Session 了?隨著網路的擴展,Session 有個問題,那就是具狀態性(Stateful)還有容易受跨網域請求偽造攻擊(CSRF Attack)。先讓我們先以具狀態性的問題為例。
極具狀態性假設今天有兩台伺服器透過負載平衡來相互處理使用者請求,由於 Session 是儲存在伺服端上的,第一次使用者登入時是由 Server 1 處理,那麼這個 Session 自然也就儲存在 Server 1。
但下次負載平衡指派使用者到 Server 2 的時候呢?這個 Session 也就不存在,所以使用者就需要重新登入一次(雖然有辦法可解決,但暫不討論)。
易受跨網域請求偽造攻擊由於 Session 是儲存在伺服端的,這意味著客戶端在發送請求時幾乎不用提供什麼資訊,對吧?如果今天有人發送了一個刪除文章的連結給你,然後你在不知情的情況下就按下去的時候會發生什麼事情?你的文章會這樣被刪除掉。
為此,有人想出了 Token 來解決這個問題,並且能夠在多個伺服器上跨域使用。
Token 解決了什麼?當使用者登入成功時,他會得到一串看起來毫無意義的亂數字串,但這個字串實際上會...