编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Golang 新版JWT生成方法,与旧版的2处不同

wxchong 2024-07-25 13:32:12 开源技术 17 ℃ 0 评论
package main

import (
	"github.com/golang-jwt/jwt/v4"
	"math/rand"
	"testing"
	"time"
)

func TestJwtCreate(t *testing.T) {
	//定义 私钥
	keyword := "hello world"
	//定义结构体
	type myClaims struct {
		Username string
		Password string
		//这个位置是与原来的不同的地方,原来写的是jwt.StandardClaims
		//但是jwt.StandardClaims已经废弃了
		//替代的是jwt.RegisteredClaims
		jwt.RegisteredClaims
	}
	//这个位置也是不同的地方
	//新版本的ExpiresAt和IssuedAt的类型是*jwt.NumericDate指针类型
	//而jwt.NumericDate中的Time字段是 time.Time类型
	//新版本的ExpiresAt和IssuedAt写法如下:
	ExpiresAt := jwt.NumericDate{
		Time: time.Now().Add(time.Hour),
	}
	IssuedAt := jwt.NumericDate{
		Time: time.Now(),
	}
	claims := &myClaims{
		//测试数据中的username和password
		Username: "admin",
		Password: "123456",
		RegisteredClaims: jwt.RegisteredClaims{
			//Issuer 签发人是字符串
			Issuer:    "xuser",
			Subject:   "",
			Audience:  nil,
			ExpiresAt: &ExpiresAt,
			IssuedAt:  &IssuedAt,
			ID:        "",
		},
	}
	//NewWithClaims使用指定的签名方法和声明创建新token。
	//func NewWithClaims(method SigningMethod, claims Claims) *Token
	//jwt.SigningMethodHS256代表其方法
	//claims是之前创建的claims
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	//func (t *Token) SignedString(key interface{}) (string, error)
	//SignedString创建并返回一个完整的签名JWT。使用令牌中指定的签名方法对令牌进行签名。
	//keyword是之前自定义的私钥,返回的结果是signedString字符串类型
	signedString, err := token.SignedString([]byte(keyword))
	if err != nil {
		t.Log(err)
		return
	}
	t.Log(signedString)
}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表