Skip to content

Commit f7ad7cb

Browse files
Test cannot change username during token refresh
1 parent f6ba623 commit f7ad7cb

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ update_state(AuthUser, NewToken) ->
121121
impl = fun() -> DecodedToken end}};
122122
{error, mismatch_username_after_token_refresh} ->
123123
{refused,
124-
rabbit_misc:format("Not allowed to change username on refreshed token")};
124+
"Not allowed to change username on refreshed token"};
125125
{error, Error} ->
126126
{refused,
127127
rabbit_misc:format("Failed to refresh token due to ~p", [Error])}

deps/rabbitmq_auth_backend_oauth2/test/system_SUITE.erl

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ groups() ->
5252

5353
{token_refresh, [], [
5454
test_failed_token_refresh_case1,
55-
test_failed_token_refresh_case2
55+
test_failed_token_refresh_case2,
56+
refreshed_token_cannot_change_username
5657
]},
5758

5859
{extra_scopes_source, [], [
@@ -323,21 +324,33 @@ preconfigure_node(Config) ->
323324

324325
rabbit_ct_helpers:set_config(Config, {fixture_jwk, Jwk}).
325326

327+
generate_valid_token_with_sub(Config, Sub) ->
328+
generate_valid_token(Config,
329+
?UTIL_MOD:full_permission_scopes(), undefined, Sub).
330+
326331
generate_valid_token(Config) ->
327332
generate_valid_token(Config, ?UTIL_MOD:full_permission_scopes()).
328333

329334
generate_valid_token(Config, Scopes) ->
330-
generate_valid_token(Config, Scopes, undefined).
335+
generate_valid_token(Config, Scopes, undefined, undefined).
331336

332337
generate_valid_token(Config, Scopes, Audience) ->
338+
generate_valid_token(Config, Scopes, Audience, undefined).
339+
340+
generate_valid_token(Config, Scopes, Audience, Sub) ->
333341
Jwk = case rabbit_ct_helpers:get_config(Config, fixture_jwk) of
334342
undefined -> ?UTIL_MOD:fixture_jwk();
335343
Value -> Value
336344
end,
337-
Token = case Audience of
345+
Token0 = case Audience of
338346
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))
340349
end,
350+
Token = case Sub of
351+
undefined -> Token0;
352+
_ -> maps:put(<<"sub">>, Sub, Token0)
353+
end,
341354
?UTIL_MOD:sign_token_hs(Token, Jwk).
342355

343356
generate_valid_token_with_extra_fields(Config, ExtraFields) ->
@@ -913,6 +926,21 @@ test_failed_token_refresh_case1(Config) ->
913926

914927
close_connection(Conn).
915928

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+
916944
test_failed_token_refresh_case2(Config) ->
917945
{_Algo, Token} = generate_valid_token(Config, [<<"rabbitmq.configure:vhost4/*">>,
918946
<<"rabbitmq.write:vhost4/*">>,

0 commit comments

Comments
 (0)