什么JWT
JWT(JSON Web Token)是一种开放标准(RFC 7519),定义了一种在各方之间安全传输信息的简洁方式 。这些信息可以被验证和信任,因为它们是数字签名的 。
JWT由三部分组成,用.
分隔 。它们分别是Header(头部)、Payload(负载)和Signature(签名) 。
- Header:通常由两部分组成:token类型和使用的加密算法 。
- Payload:存放有效信息的地方 。有效信息包括三个部分:声明类型、公共声明和私有声明 。
- Signature:签名是由头部、负载、密钥和加密算法组合而来,用于验证消息没有被篡改 。
优点:
- 简洁:JWT是为了在网络应用环境间传递声明而执行的 。因为是轻量化的,所以它可用于SSO(Single Sign On单点登录) 。
- 安全:JWT的ClAIms(声明)是被加密的,采用的是一个密钥,只有签发者才能使用那个密钥,这保证了安全 。
- 方便:无状态,不需要在服务器存储用户状态,这使得应用更容易扩展 。
- 体积较大:因为JWT需要在每次请求头上带上token,如果token过大可能会导致请求头过大,不如sessionID方式中uuid那么轻便 。
- 存储敏感信息:虽然JWT的Payload(负载)部分采取了Base64Url 编码进行转义,但这仅仅是编码而已,并非加密操作,需要避免在声明中放入敏感信息 。
- 无自动过期机制:JWT一旦签发在到期时间之前会一直有效,不像session那样在用户登出之后可以直接销毁 。这就需要服务器提供黑名单机制来强制让token失效 。
Go中如何使用JWT
- 安装jwt-go库:在Go语中,有一个非常优秀的处理
JWT
的库jwt-go
,可以直接使用go get
命令进行安装:
- 【Go语言中如何实现JWT】
go get Github.com/dgrijalva/jwt-go
jwt.StandardClaims
,然后添加我们需要的字段,比如 UserID:func main() {
v1, err := CreateTokenV1("456", false)
fmt.Printf(v1,err)
ParseTokenV2(v1,"456")
}
func CreateTokenV1(secretKey string, isNotExpired bool) (string, error){
var expirationTime = time.Now().Add(24 * time.Hour)
if isNotExpired {
expirationTime = time.Now().Add(40 * 24 * time.Hour)
}
claims := &MyCustomClaims{
jwt.StandardClaims{
ExpiresAt: expirationTime.Unix(),
},
123,//用户id
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return token.SignedString([]byte(secretKey))
}
func ParseTokenV2(tokenString string, secretKey string){
token, _ := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, func(t *jwt.Token) (interface{}, error) {
return []byte(secretKey), nil
})
if claims, ok := token.Claims.(*MyCustomClaims); ok && token.Valid {
fmt.Println(claims.UserID)
}
}
type MyCustomClaims struct {
jwt.StandardClaims
UserID int `json:"user_id"`
}
- 接着,在生成 token 时,我们需要创建一个 MyCustomClaims 的实例,设置 UserID,且此时可以设置 token 的有效期(ExpireAt)等其他标准字段:
- 最后,在解析 token 时,我们需要解析到我们的自定义 Claims 结构体中,这样就可以获取用户 ID 了:
- CreateTokenV1和ParseTokenV2分别代表着创建和解析
推荐阅读
- AI招聘渐热,如何抵御隐藏在算法背后的歧视?
- 如何给小孩取名字 如何给小孩取名字好
- 健脾养肝明目 南瓜滚猪肝汤
- 如何给宝宝取名字的技巧 如何给宝宝取名
- 女生英语名字 女生英语名字简短好听又梦幻
- 眼镜店广告语说什么
- 潘阳:30岁嫁10亿富豪,全要感谢潘长江?如今婚后生活如何?
- 电力猫原理 电力猫原理如何使用方法
- 谐音歇后语有哪些 谐音歇后语有哪些及答案
- 如何成功进入市电力公司—三种途径供您选择!