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()
}
}
到此这篇关于Golang token的生成和解析详解的文章就介绍到这了,更多相关Golang token生成和解析内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!
您可能感兴趣的文章:
- 使用golang脚本基于kubeadm创建新的token(问题分析)
- golang中gin框架接入jwt使用token验证身份
- golang jwt+token验证的实现
- gogin+token(JWT)验证实现登陆验证