Go Jwt With Token
Go 使用 Jwt 实现 Token 认证
目录
JWT
JWT全称JSON Web Token是一种跨域认证解决方案, 属于一个开放的标准, 它规定了一种Token实现方式, 目前多用于前后端分离项目和OAuth2.0业务场景下。JWT本身没有定义任何技术实现, 它只是定义了一种基于Token的会话管理的规则, 涵盖Token需要包含的标准内容和Token的生成过程, 特别适用于分布式的单点登录(OSS) 场景。
JWT优势JWT拥有基于Token的会话管理方式所拥有的一切优势, 不依赖Cookie, 防止CSRF攻击, 也可以在禁止Cookie的浏览器环境中使用。服务端不需要存储
Session, 服务端认证鉴权业务扩展方便, 避免存储Session所需要配置的如:Redis等组件, 降低系统架构复杂度。
JWT劣势- 由于
Token鉴权有效期存储于JWT中, 所以JWTToken一段签发, 就会在有效期内一直有效, 无法在服务端进行中止, 只能通过客户端进行废除。
- 由于
JWT 组成
一个 JWT 有三个部分组成, 以
.进行分割. 这三部分都是单独经过Base64编码。Header头部header中存储了所使用的加密算法和Token类型. JSON 格式:{"alg": "HS256", "typ": "JWT"}
Payload负载payload中包含官方提供的7个字段. (也可以自定义字段) JSON 格式:iss(issuer): 签名人exp(expiration time): 过期时间sub(subject): 主题aud(audience): 受众nbf(Not Before): 生效时间iat(Issued At): 签发时间jti(JWT ID): 编号。
Signature签名signature是对前面两部分(Header、Payload) 进行签名, 防止数据篡改。- 签名的过程首先需要有一个定义的密钥(Secret)。然后使用
Header里定义的算法进行签名。(默认为 HMAC SHA256)
- 签名的过程首先需要有一个定义的密钥(Secret)。然后使用
Go 使用 JWT
- Go 语言使用
jwt-go第三方库实现JWT的生成 和 解析。
| |
Gin JWT 认证
- 在 Gin 框架中, 实现一个 认证 JWT Token 的中间件。后续在需要认证的路由中直接嵌入这个中间件就可以。
| |