func JWT(key interface{}) echo.MiddlewareFunc {
	c := DefaultJWTConfig
	c.SigningKey = key
	return JWTWithConfig(c)
}
JWT returns a JSON Web Token (JWT) auth middleware.

For valid token, it sets the user in context and calls next handler.
For invalid token, it returns "401 - Unauthorized" error.
For missing token, it returns "400 - Bad Request" error.

See: https://jwt.io/introduction
See `JWTConfig.TokenLookup`
package middleware
import (
	"fmt"
	"net/http"
	"reflect"
	"strings"
	"github.com/dgrijalva/jwt-go"
	"github.com/labstack/echo"
)
type (
	JWTConfig struct {
		Skipper Skipper
		SigningKey interface{}
		SigningMethod string
		ContextKey string
		Claims jwt.Claims
		TokenLookup string
		AuthScheme string
		keyFunc jwt.Keyfunc
	}
	jwtExtractor func(echo.Context) (string, error)
)
const (
	AlgorithmHS256 = "HS256"
)
var (
	ErrJWTMissing = echo.NewHTTPError(http.StatusBadRequest, "missing or malformed jwt")
	ErrJWTInvalid = echo.NewHTTPError(http.StatusUnauthorized, "invalid or expired jwt")
)
var (
	DefaultJWTConfig = JWTConfig{
		Skipper:       DefaultSkipper,
		SigningMethod: AlgorithmHS256,
		ContextKey:    "user",
		TokenLookup:   "header:" + echo.HeaderAuthorization,
		AuthScheme:    "Bearer",
		Claims:        jwt.MapClaims{},
	}
)