github: https://github.com/golang-jwt/jwt
golang-jwt/jwt 是一个在 Go 语言中使用 JSON Web Tokens(JWT)进行身份验证和授权的库。JWT 是一种用于在跨网络进行安全通信的开放标准(RFC 7519),它使用一个 JSON 对象来表示被声明的安全性信息。
golang-jwt/jwt 包提供了创建、解析和验证 JWT 的功能。你可以使用它来生成 JWT、将用户数据编码为 JWT 格式、验证和解析 JWT,以及处理 JWT 中的声明和签名等。
生成JWT令牌
type AuthClaims struct {
Username string `json:"username"`
jwt.StandardClaims
}
func GeneralJwtToken(userName string) (string, error) {
return CreateToken(AuthClaims{
Username: userName,
StandardClaims: jwt.StandardClaims{
ExpiresAt: time.Now().Add(JWTExpireMinute * time.Minute).Unix(),
},
}, APITokenSecret)
}
func CreateToken(payload jwt.Claims, secret []byte) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, payload)
tokenString, err := token.SignedString(secret)
if err != nil {
return "", err
}
return tokenString, nil
}
AuthClaims是一个结构体类型,用于存储JWT令牌的声明信息。它包含了两个字段:Username和StandardClaims。
Username是一个字符串类型的字段,用于存储JWT令牌中的用户名。它被标记为json:“username”,表示在将该结构体编码为JSON格式时,该字段应该使用username作为键名。
StandardClaims是一个使用jwt.StandardClaims类型的匿名字段。这意味着AuthClaims结构体具有jwt.StandardClaims类型的所有字段和方法。jwt.StandardClaims是JWT库提供的一个结构体,其中包含了JWT的标准声明信息,如过期时间(ExpiresAt)、签发时间(IssuedAt)和JWT ID(Id)。通过嵌入jwt.StandardClaims,AuthClaims结构体可以继承这些标准声明信息,避免了重复定义这些字段。
综上所述,AuthClaims结构体用于定义JWT令牌的声明信息,**并通过嵌入jwt.StandardClaims来继承标准声明信息。**它的Username字段用于存储JWT令牌中的用户名,并在编码为JSON格式时使用username作为键名。
CreateToken函数接受两个参数:payload和secret。payload是一个实现了jwt.Claims
接口的结构体,用于包含JWT令牌的声明信息。在这里,payload被传递为AuthClaims结构体,其中包含了用户名和标准声明信息。secret是一个字节数组,用作对JWT进行签名的密钥。