jwt是json web token縮寫。它將使用者資訊加密到token裡,伺服器不儲存任何使用者資訊。伺服器通過使用儲存的金鑰驗證token的正確性,只要正確即通過驗證。
jwt 和sessions 不同 session是儲存在伺服器的,每次只給客戶端返回sessionid,客戶端每次請求時帶上sessionid即可。
但是,有多台伺服器時就會出現一些麻煩,需要同步多台伺服器資訊,session就不好處理了。因為session是儲存在伺服器的,會出現a伺服器能獲取資訊,b伺服器身份資訊無法通過。所以jwt就能很好的解決這個問題。伺服器不需要儲存資訊,只需要儲存加密用的secret,在使用者登陸後將jwt加密生成token並傳送給客戶端,由客戶端儲存,客戶端每次請求帶上token。讓伺服器進行解析並驗證。
jwt的頭部承載兩部分資訊:
宣告型別,這裡是jwt
宣告加密的演算法 通常直接使用 hmac sha256
playload可以填充兩種型別資料
1.標準中註冊的宣告:
iss: 簽發者
sub: 面向的使用者
aud: 接收方
exp: 過期時間
nbf: 生效時間
iat: 簽發時間
jti: 唯一身份標識
2.自定義資料
簽名的演算法:
引入
import (定義結構體
type userinfo struct1、生成token
func macke(user *userinfo) (token string, err error)then := jwt.newwithclaims(jwt.signingmethodhs256, claims)
fmt.println(then) //列印&
token, err = then.signedstring(byte("gettoken"))
return
}
2、解析token
func secret() jwt.keyfunc , error)}//解析token
func parsetoken(token string) (user *userinfo, err error)
tokn, _ := jwt.parse(token, secret())
claim, ok := tokn.claims.(jwt.mapclaims)
if !ok
if !tokn.valid
fmt.println(claim)
user.username = claim["name"].(string) //強行轉換為string型別
user.password = claim["pwd"].(string) //強行轉換為string型別
return
}
3、實戰使用
package mainimport (
"fmt"
token "main/jwtset"
)func main()
tkn, _ := token.macke(&use)
fmt.println("_____", tkn)
// time.sleep(time.second * 8)超過時間列印令牌錯誤
user, err := token.parsetoken(tkn)
if err != nil
fmt.println(user.username)
}
使用者請求時帶上token,伺服器解析token後可以獲得其中的使用者資訊,如果token有任何改動,都無法通過驗證.
內容摘抄來自:
vcbuild的簡單使用
vcbuild 命令列 更新 2007 年 11 月 vcbuild 工具使用以下命令列語法來生成 visual c 專案和解決方案。複製 vcbuild options project solution config all 標誌 options生成選項。有關更多資訊,請參見 vcbuild 選項...
QList的簡單使用
qlistlist list 1 2 3 4 5 6 7 8 qlist的插入 voidinsert int i,const t value 在qlist其中某個位置插入value,假如沒 宣告i i 預設size 及在最後插入value iteratorinsert iterator before...
QTreeWidget的簡單使用
qtreewidget是一種樹形的部件,它以樹的形式顯示各個項,它的每個項使用qtreewidgetitem來表示。qtreewidgetitem的值的表示都是用qstringlist來表示的。簡單的說明一下 for int i 0 i 3 i for int i 0 i 3 i treewidge...