1
1
use chrono:: { DateTime , Utc } ;
2
2
3
3
use crate :: {
4
- auth:: { authenticated:: LegacyAuth , AuthError , Authenticated , Authorized , Permission } ,
4
+ auth:: {
5
+ authenticated:: LegacyAuth ,
6
+ constants:: { AUTH_HEADER , GRPC_AUTH_HEADER } ,
7
+ AuthError , Authenticated , Authorized , Permission ,
8
+ } ,
5
9
namespace:: NamespaceName ,
6
10
} ;
7
11
@@ -12,28 +16,27 @@ pub struct Jwt {
12
16
}
13
17
14
18
impl UserAuthStrategy for Jwt {
15
- fn authenticate (
16
- & self ,
17
- context : Result < UserAuthContext , AuthError > ,
18
- ) -> Result < Authenticated , AuthError > {
19
+ fn authenticate ( & self , ctx : UserAuthContext ) -> Result < Authenticated , AuthError > {
19
20
tracing:: trace!( "executing jwt auth" ) ;
21
+ let auth_str = ctx
22
+ . get_field ( AUTH_HEADER )
23
+ . or_else ( || ctx. get_field ( GRPC_AUTH_HEADER ) )
24
+ . ok_or_else ( || AuthError :: AuthHeaderNotFound ) ?;
20
25
21
- let ctx = context?;
22
-
23
- let UserAuthContext {
24
- scheme : Some ( scheme) ,
25
- token : Some ( token) ,
26
- } = ctx
27
- else {
28
- return Err ( AuthError :: HttpAuthHeaderInvalid ) ;
29
- } ;
26
+ let ( scheme, token) = auth_str
27
+ . split_once ( ' ' )
28
+ . ok_or ( AuthError :: AuthStringMalformed ) ?;
30
29
31
30
if !scheme. eq_ignore_ascii_case ( "bearer" ) {
32
31
return Err ( AuthError :: HttpAuthHeaderUnsupportedScheme ) ;
33
32
}
34
33
35
34
validate_any_jwt ( & self . keys , & token)
36
35
}
36
+
37
+ fn required_fields ( & self ) -> Vec < & ' static str > {
38
+ vec ! [ AUTH_HEADER , GRPC_AUTH_HEADER ]
39
+ }
37
40
}
38
41
39
42
impl Jwt {
@@ -190,7 +193,7 @@ mod tests {
190
193
} ;
191
194
let token = encode ( & token, & enc) ;
192
195
193
- let context = Ok ( UserAuthContext :: bearer ( token. as_str ( ) ) ) ;
196
+ let context = UserAuthContext :: bearer ( token. as_str ( ) ) ;
194
197
195
198
assert ! ( matches!(
196
199
strategy( dec) . authenticate( context) . unwrap( ) ,
@@ -212,7 +215,7 @@ mod tests {
212
215
} ;
213
216
let token = encode ( & token, & enc) ;
214
217
215
- let context = Ok ( UserAuthContext :: bearer ( token. as_str ( ) ) ) ;
218
+ let context = UserAuthContext :: bearer ( token. as_str ( ) ) ;
216
219
217
220
let Authenticated :: Legacy ( a) = strategy ( dec) . authenticate ( context) . unwrap ( ) else {
218
221
panic ! ( )
@@ -225,7 +228,7 @@ mod tests {
225
228
#[ test]
226
229
fn errors_when_jwt_token_invalid ( ) {
227
230
let ( _enc, dec) = generate_key_pair ( ) ;
228
- let context = Ok ( UserAuthContext :: bearer ( "abc" ) ) ;
231
+ let context = UserAuthContext :: bearer ( "abc" ) ;
229
232
230
233
assert_eq ! (
231
234
strategy( dec) . authenticate( context) . unwrap_err( ) ,
@@ -245,7 +248,7 @@ mod tests {
245
248
246
249
let token = encode ( & token, & enc) ;
247
250
248
- let context = Ok ( UserAuthContext :: bearer ( token. as_str ( ) ) ) ;
251
+ let context = UserAuthContext :: bearer ( token. as_str ( ) ) ;
249
252
250
253
assert_eq ! (
251
254
strategy( dec) . authenticate( context) . unwrap_err( ) ,
@@ -267,7 +270,7 @@ mod tests {
267
270
268
271
let token = encode ( & token, & enc) ;
269
272
270
- let context = Ok ( UserAuthContext :: bearer ( token. as_str ( ) ) ) ;
273
+ let context = UserAuthContext :: bearer ( token. as_str ( ) ) ;
271
274
272
275
let Authenticated :: Authorized ( a) = strategy ( dec) . authenticate ( context) . unwrap ( ) else {
273
276
panic ! ( )
@@ -304,7 +307,7 @@ mod tests {
304
307
for enc in multi_enc. iter ( ) {
305
308
let token = encode ( & token, & enc) ;
306
309
307
- let context = Ok ( UserAuthContext :: bearer ( token. as_str ( ) ) ) ;
310
+ let context = UserAuthContext :: bearer ( token. as_str ( ) ) ;
308
311
309
312
let Authenticated :: Authorized ( a) = strategy. authenticate ( context) . unwrap ( ) else {
310
313
panic ! ( )
@@ -331,7 +334,7 @@ mod tests {
331
334
} ) ;
332
335
let token = encode ( & token, & enc) ;
333
336
334
- let context = Ok ( UserAuthContext :: bearer ( token. as_str ( ) ) ) ;
337
+ let context = UserAuthContext :: bearer ( token. as_str ( ) ) ;
335
338
336
339
assert_eq ! (
337
340
strategy_with_multiple( multi_dec)
@@ -352,7 +355,7 @@ mod tests {
352
355
} ;
353
356
let token = encode ( & token, & multi_enc[ 0 ] ) ;
354
357
355
- let context = Ok ( UserAuthContext :: bearer ( token. as_str ( ) ) ) ;
358
+ let context = UserAuthContext :: bearer ( token. as_str ( ) ) ;
356
359
357
360
assert_eq ! (
358
361
strategy_with_multiple( multi_dec)
@@ -373,7 +376,7 @@ mod tests {
373
376
} ;
374
377
let token = encode ( & token, & multi_enc[ 2 ] ) ;
375
378
376
- let context = Ok ( UserAuthContext :: bearer ( token. as_str ( ) ) ) ;
379
+ let context = UserAuthContext :: bearer ( token. as_str ( ) ) ;
377
380
378
381
assert_eq ! (
379
382
strategy_with_multiple( multi_dec)
0 commit comments