github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/crypto/claim/jwt.go (about) 1 package claim 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/dgrijalva/jwt-go" 8 ) 9 10 // JWT is both signer and verifier 11 type JWT struct { 12 expire time.Duration 13 method jwt.SigningMethod 14 secret []byte 15 } 16 17 // NewJWT is ctor for JWT 18 func NewJWT(expire time.Duration, secret []byte) (j *JWT, err error) { 19 signingAlgorithm := "HS256" 20 method := jwt.GetSigningMethod(signingAlgorithm) 21 if method == nil { 22 err = fmt.Errorf("invalid signingAlgorithm:%s", method) 23 return 24 } 25 j = &JWT{expire: expire, method: method, secret: secret} 26 return 27 } 28 29 // Sign claims 30 func (j *JWT) Sign(values map[string]interface{}) (tokenString string, err error) { 31 32 tokenString, err = sign(values, j.expire, j.method, j.secret) 33 34 return 35 } 36 37 // Verify claims 38 func (j *JWT) Verify(tokenString string) (ok bool, values map[string]interface{}) { 39 ok, values = verify(tokenString, j.method, j.secret) 40 return 41 }