什么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.StandardClaimsUserID int `json:"user_id"`}- 接着,在生成 token 时,我们需要创建一个 MyCustomClaims 的实例,设置 UserID,且此时可以设置 token 的有效期(ExpireAt)等其他标准字段:
- 最后,在解析 token 时,我们需要解析到我们的自定义 Claims 结构体中,这样就可以获取用户 ID 了:
- CreateTokenV1和ParseTokenV2分别代表着创建和解析
推荐阅读
- AI招聘渐热,如何抵御隐藏在算法背后的歧视?
- 如何给小孩取名字 如何给小孩取名字好
- 健脾养肝明目 南瓜滚猪肝汤
- 如何给宝宝取名字的技巧 如何给宝宝取名
- 女生英语名字 女生英语名字简短好听又梦幻
- 眼镜店广告语说什么
- 潘阳:30岁嫁10亿富豪,全要感谢潘长江?如今婚后生活如何?
- 电力猫原理 电力猫原理如何使用方法
- 谐音歇后语有哪些 谐音歇后语有哪些及答案
- 如何成功进入市电力公司—三种途径供您选择!
