当前位置:网站首页>go jwt使用
go jwt使用
2022-07-30 01:39:00 【给我一瓶冰阔洛】
go jwt加密解密
package main
import (
"errors"
"fmt"
"github.com/golang-jwt/jwt"
"log"
"time"
)
//自定义加密结构体数据需要实现jwt.StandardClaims 方法
type Test struct{
Name string `json:"name"`
Context string `json:"context"`
jwt.StandardClaims
}
var SignKey = []byte("1123654gfdhgfd")
func main() {
a := Test{
Name: "v_6556u",
Context:"哈哈哈",
StandardClaims: jwt.StandardClaims{
NotBefore: time.Now().Unix() , // 开始生效时间
ExpiresAt: time.Now().Unix() + 20 ,// 过期时间 (5秒后过期)
Issuer:"xuzhi",//签发人
},
}
//jwt.NewWithClaims 生成token
//jwt.SigningMethodHS256 加密方式
token := jwt.NewWithClaims(jwt.SigningMethodHS256, a)//使用自定义体a
tokenString, err := token.SignedString(SignKey)
if err != nil {
fmt.Println("error")
log.Println(err.Error())
return
}
fmt.Println("加密后的token字符串:", tokenString)
//解密
s,err := ParseToken(tokenString)
if err != nil {
log.Panicln(err.Error())
}
fmt.Println("解密:",s)
fmt.Println("=====================================")
tokenA := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{//自带的jwt.MapClaims
"name": "司大帅",
"content":"asdfg",
"exp": time.Now().Unix(),
"iss": "lisa",
})
//token.SignedString 将token 转换为string
tokenStringA, err := tokenA.SignedString(SignKey)
if err != nil {
fmt.Println("error")
log.Println(err.Error())
return
}
fmt.Println("加密后的token字符串", tokenStringA)
//在这里如果也使用jwt.ParseWithClaims的话,第二个参数就写jwt.MapClaims{}
//例如jwt.ParseWithClaims(tokenString, jwt.MapClaims{},func(t *jwt.Token) (interface{}, error){}
fmt.Println(jwt_decode(tokenStringA, SignKey))
}
//解密 自带的jwt.MapClaims
func jwt_decode(token string, SignKey []byte)map[string]interface{}{
token_decode, err := jwt.Parse(token, func(t *jwt.Token) (interface{}, error) {
return SignKey, nil
})
if err != nil {
log.Fatalln(err.Error())
}
return token_decode.Claims.(jwt.MapClaims)
}
// ParseToken 解析JWT
func ParseToken(tokenString string) (*Test, error) {
// 解析token
token, err := jwt.ParseWithClaims(tokenString, &Test{}, func(token *jwt.Token) (i interface{}, err error) {
return SignKey, nil
})
if err != nil {
return nil, err
}
// 令牌有效
if claims, ok := token.Claims.(*Test); ok && token.Valid { // 校验token
return claims, nil
}
return nil, errors.New("invalid token")
}
边栏推荐
- js中原型链的理解,原型链解决的是什么问题?
- 基于SSM实现个性化健康饮食推荐系统
- Recommendation systems: feature engineering, common features
- 【MySQL必知必会】 范式 | ER模型
- [Microservice~Nacos] Configuration Center of Nacos
- What to test for app testing
- Elephant Swap:借助ePLATO提供加密市场的套利空间
- 泰克Tektronix示波器软件TDS2012|TDS2014|TDS2022上位机软件NS-Scope
- Fabric 私有数据案例
- typora 透明背景图片
猜你喜欢

postgresql日常运维技能,适合初学者

新型LaaS协议Elephant Swap给ePLATO提供可持续溢价空间

SwiftUI SQLite Database Storage Tutorial Collection (2022 Edition)

LeetCode 2342. 数位和相等数对的最大和
![[Microservice~Nacos] Configuration Center of Nacos](/img/c3/9d8fb0fd49a0ebab43ed604f9bd1cc.png)
[Microservice~Nacos] Configuration Center of Nacos

网络原理 基础知识

裁员趋势下的大厂面试:“字节跳动”

「MySQL」- 基础增删改查

基于低能耗自适应聚类层次结构(LEACH)(Matlab代码实现)

Running a Fabric Application
随机推荐
MATLAB被禁下一个会是LABVIEW吗?国产测试软件ATECLOUD崛起发力
华为“天才少年”稚晖君又出新作,从零开始造“客制化”智能键盘
npm ERR! code ENOTSUPnpm ERR! notsup Unsupported engine for [email protected]: wanted: {“n
App测试需要测什么
基于SSM开发实现校园疫情防控管理系统
Baidu Intelligent Cloud Zhangmiao: Detailed explanation of enterprise-level seven-layer load balancing open source software BFE
[MySQL series] MySQL database foundation
ROS2知识:编译系统ament_cmake
记笔记!电源自动测试系统测试电源纹波详细方法
Fabric 私有数据案例
【微服务~Nacos】Nacos服务提供者和服务消费者
实习经历梳理
初级测试人员如何快速成长
Running a Fabric Application
CMake Tutorial Tour(0)_Overview
js中原型链的理解,原型链解决的是什么问题?
ROS 2知识:通信协议 DDS/RTPS
The role of diff and key
「MySQL」- 基础增删改查
tcp ip