@@ -160,17 +160,24 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
160160 }
161161
162162 // Initialize
163- parts := strings .Split (config .TokenLookup , ":" )
164- extractor := jwtFromHeader (parts [1 ], config .AuthScheme )
165- switch parts [0 ] {
166- case "query" :
167- extractor = jwtFromQuery (parts [1 ])
168- case "param" :
169- extractor = jwtFromParam (parts [1 ])
170- case "cookie" :
171- extractor = jwtFromCookie (parts [1 ])
172- case "form" :
173- extractor = jwtFromForm (parts [1 ])
163+ // Split sources
164+ sources := strings .Split (config .TokenLookup , "," )
165+ var extractors []jwtExtractor
166+ for _ , source := range sources {
167+ parts := strings .Split (source , ":" )
168+
169+ switch parts [0 ] {
170+ case "query" :
171+ extractors = append (extractors , jwtFromQuery (parts [1 ]))
172+ case "param" :
173+ extractors = append (extractors , jwtFromParam (parts [1 ]))
174+ case "cookie" :
175+ extractors = append (extractors , jwtFromCookie (parts [1 ]))
176+ case "form" :
177+ extractors = append (extractors , jwtFromForm (parts [1 ]))
178+ case "header" :
179+ extractors = append (extractors , jwtFromHeader (parts [1 ], config .AuthScheme ))
180+ }
174181 }
175182
176183 return func (next echo.HandlerFunc ) echo.HandlerFunc {
@@ -182,8 +189,17 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
182189 if config .BeforeFunc != nil {
183190 config .BeforeFunc (c )
184191 }
185-
186- auth , err := extractor (c )
192+ var auth string
193+ var err error
194+ for _ , extractor := range extractors {
195+ // Extract token from extractor, if it's not fail break the loop and
196+ // set auth
197+ auth , err = extractor (c )
198+ if err == nil {
199+ break
200+ }
201+ }
202+ // If none of extractor has a token, handle error
187203 if err != nil {
188204 if config .ErrorHandler != nil {
189205 return config .ErrorHandler (err )
@@ -194,6 +210,7 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
194210 }
195211 return err
196212 }
213+
197214 token := new (jwt.Token )
198215 // Issue #647, #656
199216 if _ , ok := config .Claims .(jwt.MapClaims ); ok {
0 commit comments