当前位置: 首页 > news >正文

golang的jwt学习笔记

文章目录

    • 初始化项目
    • 加密
      • 一步一步编写程序
      • 另一个参数--加密方式
      • 关于StandardClaims
    • 解密
      • 解析出来的怎么用
    • 关于`MapClaims`
    • 上面使用结构体的全代码
    • 实战项目
    • 关于验证这个项目的前端

初始化项目

自然第一步是暗转jwt-go的依赖啦

#go get github.com/golang-jwt/jwt/v5
go get github.com/dgrijalva/jwt-go

加密

一步一步编写程序

  1. 首先在main()函数中写入
package mainimport ("github.com/dgrijalva/jwt-go"
)func main() {//jwt.NewWithClaims(Claims)jwt.NewWithClaims()
}

查看jwt.NewWithClaims()函数
在这里插入图片描述

Claims基础结构

package mainimport ("github.com/dgrijalva/jwt-go"
)type MyClaims struct {jwt.StandardClaims
}func main() {//jwt.NewWithClaims(Claims)jwt.NewWithClaims()
}

另一个参数–加密方式

package mainimport ("github.com/dgrijalva/jwt-go"
)type MyClaims struct {UserName string `json:"username"`jwt.StandardClaims
}func main() {//jwt.NewWithClaims(加密方式,Claims)jwt.NewWithClaims(jwt.SigningMethodHS256,MyClaims) //当然这里不能是结构体(MyClaims)而是结构体实例
}

关于StandardClaims

type StandardClaims struct {Audience  string `json:"aud,omitempty"`	//ExpiresAt int64  `json:"exp,omitempty"` //过期时间Id        string `json:"jti,omitempty"` //IssuedAt  int64  `json:"iat,omitempty"` //Issuer    string `json:"iss,omitempty"` //签发人NotBefore int64  `json:"nbf,omitempty"` //什么时间开始生效Subject   string `json:"sub,omitempty"` //
}
package mainimport ("fmt""github.com/dgrijalva/jwt-go""time"
)type MyClaims struct {UserName string `json:"username"`jwt.StandardClaims
}func main() {c := MyClaims{UserName: "AllYourBase",StandardClaims: jwt.StandardClaims{NotBefore: time.Now().Unix() - 60,      //当前时间的一分钟之前生效ExpiresAt: time.Now().Unix() + 60*60*2, //当前时间的俩小时Issuer:    "AllYourBase",               //用户名},}//jwt.NewWithClaims(加密方式,Claims)token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)fmt.Println(token)
}

这样我们的token就基本完成了,打印输出

&{ 0xc000008090 map[alg:HS256 typ:JWT] {chen { 1703288998  0 chen 1703296138 }}  false}

map[alg:HS256 typ:JWT]:头
{chen { 1703288998 0 chen 1703296138 }}:体
0xc000008090:加密串

我们要丢给前端使用肯定不行,所以要加密
加密部分(token来自于前面的代码)

mySigningKey := []byte("AllYourBase")
//token.SignedString(key)  //key:官方让我们放一个byte
s, err := token.SignedString(mySigningKey)
if err != nil {fmt.Printf("%s", err)
}
fmt.Println(s)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImNoZW4iLCJleHAiOjE3MDMyODk0MzUsImlzcyI6ImNoZW4iLCJuYmYiOjE3MDMyOTY1NzV9.ZeMpAIzPyRoIQSjDctIuQEHxzYRaKQ9McqBfoq3SzCI

生成的这个加密就可以丢给前端去使用了

解密

如果前端吧串丢回来了怎么解密?

jwt.ParseWithClaims(token,解析的模板,func(token *jwt.Token)(interface{},error){})

写法

jwt.ParseWithClaims(s,&MyClaims,func
http://www.lryc.cn/news/267851.html

相关文章:

  • 第十五节TypeScript 接口
  • 【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口?!
  • 14.bash shell中的for/while/until循环
  • RPC(6):RMI实现RPC
  • strlen和sizeof的初步理解
  • 纯CSS的华为充电动画,它来了
  • 在架构设计中,前后端分离有什么好处?
  • C语言中的结构体和联合体:异同及应用
  • 文件夹共享(普通共享和高级共享的区别)防火墙设置(包括了jdk安装和Tomcat)
  • ❀My排序算法学习之冒泡排序❀
  • 服务器数据恢复-raid6离线磁盘强制上线后分区打不开的数据恢复案例
  • Zookeeper在分布式命名服务中的实践
  • 说说 Spring Boot 实现接口幂等性有哪几种方案?
  • Dash中的callback的使用 多input 6
  • 平方矩阵()
  • git基本命令
  • GPU性能实时监测的实用工具
  • 概率论中的 50 个具有挑战性的问题 [第 6 部分]:Chuck-a-Luck
  • windows搭建MySQL主从补充说明
  • Python:GUI Tkinter
  • 制作一个可以离线安装的Visual Studio安装包
  • 机器学习——决策树(三)
  • 模型量化之AWQ和GPTQ
  • 一个简单的 HTTP 请求和响应服务——httpbin
  • 2024黑龙江省职业院校技能大赛暨国赛选拔赛应用软件系统开发赛项(高职组)赛题第3套
  • 云原生Kubernetes系列 | Kubernetes Secret及ConfigMap
  • dev express 15.2图表绘制性能问题
  • 单链表的创建,插入及删除(更新ing)
  • C#/WPF 播放音频文件
  • 如何使用宝塔面板+Discuz+cpolar内网穿透工具搭建可远程访问论坛服务