@@ -51,7 +51,7 @@ impl JwtAuthRuntime {
5151 Ok ( instance)
5252 }
5353
54- fn lookup ( & self , req : & HttpRequest ) -> Result < String , LookupError > {
54+ fn lookup ( & self , req : & HttpRequest ) -> Result < ( Option < String > , String ) , LookupError > {
5555 for lookup_config in & self . config . lookup_locations {
5656 match lookup_config {
5757 JwtAuthPluginLookupLocation :: Header { name, prefix } => {
@@ -73,14 +73,17 @@ impl JwtAuthRuntime {
7373 . and_then ( |s| s. strip_prefix ( prefix) )
7474 {
7575 Some ( stripped_value) => {
76- return Ok ( stripped_value. trim ( ) . to_string ( ) ) ;
76+ return Ok ( (
77+ Some ( prefix. to_string ( ) ) ,
78+ stripped_value. trim ( ) . to_string ( ) ,
79+ ) ) ;
7780 }
7881 None => {
7982 return Err ( LookupError :: MismatchedPrefix ) ;
8083 }
8184 } ,
8285 None => {
83- return Ok ( header_value. to_str ( ) . unwrap_or ( "" ) . to_string ( ) ) ;
86+ return Ok ( ( None , header_value. to_str ( ) . unwrap_or ( "" ) . to_string ( ) ) ) ;
8487 }
8588 }
8689 }
@@ -101,7 +104,7 @@ impl JwtAuthRuntime {
101104 let ( cookie_name, cookie_value) = v. name_value_trimmed ( ) ;
102105
103106 if cookie_name == name {
104- return Ok ( cookie_value. to_string ( ) ) ;
107+ return Ok ( ( None , cookie_value. to_string ( ) ) ) ;
105108 }
106109 }
107110 Err ( e) => {
@@ -158,15 +161,15 @@ impl JwtAuthRuntime {
158161 & self ,
159162 jwks : & Vec < Arc < JwkSet > > ,
160163 req : & HttpRequest ,
161- ) -> Result < ( JwtTokenPayload , String ) , JwtError > {
164+ ) -> Result < ( JwtTokenPayload , Option < String > , String ) , JwtError > {
162165 match self . lookup ( req) {
163- Ok ( token) => {
166+ Ok ( ( maybe_prefix , token) ) => {
164167 // First, we need to decode the header to determine which provider to use.
165168 let header = decode_header ( & token) . map_err ( JwtError :: InvalidJwtHeader ) ?;
166169 let jwk = self . find_matching_jwks ( & header, jwks) ?;
167170
168171 self . decode_and_validate_token ( & token, & jwk. keys )
169- . map ( |token_data| ( token_data, token) )
172+ . map ( |token_data| ( token_data, maybe_prefix , token) )
170173 }
171174 Err ( e) => {
172175 warn ! ( "jwt plugin failed to lookup token. error: {}" , e) ;
@@ -266,25 +269,15 @@ impl JwtAuthRuntime {
266269 let valid_jwks = self . jwks . all ( ) ;
267270
268271 match self . authenticate ( & valid_jwks, request) {
269- Ok ( ( token_data, _token) ) => {
270- let mut jwt_ctx = JwtRequestContext {
271- token_payload : None ,
272- } ;
273-
274- if self . config . forward_claims_to_upstream_extensions . enabled {
275- jwt_ctx. token_payload = Some ( (
276- self . config
277- . forward_claims_to_upstream_extensions
278- . field_name
279- . clone ( ) ,
280- token_data,
281- ) ) ;
282- }
283-
284- request. extensions_mut ( ) . insert ( jwt_ctx) ;
272+ Ok ( ( token_payload, maybe_token_prefix, token) ) => {
273+ request. extensions_mut ( ) . insert ( JwtRequestContext {
274+ token_payload,
275+ token_raw : token,
276+ token_prefix : maybe_token_prefix,
277+ } ) ;
285278 }
286279 Err ( e) => {
287- warn ! ( "jwt token error: {}" , e) ;
280+ warn ! ( "jwt token error: {:? }" , e) ;
288281
289282 if self . config . require_authentication . is_some_and ( |v| v) {
290283 return Err ( e) ;
0 commit comments