Golang token的生成和解析
使用第三方库来实现
go get github.com/dgrijalva/jwt-go
golang代码
package main import ( "fmt" "time" "github.com/dgrijalva/jwt-go" ) func main() { // 生成Token tokenString := generateToken("example-user", "secret-key") fmt.Println("Token:", tokenString) // 解密Token claims, err := parseToken(tokenString, "secret-key") if err != nil { fmt.Println("解密Token失败:", err) return } // 获取Token中的自定义声明 if username, ok := claims["username"].(string); ok { fmt.Println("Username:", username) } } func generateToken(username string, secretKey string) string { // 创建一个Token对象 token := jwt.New(jwt.SigningMethodHS256) // 设置Token的自定义声明 claims := token.Claims.(jwt.MapClaims) claims["username"] = username claims["exp"] = time.Now().Add(time.Hour * 24).Unix() // 设置Token的过期时间 // 使用密钥对Token进行签名,生成最终的Token字符串 tokenString, _ := token.SignedString([]byte(secretKey)) return tokenString } func parseToken(tokenString string, secretKey string) (jwt.MapClaims, error) { // 解析Token字符串 token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return []byte(secretKey), nil }) if err != nil { return nil, err } // 验证Token的签名方法是否有效 if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("无效的签名方法:%v", token.Header["alg"]) } // 返回Token中的声明部分 if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { return claims, nil } return nil, fmt.Errorf("无效的Token") }
消息中间件
func JWT() gin.HandlerFunc { return func(c *gin.Context) { c.Abort() c.Next() } }
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)