token.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package middleware
  2. import (
  3. "github.com/golang-jwt/jwt"
  4. "iot_manager_service/app/system/model"
  5. "iot_manager_service/config"
  6. "time"
  7. )
  8. const (
  9. Authorization = "Authorization"
  10. )
  11. var EmptyKeyFunc = func(t *jwt.Token) (interface{}, error) { return []byte(config.Instance().Server.TokenSign), nil }
  12. type JwtToken struct {
  13. jwt.StandardClaims
  14. TenantId string `json:"tenant_id"`
  15. UserId int64 `json:"user_id"`
  16. RoleId int64 `json:"role_id"`
  17. UserName string `json:"user_name"`
  18. NickName string `json:"nick_name"`
  19. Random string `json:"random"`
  20. }
  21. func GetAccessToken(userId, roleId int64, tenantId, userName string, random string) (string, error) {
  22. jwtToken := JwtToken{StandardClaims: jwt.StandardClaims{
  23. Audience: model.Audience,
  24. Issuer: model.Issuer,
  25. ExpiresAt: time.Now().Add(2 * time.Hour).Unix(),
  26. NotBefore: time.Now().Unix(),
  27. },
  28. UserId: userId,
  29. TenantId: tenantId,
  30. RoleId: roleId,
  31. UserName: userName,
  32. Random: random,
  33. }
  34. claims := jwt.NewWithClaims(jwt.SigningMethodHS512, jwtToken)
  35. return claims.SignedString([]byte(config.Instance().Server.TokenSign))
  36. }
  37. func parseAccessToken(authorization string) *JwtToken {
  38. token, err := jwt.ParseWithClaims(authorization, &JwtToken{}, EmptyKeyFunc)
  39. if err != nil {
  40. return nil
  41. }
  42. return token.Claims.(*JwtToken)
  43. }