validateToken.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package validatetoken
  2. import (
  3. "encoding/json"
  4. "github.com/cristalhq/jwt"
  5. "standard/token/avata/model"
  6. "time"
  7. )
  8. //
  9. func ValidateToken(tokenType model.TokenType, tokenInfo *model.OauthToken) bool {
  10. if tokenInfo.RTokenExpiredAt.Before(time.Now()) {
  11. return false
  12. }
  13. if tokenType == model.TokenTypeAccess && tokenInfo.ExpiredAt.Before(time.Now()) {
  14. return false
  15. }
  16. switch tokenType {
  17. case model.TokenTypeRefresh:
  18. if tokenInfo.RefreshToken != tokenInfo.Token {
  19. return false
  20. }
  21. default:
  22. if tokenInfo.Token != tokenInfo.Token {
  23. return false
  24. }
  25. }
  26. return true
  27. }
  28. //根据token获取id
  29. func ParseIdFromToken(tokenType model.TokenType, token string) (string, error) {
  30. var claim model.TokenClaim
  31. var key string
  32. switch tokenType {
  33. case model.TokenTypeRefresh:
  34. key = "REFRESH_TOKEN_KEY"
  35. default:
  36. key = "ACCESS_TOKEN_KEY"
  37. }
  38. err := verifyToken(key, token, &claim)
  39. if err != nil {
  40. return "", err
  41. }
  42. return claim.Id, nil
  43. }
  44. //验证token
  45. func verifyToken(key, token string, claim interface{}) error {
  46. verifier, err := jwt.NewVerifierHS(jwt.HS256, []byte(key))
  47. if err != nil {
  48. return err
  49. }
  50. // parse and verify a token
  51. newToken, err := jwt.Parse([]byte(token), verifier)
  52. if err != nil {
  53. return err
  54. }
  55. if err = json.Unmarshal(newToken.Claims(), claim); err != nil {
  56. return err
  57. }
  58. return nil
  59. }