@@ -52,7 +52,8 @@ groups() ->
52
52
53
53
{token_refresh , [], [
54
54
test_failed_token_refresh_case1 ,
55
- test_failed_token_refresh_case2
55
+ test_failed_token_refresh_case2 ,
56
+ refreshed_token_cannot_change_username
56
57
]},
57
58
58
59
{extra_scopes_source , [], [
@@ -323,21 +324,33 @@ preconfigure_node(Config) ->
323
324
324
325
rabbit_ct_helpers :set_config (Config , {fixture_jwk , Jwk }).
325
326
327
+ generate_valid_token_with_sub (Config , Sub ) ->
328
+ generate_valid_token (Config ,
329
+ ? UTIL_MOD :full_permission_scopes (), undefined , Sub ).
330
+
326
331
generate_valid_token (Config ) ->
327
332
generate_valid_token (Config , ? UTIL_MOD :full_permission_scopes ()).
328
333
329
334
generate_valid_token (Config , Scopes ) ->
330
- generate_valid_token (Config , Scopes , undefined ).
335
+ generate_valid_token (Config , Scopes , undefined , undefined ).
331
336
332
337
generate_valid_token (Config , Scopes , Audience ) ->
338
+ generate_valid_token (Config , Scopes , Audience , undefined ).
339
+
340
+ generate_valid_token (Config , Scopes , Audience , Sub ) ->
333
341
Jwk = case rabbit_ct_helpers :get_config (Config , fixture_jwk ) of
334
342
undefined -> ? UTIL_MOD :fixture_jwk ();
335
343
Value -> Value
336
344
end ,
337
- Token = case Audience of
345
+ Token0 = case Audience of
338
346
undefined -> ? UTIL_MOD :fixture_token_with_scopes (Scopes );
339
- DefinedAudience -> maps :put (<<" aud" >>, DefinedAudience , ? UTIL_MOD :fixture_token_with_scopes (Scopes ))
347
+ DefinedAudience -> maps :put (<<" aud" >>, DefinedAudience ,
348
+ ? UTIL_MOD :fixture_token_with_scopes (Scopes ))
340
349
end ,
350
+ Token = case Sub of
351
+ undefined -> Token0 ;
352
+ _ -> maps :put (<<" sub" >>, Sub , Token0 )
353
+ end ,
341
354
? UTIL_MOD :sign_token_hs (Token , Jwk ).
342
355
343
356
generate_valid_token_with_extra_fields (Config , ExtraFields ) ->
@@ -913,6 +926,21 @@ test_failed_token_refresh_case1(Config) ->
913
926
914
927
close_connection (Conn ).
915
928
929
+ refreshed_token_cannot_change_username (Config ) ->
930
+ {_ , Token } = generate_valid_token_with_sub (Config , <<" username" >>),
931
+ ct :log (" Token: ~p " , [Token ]),
932
+ Conn = open_unmanaged_connection (Config , 0 , <<" vhost4" >>, <<" username" >>, Token ),
933
+ {_ , RefreshedToken } = generate_valid_token_with_sub (Config , <<" username2" >>),
934
+ ct :log (" RefreshedToken: ~p " , [RefreshedToken ]),
935
+
936
+ % % the error is communicated asynchronously via a connection-level error
937
+ Ret = amqp_connection :update_secret (Conn , RefreshedToken , <<" token refresh" >>),
938
+ ct :log (" Ret: ~p " , [Ret ]),
939
+ ? assertExit ({{shutdown , {server_initiated_close , 530 ,
940
+ <<" NOT_ALLOWED - New secret was refused by one of the backends" >>}}, _ },
941
+ close_connection (Conn )).
942
+
943
+
916
944
test_failed_token_refresh_case2 (Config ) ->
917
945
{_Algo , Token } = generate_valid_token (Config , [<<" rabbitmq.configure:vhost4/*" >>,
918
946
<<" rabbitmq.write:vhost4/*" >>,
0 commit comments