golang的jwt学习笔记

初始化项目

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

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

加密

一步一步编写程序

  1. 首先在main()函数中写入
package main

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

func main() {
   
   
	//jwt.NewWithClaims(Claims)
	jwt.NewWithClaims()
}

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

Claims基础结构

package main

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

type MyClaims struct {
   
   
	jwt.StandardClaims
}

func main() {
   
   
	//jwt.NewWithClaims(Claims)
	jwt.NewWithClaims()
}

另一个参数–加密方式

package main

import (
	"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 main

import (
	"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

相关推荐

  1. Golang学习笔记01

    2023-12-25 07:08:02       7 阅读
  2. Golang学习笔记_RabbitMQ原理架构和使用

    2023-12-25 07:08:02       15 阅读
  3. Golang学习笔记--Gin框架

    2023-12-25 07:08:02       14 阅读
  4. golang常用库之-golang-jwt/jwt

    2023-12-25 07:08:02       29 阅读
  5. golang学习笔记——go互斥锁

    2023-12-25 07:08:02       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-25 07:08:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-25 07:08:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-25 07:08:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-25 07:08:02       20 阅读

热门阅读

  1. ZooKeeper Client API 安装及使用指北

    2023-12-25 07:08:02       33 阅读
  2. 适配器模式(Adapter)

    2023-12-25 07:08:02       45 阅读
  3. servlet

    servlet

    2023-12-25 07:08:02      42 阅读
  4. 最简单的GPT的Transformer架构

    2023-12-25 07:08:02       30 阅读
  5. 删除开发分支 新建另一个开发分支

    2023-12-25 07:08:02       34 阅读
  6. 零基础搭建k8s集群(一)- 基础准备

    2023-12-25 07:08:02       44 阅读
  7. Mysql中的快照读和当前读

    2023-12-25 07:08:02       31 阅读