跳到主要内容

JWT-Session

轉載自 淺談 Session 與 JWT 差異

Session運作原理

當 Client 輸入帳密登入後,Server 會產生一筆 Session 記錄在伺服器,同時把你的身份特徵 SessionID 送回去 Client 端加密保存 ( 只有 Server 能解密查看 )。之後你在網頁上的操作,Server 只要依據你的 SessionID,就能查看剛剛在你身上存的 Session。

想要清除的話,除了等待 Session 過期,還可以使用網站常有的登出,其實就是由 Server 來幫你消除 Session,另外也可以從 Client 端來清除 Cookie ( SessionID )。

雖然說是基於 Cookie,但不同的是 Session 主要還是存在 Server 端,只有單一個 SessionID 會被送去 Client 端並且加密。

What is JWT ?

原名 ( JSON Web Tokens ),基本上就是帶時效的 Token。

jwt

Base64Url

加密前處理,與 BASE64 差在(=被省略、+替换成-、/替换成_)

1.Header:

alg表示特定的加密演算法;typ代碼token類型。 存放 token 型別與加密方式 。

{
"alg": "HS256", // 加密方式
"typ": "JWT" // token 型別
}

以 Base64Url 編碼後:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

2.Payload:

傳遞內容,通常個語言實現都會有默認參數可使用,如iss(令牌簽發人)、exp(過期時間)、aud(令牌接受方)、nbf(生效時間初始值)、iat(令牌簽發時間)。

3.Signature:

以前兩部分為基礎生成的簽名,使用頭部指定的演算法加密。

使用時機

看完上面可以知道,JWT 的主要目的只是「 確立資料來源以及可信度 」。因此在應用上也會限制較多。以下是較常被使用的時機:

  • 跨伺服器下的請求:

    如果我們同時擁有許多伺服器,可以把身份驗證伺服器獨立出來,登入後使用 JWT 就可以在不同伺服器遊走。

  • 一次性、時效短的請求:

    因為 JWT 不能主動撤銷,一般用於會員身份驗證會不太適合,多用於一次性下載檔案,或是時間限制內更改密碼等等…

  • APP 身份驗證:

    一般 APP 是不存在 Session 的,所以在持續身份驗證上可以使用 JWT,但要確保使用者的執行環境是安全的。

參考資料