go语言中jwt功能开发库推荐:golang-jwt/jwt
Go  /  管理员 发布于 2年前   784
go项目中jwt功能实现推荐go jwt库推荐 :github.com/golang-jwt/jwt库
安装获取:
go get -u github.com/golang-jwt/jwt/v4
Header
header典型的由两部分组成:
token 的类型(“JWT”)和算法名称(比如:HMAC SHA256 或者 RSA 等等
{
'typ': 'JWT',
'alg': 'HS256'
}
Payload
载荷就是存放有效信息的地方。
这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分
标准中注册的声明
公共的声明
私有的声明
jwt.StandardClaims 标准中注册的声明 (建议但不强制使用) :
iss: jwt 签发者
sub: jwt 所面向的用户
aud: 接收 jwt 的一方
exp: jwt 的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该 jwt 都是不可用的.
iat: jwt 的签发时间
jti: jwt 的唯一身份标识,主要用来作为一次性 token, 从而回避重放攻击。
私有的声明 :
私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为 base64 是对称解密的,意味着该部分信息可以归类为明文信息
私有定义的内容根据自己业务需要来,这里简单加了 UID
type AuthClaim struct {
UID int64 `json:"uid"`
jwt.StandardClaims
}
Signature 签名
secret 是保存在服务器端的,jwt 的签发生成也是在服务器端的,secret 就是用来进行 jwt 的签发和 jwt 的验证,
所以,它就是你服务端的私钥,在任何场景都不应该流露出去。
一旦客户端得知这个 secret, 那就意味着客户端是可以自我签发 jwt 了。
var Secret = "私钥"
var hmacSampleSecret = []byte(Secret)
生成 token
生成了两个小时过期时间的 token
const TokenExpireDuration = 2 * time.Hour //过期时间
func New(uid int64) (tokenStr string) {
var authClaim AuthClaim
authClaim.UID = uid
authClaim.StandardClaims.ExpiresAt = time.Now().Add(TokenExpireDuration).Unix()
token := jwt.NewWithClaims(jwt.SigningMethodHS256, authClaim)
tokenString, _ := token.SignedString(hmacSampleSecret) //私钥加密
return tokenString
}
解析 token
func Parse(tokenString string) (auth AuthClaim, Valid bool) {
token, _ := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
// Don't forget to validate the alg is what you expect:
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
}
// hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key")
return hmacSampleSecret, nil
})
Valid = token.Valid//token是否有效 true有效 false无效
if claims, ok := token.Claims.(jwt.MapClaims); ok && Valid {
auth.UID = int64(claims["uid"].(float64)) //自定义的UID
auth.ExpiresAt = int64(claims["exp"].(float64)) //过期时间
}
return
}
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号