github.com/iron-io/functions@v0.0.0-20180820112432-d59d7d1c40b2/common/jwt.go (about) 1 package common 2 3 import ( 4 "errors" 5 "net/http" 6 "time" 7 8 jwt "github.com/dgrijalva/jwt-go" 9 "github.com/dgrijalva/jwt-go/request" 10 ) 11 12 func AuthJwt(signingKey string, req *http.Request) error { 13 if signingKey == "" { 14 return nil 15 } 16 17 extractor := request.AuthorizationHeaderExtractor 18 tokenString, err := extractor.ExtractToken(req) 19 if err != nil { 20 return err 21 } 22 23 token, err := jwt.ParseWithClaims(tokenString, &jwt.StandardClaims{}, func(token *jwt.Token) (interface{}, error) { 24 return []byte(signingKey), nil 25 }) 26 27 if err != nil { 28 return err 29 } 30 31 if _, ok := token.Claims.(*jwt.StandardClaims); ok && token.Valid { 32 return nil 33 } 34 35 return errors.New("Invalid token") 36 37 } 38 39 func GetJwt(signingKey string, expiration int) (string, error) { 40 now := time.Now().Unix() 41 claims := &jwt.StandardClaims{ 42 ExpiresAt: time.Unix(now, 0).Add(time.Duration(expiration) * time.Second).Unix(), 43 IssuedAt: now, 44 NotBefore: time.Unix(now, 0).Add(time.Duration(-1) * time.Minute).Unix(), 45 } 46 token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) 47 ss, err := token.SignedString([]byte(signingKey)) 48 return ss, err 49 }