@@ -160,17 +160,24 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
160
160
}
161
161
162
162
// 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
+ }
174
181
}
175
182
176
183
return func (next echo.HandlerFunc ) echo.HandlerFunc {
@@ -182,8 +189,17 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
182
189
if config .BeforeFunc != nil {
183
190
config .BeforeFunc (c )
184
191
}
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
187
203
if err != nil {
188
204
if config .ErrorHandler != nil {
189
205
return config .ErrorHandler (err )
@@ -194,6 +210,7 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
194
210
}
195
211
return err
196
212
}
213
+
197
214
token := new (jwt.Token )
198
215
// Issue #647, #656
199
216
if _ , ok := config .Claims .(jwt.MapClaims ); ok {
0 commit comments