golang JWT的簡單使用

2022-09-14 13:06:07 字數 2180 閱讀 7109

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 struct

1、生成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 main

import (

"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...