Go JWT 全面指南
在Go中,JWT(JSON Web Tokens)是一种常见的认证方式,用于在网络上安全地传递信息。以下是一个使用github.com/dgrijalva/jwt-go
库的JWT生成和验证的示例。
首先,你需要安装这个库:
go get github.com/dgrijalva/jwt-go
然后,你可以使用以下代码生成JWT和验证JWT:
package main
import (
"fmt"
"time"
jwt "github.com/dgrijalva/jwt-go"
)
// 生成JWT
func generateJWT() (string, error) {
token := jwt.New(jwt.SigningMethodHS256)
claims := token.Claims.(jwt.MapClaims)
claims["iss"] = "issuer"
claims["iat"] = time.Now().Unix()
claims["exp"] = time.Now().Add(time.Minute * 10).Unix()
claims["sub"] = "subject"
claims["aud"] = "audience"
claims["nbf"] = time.Now().Unix()
claims["jti"] = "jwt_id"
tokenString, err := token.SignedString([]byte("secret"))
if err != nil {
return "", err
}
return tokenString, nil
}
// 验证JWT
func validateJWT(tokenString string) (*jwt.Token, error) {
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
// 确保token使用的算法与用于签名token的算法一致
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
}
// 返回用于验证token的密钥
return []byte("secret"), nil
})
if err != nil {
return nil, err
}
return token, nil
}
func main() {
jwtString, err := generateJWT()
if err != nil {
fmt.Println("Error generating JWT:", err)
return
}
fmt.Println("Generated JWT:", jwtString)
token, err := validateJWT(jwtString)
if err != nil {
fmt.Println("Error validating JWT:", err)
return
}
fmt.Println("JWT validated successfully:", token)
}
在这个例子中,我们首先调用generateJWT
函数生成一个JWT。然后,我们使用validateJWT
函数验证这个JWT是否有效。在实际应用中,你需要将密钥和算法替换为安全的值,并根据你的应用需求设置claims。
评论已关闭