1.获取token

POST请求参数

{
    "name":"xj",
    "pwd":"xj123456"
}

golang api router:


// 获取Token
router.POST("/api/getToken", service.GetApiTokenService)

service:


//请求参数结构体
type GetTokenRequestParam struct {
  Name string `json:"Name"`
  Pwd  string `json:"Pwd"`
}

//自定义密钥
var tokenApiSecret = "itxj980420"
//获取token
func GetTokenService(c *gin.Context) {
  reqModel := GetTokenRequestParam{}
  errByBind := c.Bind(&reqModel)
  if errByBind != nil {
      c.JSON(http.StatusOK, gin.H{
          "code":    http.StatusBadRequest,
          "message": "失败",
          "token":   "",
      })
      return
  }
  //参数非空校验
  if common.IsEmpty(reqModel.Name) || common.IsEmpty(reqModel.Pwd) {
      c.JSON(http.StatusOK, gin.H{
          "code":    http.StatusBadRequest,
          "message": "账号、密码不能为空!!!",
          "token":   "",
      })
      return
  }
  //TODO 添加其他校验如账号密码校验;签名校验等其他自定义参数校验

  //jwt token header 法加密
  token := jwt.New(jwt.SigningMethodHS256)
  //jwt claims 载荷
  //jti:该jwt的唯一标识
  //iss:该jwt的签发者
  //iat:该jwt的签发时间
  //aud:该jwt的接收者
  //sub:该jwt的面向的用户
  //nbf:该jwt的生效时间,可不设置,若设置,一定要大于当前Unix UTC,否则token将会延迟生效
  //  exp:该jwt的过期时间 Unix()
  claims := make(jwt.MapClaims)
  claims["jti"] = reqModel.Name + reqModel.Pwd + strconv.Itoa(int(time.Now().Unix()))
  claims["iss"] = "itxj"
  claims["iat"] = time.Now()
  claims["aud"] = reqModel.Name
  claims["sub"] = reqModel.Name
  claims["nbf"] = time.Now().Unix()
  claims["exp"] = time.Now().Add(time.Hour * time.Duration(24)).Unix()
  //Payload载荷
  token.Claims = claims
  //密钥加密
  tokenStr, errBySignToken := token.SignedString([]byte(tokenApiSecret))
    //token 生成失败
  if errBySignToken != nil {
      c.JSON(http.StatusOK, gin.H{
          "code":    http.StatusUnauthorized,
          "message": "Error while signing the token!",
          "token":   "",
      })
      return
  }
  //success
  c.JSON(http.StatusOK, gin.H{
      "code":    http.StatusOK,
      "message": "Success!",
      "token":   tokenStr,
  })
  return
}