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

golang 获取token方法

package main
 
import (
	"fmt"
	"time"
 
	"github.com/dgrijalva/jwt-go"
)
 
const (
	SECRETKEY = "202203021124355xxx" //私钥
)
 
// 自定义 Claims
type CustomClaims struct {
	UserId int64
	jwt.StandardClaims
}
 
func main() {
	//生成 token
	maxAge := 60 * 60 * 24
	customClaims := &CustomClaims{
		UserId: 11, //用户 id
		StandardClaims: jwt.StandardClaims{
			ExpiresAt: time.Now().Add(time.Duration(maxAge) * time.Second).Unix(), // 过期时间,必须设置
			Issuer:    "root",                                                     // 非必须,也可以填充用户名,
		},
	}
	//采用 HMAC SHA256 加密算法
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, customClaims)
	tokenString, err := token.SignedString([]byte(SECRETKEY))
	if err != nil {
		fmt.Println(err)
	}
	fmt.Printf("token: %v\n", tokenString)
	fmt.Println("Token=====", tokenString)
	//解析 token
	ret, err := ParseToken(tokenString)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Printf("userinfo: %v\n", ret)
	fmt.Println("====创建时间", ret.ExpiresAt)
}
 
// 解析 token
func ParseToken(tokenString string) (*CustomClaims, error) {
	token, err := jwt.ParseWithClaims(tokenString, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {
		if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
			return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
		}
		return []byte(SECRETKEY), nil
	})
	if claims, ok := token.Claims.(*CustomClaims); ok && token.Valid {
		return claims, nil
	} else {
		return nil, err
	}
}
http://www.lryc.cn/news/26621.html

相关文章:

  • 【数据库专题】数据库Mongodb之深入认知云计算三种服务方式、mongodb特点、mongodb重要进程 mongod、mongo、其他进程区别
  • ccc-pytorch-小实验合集(4)
  • webrtc音频系列——4、RTP与RTCP协议
  • C++枚举解读(enum)
  • OSCP-课外5(Web图片泄露服务信息、日志中毒)
  • 汇编指令学习(ADD,SUB,MUL,DIV,XADD,INC,DEC,NEG)
  • 【电源专题】案例:充电芯片损坏为什么判断是从NTC进入的EOS
  • C语言中的数据储存规则
  • Android kotlin实战之协程suspend详解与使用
  • Pycharm中的Virtualenv Environment、Conda Environment
  • C++容器介绍:vector
  • 抗锯齿和走样(笔记)
  • 线程池的使用——线程池的创建方式
  • 代码随想录算法训练营day47 |动态规划 198打家劫舍 213打家劫舍II 337打家劫舍III
  • 项目设计模式和规范
  • 无线WiFi安全渗透与攻防(一)之无线安全环境搭建
  • 【matplotlib】可视化解决方案——如何解决matplotlib中文乱码问题
  • JAVA开发中GC日志打印简单通用的配置详解
  • 十进制的小数如何转二进制?二进制表示的小数如何转十进制?
  • klipper使用webcam设置多个摄像头方式
  • 风力发电机组浪涌保护器安全防护方案
  • 【剑指offer】JZ7 重建二叉树、JZ9 用两个栈实现队列
  • ElasticSearch - SpringBoot整合ES之查询所有 match_all
  • 详谈IIC
  • 【Autoware】采集实验数据bag包并仿真运行
  • 名创优品怎么把创意做成生意?
  • springboot原项目配置文件迁移至nacos
  • 常用的shell脚步操作
  • Java on VS Code 2月更新|JUnit 5 并行测试与 Spring Boot 插件的过滤功能
  • 无线WiFi安全渗透与攻防(三)之Windows扫描wifi和破解WiFi密码