token学习笔记 | 青训营

99 阅读4分钟

导语:我是一个刚接触go语言的小白,而且还是非科班的,在本次青训营之前都没有完整的学习过网络相关的课程,在完成抖音后端项目的开发任务的过程中,接触到了很多和新的东西,特在此对所学内容进行简单的记录,如内容有误,还请大家多多海涵!

一、token简述

1.1 token的定义

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

例如在登录上QQ、微信、抖音后下一次登录不需要输入密码,在token的有效期内也可以登录

1.2 token的特点

  • 无状态、可扩展
  • 安全性
  • 多平台跨域
  • 基于标准

二、基于token的身份验证流程

简单 token 的组成: uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。流程如下:

v2-c716fc51fe283710dda851d25b731fab_720w.webp

  1. 客户端使用用户名跟密码请求登录

  2. 服务端收到请求,去验证用户名与密码

  3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端

  4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里

  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token

  6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

  7. APP登录的时候发送加密的用户名和密码到服务器,服务器验证用户名和密码,如果成功,以某种方式比如随机生成32位的字符串作为token,存储到服务器中,并返回token到APP,以后APP请求时,

  8. 凡是需要验证的地方都要带上该token,然后服务器端验证token,成功返回所需要的结果,失败返回错误信息,让他重新登录。其中服务器上token设置一个有效期,每次APP请求的时候都验证token和有效期。

三、Token 和 JWT 的区别与联系

实施 Token 验证的方法有很多,比如 JWT(JSON Web Tokens)。JWT 标准的 Token 有三个部分:

1.header(头部),头部信息主要包括(参数的类型--JWT,签名的算法--HS256)

2.poyload(负荷),负荷基本就是自己想要存放的信息(因为信息会暴露,不应该在载荷里面加入任何敏感的数据)

3.sign(签名),签名的作用就是为了防止恶意篡改数据,下边会详细说明

相同:

  • 都是访问资源的令牌
  • 都可以记录用户的信息
  • 都是使服务端无状态化
  • 都是只有验证成功后,客户端才能访问服务端上受保护的资源

区别:

  • Token:服务端验证客户端发送过来的 Token 时,还需要查询数据库获取用户信息,然后验证 Token 是否有效。

  • JWT:将 Token 和 Payload 加密后存储于客户端,服务端只需要使用密钥解密进行校验(校验也是 JWT 自己实现的)即可,不需要查询或者减少查询数据库,因为 JWT 自包含了用户信息和加密的数据。

四、学习总结

当能够实现应用的基础功能之后,就想到要提高应用的安全性,在本次的青训营项目中,也使用了token,token的生成由三部分组成。token和我负责的接口直接有很大的联系,于是我开始了解token,但是发现网上搜到的很多的都是和java有关的,和go有关的比较少,而且我们项目中使用的也不是jwt,所以就比较迷惑。token了解起来难度不是很高,但是使用很频繁,我还有很多需要学习的东西。

学习链接:

JSON Web Token 入门教程

什么是token及怎样生成token

还分不清 Cookie、Session、Token、JWT?

Token的详细说明,看这一篇就够了