- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)