Token应用 | 青训营笔记

61 阅读2分钟

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

Token定义:

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

使用Token的目的:

oken的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

使用Token的流程:

  1. 使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。流程是这样的:
  2. 客户端使用用户名跟密码请求登录
  3. 服务端收到请求,去验证用户名与密码
  4. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
  5. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
  6. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
  7. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
  8. APP登录的时候发送加密的用户名和密码到服务器,服务器验证用户名和密码,如果成功,以某种方式比如随机生成32位的字符串作为token,存储到服务器中,并返回token到APP,以后APP请求时,
  9. 凡是需要验证的地方都要带上该token,然后服务器端验证token,成功返回所需要的结果,失败返回错误信息,让他重新登录。其中服务器上token设置一个有效期,每次APP请求的时候都验证token和有效期。

Go语言使用Token:

func GenerateToken() (string, error) {
    nowTime := time.Now()
    expireTime := nowTime.Add(300 * time.Second) 
    issuer := "frank"
    claims := MyCustomClaims{
        ID: 10001,
        Username: "frank",
        StandardClaims: jwt.StandardClaims{
            ExpiresAt: expireTime.Unix(),
            Issuer: issuer,
        },
  }
  token, err := jwt.NewWithClaims(jwt.SigningMethodHS256,claims).SignedString([]byte("golang")) return token, err }