token基礎(chǔ)
- 一個(gè)
JWT(Java Web Token)
實(shí)際上就是一個(gè)字符串,它由頭部矗蕊、載荷與簽名 三部分組成 - 編碼之后的
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算法與私有秘鑰進(jìn)行加密得到的簽名字串
// 這一段是最重要的敏感信息,只能在服務(wù)端解密
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
或渤,設(shè)置一個(gè)字符串當(dāng)作密鑰 - 如果登錄成功系冗,服務(wù)器就根據(jù)用戶名和密鑰生成一個(gè)
token
,并返回token
給客戶端 - 如果想得到個(gè)人信息劳坑,就可以發(fā)送這個(gè)
token
毕谴,經(jīng)過verify
驗(yàn)證成功,得到信息
總結(jié)
- 可以把生成的
token
存放在cookie
中,相當(dāng)于把session Id
存放在cookie
中
參考文章推薦:
Authenticate a Node.js API with JSON Web Tokens
JWT 在前后端分離中的應(yīng)用與實(shí)踐