token基礎
- 一個
JWT(Java Web Token)實際上就是一個字符串,它由頭部、載荷與簽名 三部分組成 - 編碼之后的
JWT是這樣的一串字符
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
- 由
.分為三段,通過解碼可以得到
// 1. Headers頭部
// 包括類別(typ)、加密算法(alg)
{
"alg": "HS256",
"typ": "JWT"
}
// 2. Claims載荷
// 包括需要傳遞的用戶信息
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
// 3. Signature簽名
// 根據(jù)alg算法與私有秘鑰進行加密得到的簽名字串
// 這一段是最重要的敏感信息,只能在服務端解密
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), SECREATE_KEY)
核心代碼
const jwt = require('jsonwebtoken');
const secret = 'qwert'; //自定義
app.set('superSecret', secret);
//生成token
const token = jwt.sign(user, app.get('superSecret'));
//解碼token
jwt.verify(token, app.get('superSecret'), function (err, decoded){
//decoded 是得到的用戶信息
}
原理
- 安裝
nodejs的模塊jsonwebtoken,設置一個字符串當作密鑰 - 如果登錄成功,服務器就根據(jù)用戶名和密鑰生成一個
token,并返回token給客戶端 - 如果想得到個人信息,就可以發(fā)送這個
token,經過verify驗證成功,得到信息
總結
- 可以把生成的
token存放在cookie中,相當于把session Id存放在cookie中
參考文章推薦:
Authenticate a Node.js API with JSON Web Tokens
JWT 在前后端分離中的應用與實踐