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

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

相关推荐

  1. golang-golang-jwt/jwt

    2024-01-24 07:04:01       47 阅读
  2. golang-go-figure

    2024-01-24 07:04:01       33 阅读
  3. golang os

    2024-01-24 07:04:01       65 阅读
  4. Golangweb框架

    2024-01-24 07:04:01       39 阅读
  5. Golang防止注入方法

    2024-01-24 07:04:01       49 阅读
  6. 关于Golang

    2024-01-24 07:04:01       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-24 07:04:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-24 07:04:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-24 07:04:01       82 阅读
  4. Python语言-面向对象

    2024-01-24 07:04:01       91 阅读

热门阅读

  1. 美易官方:黑石股价盘前走低受评级下调影响

    2024-01-24 07:04:01       57 阅读
  2. 基于开源库imu_gps_localization进行组合导航

    2024-01-24 07:04:01       53 阅读
  3. Qt容器QHash类

    2024-01-24 07:04:01       59 阅读
  4. C++类的入门

    2024-01-24 07:04:01       42 阅读
  5. windows主题与壁纸所在文件夹路径

    2024-01-24 07:04:01       55 阅读
  6. C++中vector的sort用法

    2024-01-24 07:04:01       51 阅读
  7. Pillow图像处理:从零开始的奇妙之旅

    2024-01-24 07:04:01       55 阅读
  8. vb如何获取鼠标形状的特征码

    2024-01-24 07:04:01       61 阅读
  9. cherry键盘alt+tab无法切换窗口的问题解决

    2024-01-24 07:04:01       55 阅读