token:jsonwebtoken在koa中使用

1:客戶端通過用戶名和密碼登錄 
2:服務器驗證用戶名和密碼,若通過,生成token返回給客戶端。 
3:客戶端收到token後以後每次請求的時候都帶上這個token,相當於一個令牌,表示我有權限訪問了 
4:服務器接收(通常在攔截器中實現)到該token,然後驗證該token的合法性。若該token合法,則通過請求,若token不合法或者過期,返回請求401請求失敗。

1.token相比於session,它無需保存在服務器,不佔用服務器內存開銷。

2.token可以在服務器集羣中很好的使用:無狀態、可拓展性強

3.服務器生成的token如下:分爲3部分,以點來分割;

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiaHVzaGl3ZWk1MjAiLCJpZCI6NDYsImlhdCI6MTU5MTM0MDQyNiwiZXhwIjoxNTkxMzQ3NjI2fQ.B-NAeiQPk0iiJRHkBJnodVadUlDXBabXrAyTomVxcww

第一部分:token頭部

頭部(Header),格式如下: 
{ 
“typ”: “JWT”, 
“alg”: “HS256” 
}

token使用HS256加密算法,將頭部使用Base64編碼可得到:‘eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9’

第二部分:paload: 存放自定義信息;預定義信息有如下幾個;它的編碼:‘eyJuYW1lIjoiaHVzaGl3ZWk1MjAiLCJpZCI6NDYsImlhdCI6MTU5MTM0MDQyNiwiZXhwIjoxNTkxMzQ3NjI2fQ’

iss:該JWT的簽發者
sub:該JWT所面向的用戶
aud:接受該JWT的一方
exp(expires):什麼時候過期,這裏是一個Unix時間戳
iat(issued at):在什麼時候簽發

第三部分,簽名部分;前兩部分都是明文;它的編碼:‘B-NAeiQPk0iiJRHkBJnodVadUlDXBabXrAyTomVxcww’

4.通過這個網站來解碼,網站地址:https://jwt.io/

5.koa中的代碼簽發token如下:

// 用戶名密碼正確後,簽發token
    const token = jwt.sign({
      name: TextRow[0].username,
      id: TextRow[0].id
    },"sometokens", {expiresIn: '2h'});
    resData = {
      info: "用戶名密碼正確",
      status: 0,
      token: token
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章