我這邊使用的是這個包:
go get github.com/dgrijalva/jwt-go
例子:
package main
import (
"fmt"
"github.com/dgrijalva/jwt-go"
"time"
)
const (
JwtSecretKey = "welcome@#dennyYANG'yi9012"//jwt校驗字符串
JwtExpireSecond = 30//30秒過期
)
//存儲在jwt的數據
type Storejwt struct {
UserId int
Username string
Email string
exp int
expire int
}
//創建jwt字符串
func CreateJwtToken(st Storejwt) (string,error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"Userid": st.UserId,
"Username": st.Username,
"Email": st.Email,
//可以添加過期時間,這個參數必須小寫哦,源碼是小寫的
"exp": time.Now().Add(time.Second * JwtExpireSecond).Unix(),
})
return token.SignedString([]byte(JwtSecretKey))//校驗的字符串
}
//校驗jwt字符串
func ParseJwtToken(s string) (jwt.MapClaims, error) {
fn := func(token *jwt.Token) (interface{}, error) {
return []byte(JwtSecretKey), nil//校驗字符串
}
result,error := jwt.Parse(s, fn)
if error!=nil{
return nil,error//signature is invalid or Token is expired
}
//解析存入去的jwt信息
finToken := result.Claims.(jwt.MapClaims)
return finToken,nil
}
func main() {
var storeJwt = Storejwt{UserId:100,Username:"張三",Email:"[email protected]",}
//生成jwt token
tokenString,err := CreateJwtToken(storeJwt)
fmt.Println(err,tokenString)
//解析jwt token
result,err2 := ParseJwtToken(tokenString)
fmt.Println(err2,result,result["Userid"],result["Username"],result["Email"])
}
解析jwt的內容: