批里批里 (゜-゜)つ🍺 干杯~|

七つ一旋桜

园龄:4年2个月粉丝:6关注:3

📂笔记
🔖jwtgo
2021-10-10 23:57阅读: 111评论: 0推荐: 0

jwt-go 学习笔记

官方文档
github仓库地址

相关依赖

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

创建一个新项目进行引入

package main

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

// 创建一个claims结构体作为参数
type MyClaims struct {
	Username string `json:"username"`
	jwt.StandardClaims // 继承Claims
}

func main() {
	/**
	MapCLaims map
	StandardCliams struct
	加密方式工作中一般用RS256
	 */
	c := MyClaims{
		Username: "张三",
		StandardClaims: jwt.StandardClaims{
			NotBefore: time.Now().Unix() - 60, // 开始时间
			ExpiresAt: time.Now().Unix() + 60 * 60 * 2, // 期限
			Issuer: "张三",	// 签发人
		},
	}
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
	mySigningKey := []byte("sauidhauihauihdiuah") // 加密密钥
	s, err := token.SignedString(mySigningKey) // 对token进行加密
	if err != nil {
		fmt.Printf("%s", err)
	}
	fmt.Println(s)
}

运行结果如下
image

解析jwt的信息

// 解析jwt
token, err = jwt.ParseWithClaims(s, &MyClaims{}, func(token *jwt.Token) (interface{}, error) {
    return mySigningKey, nil
})
fmt.Println(err)
fmt.Println(token)

结果如下

image-20211017232637121

可以看到err为nil,说明解析成功

而解析出的字符串为:

&{eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VybmFtZSI6IuW8oOS4iSIsImV4cCI6MTYzNDQ5MTU0NywiaXNzIjoi5byg5LiJIiwibmJmIjoxNjM0NDg0Mjg3fQ.X5q1PPsus-ToZwczpHmizcDguLfEGupRFoyRODB2KPg 0xc00000e090 map[alg:HS256 typ:JWT] 0xc000094150 X5q1PPsus-ToZwczpHmizcDguLfEGupRFoyRODB2KPg true}

进一步解析jwt

fmt.Println(token.Claims)

结果为

image-20211017232955107

取出其中的字段

fmt.Println(token.Claims.(*MyClaims).Username)

image-20211017233328833

MapClaims

除了使用自定义的Claims也可以使用官方提供的Claims

使用官方提供的claims新建jwt:

token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
    "username": "张三",
    "nbf": time.Now().Unix() - 60, // 开始时间
    "exp": time.Now().Unix() + 60 * 60 * 2, // 期限
    "iss": "张三",	// 签发人
})

然后也可以对其解析

token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
    "username": "张三",
    "nbf": time.Now().Unix() - 60, // 开始时间
    "exp": time.Now().Unix() + 60 * 60 * 2, // 期限
    "iss": "张三",	// 签发人
})
mySigningKey := []byte("sauidhauihauihdiuah") // 加密密钥
s, err := token.SignedString(mySigningKey) // 对token进行加密

// 解析jwt
token, err = jwt.ParseWithClaims(s, &jwt.MapClaims{}, func(token *jwt.Token) (interface{}, error) {
    return mySigningKey, nil
})
if err != nil {
    fmt.Println(err)
}
fmt.Println(token.Claims)

可以看到打印结果为一个map

image-20211017234041145

取出其中每一项

userMap := *token.Claims.(*jwt.MapClaims)
for _, val := range userMap {
   fmt.Println(val)
}

结果如下

image-20211017235002443

本文作者:七つ一旋桜

本文链接:https://www.cnblogs.com/poifa/p/15391494.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   七つ一旋桜  阅读(111)  评论(0编辑  收藏  举报
(评论功能已被禁用)
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起