Go jwt 验证
设计知识点
jwt-go
github.com/dgrijalva/jwt-go
代码
package main import ( "errors" "fmt" "github.com/dgrijalva/jwt-go" "time" ) const SecretKey string = "123123123123" type Payload struct{ Name string Claims jwt.StandardClaims } func (p Payload) Valid() error { panic("implement me") } func main(){ // jwt 简单使用 // jwt 组成 header.payload.signature 中间 用 "." 进行相连接 // 生成 token token, _ := GenerateToken("zxx", "123") // 解析 token parseToken, _ := ParseToken(token) fmt.Println(parseToken) } // 生成 token func GenerateToken(username, password string)(string, error){ nowTime := time.Now() //当前时间 expireTime := nowTime.Add(3 * time.Hour) //有效时间 // 此处为 jwt 的请求 中间 payload 部分 可任意添加 内容 tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, Payload{ Name: "zhao", Claims: jwt.StandardClaims{ ExpiresAt: expireTime.Unix(), // 过期时间 Issuer: "jack", // 发行人 //Audience 接收者 //Id jwt 的编号 //IssuedAt 签发时间 //NotBefore 签名生效时间 //Subject 主题 }}) // 此处为 增加 密钥 生成完整的 jwt 个人理解: jwt的 第三部分 signedString, err := tokenClaims.SignedString(SecretKey) return signedString, err } // 解析 token func ParseToken(tokenStr string)(string, error){ // 解析 token token, _ := jwt.ParseWithClaims(tokenStr, &jwt.StandardClaims{}, func(token *jwt.Token) (interface{}, error) { return "", nil }) // 头部 token.Header 中间部分 token.Claims 尾部 token.Signature // 取 jwt 中间部分 claims, _ := token.Claims.(jwt.MapClaims) // 检查令牌是否有效 if token.Valid{ return claims["claims"].(string), nil } else { return claims["claims"].(string), errors.New("token无效") } }
邮箱: 1090055252@qq.com