jwt解析在线开发工具解码原理详解及用例分享
jwt,全称是Json Web Token, 是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权。
JWT的验证方式
JWT 采用的是Token令牌的方式,来进行校验,具体如下:
- 客户端使用用户名和密码请求登录。
- 服务器验证账号和密码通过后,服务端会签发一个 Token 返回给客户端。
- 客户端收到请求后会将 Token 缓存起来,比如放在浏览器 Cookie 中或者存储在Local Stage中,之后每次请求都会携带该 Token。
- 服务端收到请求后会验证请求中携带的 Token,验证通过则进行业务逻辑处理并成功返回数据
解析JWT代码
package main
import (
"github.com/dgrijalva/jwt-go"
"testing"
"time"
)
//定义结构体
type MyClaims struct {
Username string `json:"username"`
Password string `json:"password"`
jwt.StandardClaims
}
//自定义秘钥
var keyword = "hello world"
func TestParseJWT(t *testing.T) {
//tokenString是已知的token字符串
tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiIxMjMiLCJleHAiOjE2NTk3OTQ2NzgsImlzcyI6ImZveCJ9.w6yJSMdfR7kleBMujYWKxMczVxbD84_-Y6ATRn4eXNE"
token, err := jwt.ParseWithClaims(
tokenString, //第一个参数是已知token字符串
&MyClaims{}, //第二个参数是自定义的claims
func(token *jwt.Token) (interface{}, error) {
return []byte(keyword), nil //keyword是自定义的秘钥
},
)
if err != nil {
t.Log(err)
return
}
result := token.Claims.(*MyClaims) //解析
t.Log(result.Username) //查看token中的username
t.Log(result.Password) //查看token中的Password
t.Log(result.ExpiresAt) //查看token中的ExpiresAt有效期
ExpiresAt := time.Unix(result.ExpiresAt, 0).Format("2006-01-02 15:04:05") //格式化有效期
t.Log(ExpiresAt) //以2006-01-02 15:04:05格式显示有效期
}
代码截图
执行结果
GOROOT=C:\Go #gosetup
GOPATH=C:\Users\Administrator\go #gosetup
C:\Go\bin\go.exe test -c -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___api_server__TestParseJWT.test.exe api-server #gosetup
C:\Go\bin\go.exe tool test2json -t C:\Users\Administrator\AppData\Local\Temp\GoLand\___api_server__TestParseJWT.test.exe -test.v -test.paniconexit0 -test.run ^\QTestParseJWT\E$ #gosetup
=== RUN TestParseJWT
main_test.go:52: admin
main_test.go:53: 123
main_test.go:54: 1659794678
main_test.go:56: 2022-08-06 22:04:38
--- PASS: TestParseJWT (0.02s)
PASS
进程 已完成,退出代码为 0