golang常用库之-golang-jwt/jwt包

发布时间:2024年01月23日

golang常用库之-golang-jwt/jwt包

golang-jwt/jwt包

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 中的声明和签名等。

使用demo

生成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进行签名的密钥

文章来源:https://blog.csdn.net/inthat/article/details/126887564
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。