go中一些特性与 jwt | 青训营笔记

74 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天

GO本身自己写的包要调用的话 需要复制一份进入本身环境变量的文件 才可以识别到 或者直接在环境变量目录下进行 又或者可以通过 go mod 与go sum 进行识别

JWT

JWT(json web token),它并不是一个具体的技术实现,而更像是一种标准。

JWT规定了数据传输的结构,一串完整的JWT由三段落组成,每个段落用英文句号连接(.)连接,他们分别是:Header、Payload、Signature,所以,常规的JWT内容格式是这样的:AAA.BBB.CCC

针对前后端分离的项目,大多是通过 token 进行身份认证来进行交互,一种简单的创建 token 的方式 JWT。

组成部分#

一个 JWT 实际上就是一个字符串,它由三部分组成,头部、载荷与签名。前两部分需要经过 Base64 编码,后一部分通过前两部分 Base64 编码后再加密而成。

如果读者不理解上边的陈述,不要紧,下文会详细讲解。

头部(Header)

头部用于描述关于该 JWT 的最基本的信息,例如其类型以及签名所用的算法等,也可以被表示成一个 JSON 对象。例如:

Copy
{"typ":"JWT","alg":"HS256"}

在头部指明了签名算法是 HS256 算法。

经过 Base64 编码得到:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9(第一部分)。下文参考资料提供线上加密/解密网址,感兴趣的读者可以自己尝试。

载荷(playload)

载荷就是存放有效信息的地方。这些有效信息包含三个部分:

(1)标准中注册的声明(建议但不强制使用)

Copy
iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击

(2)公共的声明

Copy
公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息,但不建议添加敏感信息,因为该部分在客户端可解密。

参考引用:www.cnblogs.com/muchengqing… www.cnblogs.com/moonlightL/…