极简抖音大项目鉴权Token | 青训营笔记

224 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记。

本文主要介绍了鉴权机制相关知识以及项目中用到的JWT如何生成Token的。

Token是什么

Token是一种鉴权机制。由于Http是无状态协议,因此每次发送请求需要进行验证。而Token能够记录用户的认证信息。其流程如下:

用户使用用户名和密码进行登录
服务端对用户名和密码进行验证
验证通过后形成一个token并且返回给客户端
客户端存储token值,并且每次请求时会将token放在请求头里
服务端需要对token进行验证,并返回数据

什么是JWT

JWT即 Json Web Token,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519)。前面提到Token需要验证用户信息,那么需要保证用户信息验证登录的安全性;因此JWT用来在客户端与服务端之间作为用户身份信息的验证途径。

JWT组成

JWT由三段信息构成,以‘.’将各部分区分。具体如下:

头部(header):声名类型和加密算法
载荷(payload):存放有效信息,注册的声名、公有声名、私有声名
签证(signature):保证头部和载荷的有效性,使用base64加密后的头部和载荷,随后再进行加盐(secrte)

以上三部分内容组成了一个完整的字符串,即JWT

Go实践

安装依赖

go get -u github.com/dgrijalva/jwt-go

根据用户名和时间创建token

定义claims结构体,包括用户自定义字段(username)设置失效时间和签发人   
指定签名方法创建签名对象       jwt.NewWithClaims
使用指定的secret签名并获得完成编码后的字符串token    SignedString

image.png

登陆时检验token

即根据传入的token值获得到claims对象信息,即获得请求的用户名。 校验时使用ParseWithClaims即解析token,生成用户名。 根据用户名判断是否存在于数据库中。

小结

JWT方便用户登录鉴权,结构简单,不需要保留会话信息,易于扩展。同时,需要保证生成字符串的安全性,不应在payload存放敏感信息,保护好私钥。