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  }