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

golang常用库之-golang-jwt/jwt包

文章目录

  • golang常用库之-golang-jwt/jwt包
    • golang-jwt/jwt包
    • 使用demo

golang常用库之-golang-jwt/jwt包

golang-jwt/jwt包

github: https://github.com/golang-jwt/jwt

golang-jwt/jwt 是一个在 Go 语言中使用 JSON Web Tokens(JWT)进行身份验证和授权的库。JWT 是一种用于在跨网络进行安全通信的开放标准(RFC 7519),它使用一个 JSON 对象来表示被声明的安全性信息。

golang-jwt/jwt 包提供了创建、解析和验证 JWT 的功能。你可以使用它来生成 JWT、将用户数据编码为 JWT 格式、验证和解析 JWT,以及处理 JWT 中的声明和签名等。

使用demo

生成JWT令牌

type AuthClaims struct {Username string `json:"username"`jwt.StandardClaims
}func GeneralJwtToken(userName string) (string, error) {return CreateToken(AuthClaims{Username: userName,StandardClaims: jwt.StandardClaims{ExpiresAt: time.Now().Add(JWTExpireMinute * time.Minute).Unix(),},}, APITokenSecret)
}func CreateToken(payload jwt.Claims, secret []byte) (string, error) {token := jwt.NewWithClaims(jwt.SigningMethodHS256, payload)tokenString, err := token.SignedString(secret)if err != nil {return "", err}return tokenString, nil
}

AuthClaims是一个结构体类型,用于存储JWT令牌的声明信息。它包含了两个字段:Username和StandardClaims。

Username是一个字符串类型的字段,用于存储JWT令牌中的用户名。它被标记为json:“username”,表示在将该结构体编码为JSON格式时,该字段应该使用username作为键名。

StandardClaims是一个使用jwt.StandardClaims类型的匿名字段。这意味着AuthClaims结构体具有jwt.StandardClaims类型的所有字段和方法。jwt.StandardClaims是JWT库提供的一个结构体,其中包含了JWT的标准声明信息,如过期时间(ExpiresAt)、签发时间(IssuedAt)和JWT ID(Id)。通过嵌入jwt.StandardClaims,AuthClaims结构体可以继承这些标准声明信息,避免了重复定义这些字段

综上所述,AuthClaims结构体用于定义JWT令牌的声明信息,**并通过嵌入jwt.StandardClaims来继承标准声明信息。**它的Username字段用于存储JWT令牌中的用户名,并在编码为JSON格式时使用username作为键名。

CreateToken函数接受两个参数:payload和secret。payload是一个实现了jwt.Claims接口的结构体,用于包含JWT令牌的声明信息。在这里,payload被传递为AuthClaims结构体,其中包含了用户名和标准声明信息。secret是一个字节数组,用作对JWT进行签名的密钥

相关文章:

  • go-carbon v2.3.6 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
  • 云风网(www.niech.cn)个人网站搭建(二)服务器域名配置
  • 用于垃圾回收的运行时配置选项
  • k8s---包管理器helm
  • 模型部署flask学习篇(一)---- flask初始及创建登录页面
  • c#企业微信上传的文件丢失格式,pdf不能预览,errcode:44001
  • Python中按照字典value中的某个类属性对字典重排序
  • 2023年第十四届蓝桥杯软件赛省赛总评
  • 基于SpringBoot的宽带业务管理系统
  • 云原生离线工作流编排利器 -- 分布式工作流 Argo 集群
  • GBase 8s常见问题解析---追踪统计SQL执行情况 SQLTRACE
  • 2、Line Charts折线图
  • 【设计模式】腾讯二面:自动贩卖机/音频播放器使用了什么设计模式?
  • 上门回收小程序,打造回收新模式
  • 【网络安全】常见的网络威胁有哪些?
  • __proto__ 和 prototype的关系
  • 【译】理解JavaScript:new 关键字
  • 08.Android之View事件问题
  • Android优雅地处理按钮重复点击
  • JavaScript-Array类型
  • JDK9: 集成 Jshell 和 Maven 项目.
  • js递归,无限分级树形折叠菜单
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Sequelize 中文文档 v4 - Getting started - 入门
  • spring学习第二天
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 物联网链路协议
  • 最近的计划
  • HanLP分词命名实体提取详解
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #{}和${}的区别?
  • #宝哥教你#查看jquery绑定的事件函数
  • #微信小程序:微信小程序常见的配置传值
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (2)MFC+openGL单文档框架glFrame
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (笔试题)分解质因式
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (六)c52学习之旅-独立按键
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)树状数组
  • (转载)Linux 多线程条件变量同步
  • @ModelAttribute 注解
  • @ModelAttribute注解使用
  • @RequestBody与@ResponseBody的使用