jwt的使用

jwt:
场景:前后端分离、第三方API交互等

生成jwt + 解析jwt:

package main

import (
	"fmt"
	"time"

	"github.com/dgrijalva/jwt-go"
)

type MyClaims struct {
	Username string `json: "username"`
	jwt.StandardClaims
}

func main() {

	mySigningKey := []byte("kezhangaigo") //加密key

	//struct型传参
	c := MyClaims{ //实例化
		Username: "kezhang",
		StandardClaims: jwt.StandardClaims{
			NotBefore: time.Now().Unix(),           //开始时间
			ExpiresAt: time.Now().Unix() + 60*60*2, //过期时间
			Issuer:    "kezhang",                   //签发机构
		},
	}

	t := jwt.NewWithClaims(jwt.SigningMethodHS256, c) //生成token

	//map型传参
	// t := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
	// 	"exp": time.Now().Unix() + 60*60*2, //过期时间
	// 	"iss": "kezhang",                   //签发机构
	// 	"nbf": time.Now().Unix(),           //开始时间
	// 	"username": "my",
	// })

	s, err := t.SignedString(mySigningKey) //串的加密
	if err != nil {
		fmt.Printf("%s", err) //打印
	}
	fmt.Println(s)

	token, err := jwt.ParseWithClaims(s, &MyClaims{}, func(token *jwt.Token) (interface{}, error) { //解析token
		return mySigningKey, nil
	})
	if err != nil {
		fmt.Printf("%s", err) //打印
	}
	fmt.Println(token.Claims.(*MyClaims))
}

项目中一般都用封装好的jwt

cookie-session:
1.用户在浏览器端填写用户名和密码,并发送给服务端
2.服务端对用户名和密码校验通过后会生成一份保存当前用户相关信息的session数据和一个与之对应的标识(通常称为session_id)
3.服务端返回响应时将上一步的session_id写入用户浏览器的Cookie
4.后续用户来自该浏览器的每次请求都会自动携带包含session_id的Cookie
5.服务端通过请求中的session_id就能找到之前保存的该用户那份session数据,从而获取该用户的相关信息。

go mod init moudle_name 安装新包用的
go mod tidy 更新 go.mod 以及 go.sum 文件(删除多余的,添加需要的)

部分参考:https://blog.csdn.net/weixin_51261234/article/details/124084444

posted @   教诲you  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示