golang中的jwt使用教程流程分析.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

golang中的jwt使用教程流程分析

目录golang-jwt使用加密解密源码分析SignedStringParseWithClaims

golang-jwt使用

老版本v4.0.0为/dgrijalva/jwt-go新版本/golang-jwt/jwt

本文环境为新版本

加密

1.在使用之前我们应该对它进行安装与导入

goget-u/golang-jwt/jwt/v4

import/golang-jwt/jwt/v4

2.既然导入成功那就开始使用吧

packagemain

import(

fmt

/golang-jwt/jwt/v4

funcmain(){

//创建秘钥

key:=[]byte(aaa)

//创建Token结构体

claims:=jwt.NewWithClaims(jwt.SigningMethodHS256,jwt.MapClaims{

user:zhangshan,

pass:123123,

//调用加密方法,发挥Token字符串

signingString,err:=claims.SignedString(key)

iferr!=nil{

return

fmt.Println(signingString)

//这边是输出结果

{0xc0000c2690map[alg:ES256typ:JWT]map[user:zhangshan]false}

//这是加密后的字符串

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXNzIjoiMTIzMTIzIiwidXNlciI6InpoYW5nc2hhbiJ9.-2-xIJXMGKV-GyhM24OKbDVqWs4dsIANBsGhzXEfEFM

3.逐步讲解

首先我们先查看第一步

claims:=jwt.NewWithClaims(jwt.SigningMethodES256,jwt.MapClaims{

user:zhangshan,

})

newWithClaims会返回一个Token结构体,而这个token结构体有以下属性

typeTokenstruct{

Rawstring//原始令牌

MethodSigningMethod//加密方法比如sha256加密

Headermap[string]interface{}//token头信息

ClaimsClaims//加密配置,比如超时时间等

Signaturestring//加密后的字符串

Validbool//是否校验

typeTokenstruct{

Rawstring//原始令牌

MethodSigningMethod//加密方法比如sha256加密

Headermap[string]interface{}//token头信息

ClaimsClaims//加密配置,比如超时时间等

Signaturestring//加密后的字符串

Validbool//是否校验

}

我们可以通过该结构体获取到加密后的字符串信息。

接下来我们需要讲解一下Claims该结构体存储了token字符串的超时时间等信息以及在解析时的Token校验工作。

typeClaimsinterface{

Valid()error

//实现类有MapClaims、RegisteredClaims、StandardClaims(舍弃)

//其实后两个结构体都是根据MapClaims编写而来,所以我们只需要掌握MapClaims即可

typeMapClaimsmap[string]interface{}

就是一个map集合,但是它实现了上面Valid()方法,该方法里面实现了对token过期日期校验、发布时间、生效时间的校验工作。

所以在map里面有三个固定的键我们可以根据需要进行设置,exp过期时间、iat发布时间、nbf生效时间

解密

既然已经将Token值进行了加密那么如何对其进行验证(俗称解密)那?

//根据Token字符串解析成Claims结构体

_,err=jwt.ParseWithClaims(signingString,jwt.MapClaims{},func(token*jwt.Token)

文档评论(0)

183****9196 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档