Skip to content

Commit 77184c2

Browse files
Add test scenarios for oauth_bootstrap.js
1 parent b2fe105 commit 77184c2

File tree

2 files changed

+91
-38
lines changed

2 files changed

+91
-38
lines changed

deps/rabbitmq_management/src/rabbit_mgmt_oauth_bootstrap.erl

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ bootstrap_oauth(Req0, State) ->
2222
Dependencies = oauth_dependencies(),
2323
case set_token_auth(AuthSettings, Req0) of
2424
{error, Reason} ->
25-
rabbit_mgmt_util:not_authorised(Reason, ReqData, Context);
25+
rabbit_mgmt_util:not_authorised(Reason, Req0, State);
2626
{Req1, SetTokenAuth} ->
2727
JSContent = import_dependencies(Dependencies) ++
2828
set_oauth_settings(AuthSettings) ++
@@ -64,26 +64,27 @@ set_token_auth(AuthSettings, Req0) ->
6464
};
6565
false -> {
6666
Req0,
67-
[]
67+
undefined
6868
}
6969
end
7070
end;
7171
false -> {
7272
Req0,
73-
[]
73+
undefined
7474
}
7575
end,
7676
case TokenOrError of
7777
{error, _} = Error -> Error;
78-
{Req, Token} ->
79-
case oauth2_client:is_jwt_token(Token) of
78+
{Req, undefined} -> {Req, []};
79+
{Req, Tk} ->
80+
case oauth2_client:is_jwt_token(Tk) of
8081
true ->
8182
{
8283
Req0,
83-
["set_token_auth('", Token, "');"]
84+
["set_token_auth('", Tk, "');"]
8485
};
8586
false ->
86-
case map_opaque_to_jwt_token(Token) of
87+
case map_opaque_to_jwt_token(Tk) of
8788
{ok, Tk1} ->
8889
?LOG_DEBUG("Successfully introspected token : ~p", [Tk1]),
8990
{
@@ -98,12 +99,12 @@ set_token_auth(AuthSettings, Req0) ->
9899

99100

100101
map_opaque_to_jwt_token(OpaqueToken) ->
101-
case oauth2_client:introspect_token(Token) of
102+
case oauth2_client:introspect_token(OpaqueToken) of
102103
{error, introspected_token_not_valid} = Error -> Error;
103104
{ok, JwtPayload} ->
104105
case oauth2_client:sign_token(JwtPayload) of
105106
{ok, JWT} -> {ok, JWT};
106-
{error, Reason} -> Error
107+
{error, _} = Err1 -> Err1
107108
end
108109
end.
109110

deps/rabbitmq_management/test/rabbit_mgmt_wm_auth_SUITE.erl

Lines changed: 81 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,16 @@ groups() ->
5252
[
5353
{run_with_broker, [], [
5454
{verify_introspection_endpoint, [], [
55-
%introspect_opaque_token_returns_active_jwt_token,
56-
%introspect_opaque_token_returns_inactive_jwt_token,
57-
%introspect_opaque_token_returns_401_from_auth_server,
58-
oauth_bootstrap
55+
introspect_opaque_token_returns_active_jwt_token,
56+
introspect_opaque_token_returns_inactive_jwt_token,
57+
introspect_opaque_token_returns_401_from_auth_server,
58+
{verify_oauth_bootstrap_js, [], [
59+
oauth_bootstrap_with_jwt_token_in_header,
60+
oauth_bootstrap_with_jwt_token_in_cookie,
61+
oauth_bootstrap_with_opaque_token_in_cookie,
62+
oauth_bootstrap_cannot_introspect_opaque_token,
63+
oauth_bootstrap_without_any_token
64+
]}
5965
]}
6066
]},
6167
{verify_multi_resource_and_provider, [], [
@@ -560,6 +566,7 @@ init_per_group(verify_introspection_endpoint, Config) ->
560566
[ {authorization_server_url, AuthorizationServerURL},
561567
{authorization_server_ca_cert, filename:join([CertsDir, "testca", "cacert.pem"])} | Config];
562568

569+
563570
init_per_group(_, Config) ->
564571
Config.
565572

@@ -698,50 +705,63 @@ end_per_group(_, Config) ->
698705

699706
init_per_testcase(Testcase, Config) when Testcase =:= introspect_opaque_token_returns_active_jwt_token orelse
700707
Testcase =:= introspect_opaque_token_returns_inactive_jwt_token orelse
701-
Testcase =:= introspect_opaque_token_returns_401_from_auth_server orelse
702-
Testcase =:= oauth_bootstrap ->
708+
Testcase =:= introspect_opaque_token_returns_401_from_auth_server ->
709+
710+
setup_introspection_configuration(Config),
711+
rabbit_ct_helpers:testcase_started(Config, Testcase);
712+
713+
init_per_testcase(Testcase, Config) when Testcase =:= oauth_bootstrap_with_jwt_token_in_header orelse
714+
Testcase =:= oauth_bootstrap_with_jwt_token_in_cookie orelse
715+
Testcase =:= oauth_bootstrap_with_opaque_token_in_cookie orelse
716+
Testcase =:= oauth_bootstrap_cannot_introspect_opaque_token orelse
717+
Testcase =:= oauth_bootstrap_without_any_token ->
718+
rabbit_ct_helpers:testcase_started(
719+
setup_introspection_configuration(setup_oauth2_management_configuration(Config)), Testcase);
703720

721+
init_per_testcase(Testcase, Config) ->
722+
Config.
723+
724+
setup_introspection_configuration(Config) ->
704725
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
705726
[rabbitmq_auth_backend_oauth2, introspection_endpoint,
706727
?config(authorization_server_url, Config)]),
707728
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
708729
[rabbitmq_auth_backend_oauth2, introspection_client_id, "some-id"]),
709730
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
710731
[rabbitmq_auth_backend_oauth2, introspection_client_secret, "some-secret"]),
711-
CaCertFile = ?config(authorization_server_ca_cert, Config),
712-
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
713-
[rabbitmq_management, oauth_enabled, true]),
714-
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
715-
[rabbitmq_auth_backend_oauth2, resource_server_id, "rabbitmq"]),
716-
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
717-
[rabbitmq_management, oauth_client_id, "rabbit_user"]),
718-
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
719-
[rabbitmq_management, oauth_client_secret, "rabbit_secret"]),
720-
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
721-
[rabbitmq_management, oauth_provider_url, "http://localhost:8080/uaa"]),
732+
CaCertFile = ?config(authorization_server_ca_cert, Config),
722733

723734
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
724735
[rabbitmq_auth_backend_oauth2, key_config, [{cacertfile, CaCertFile}]]),
725736

726737
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
727738
[rabbitmq_auth_backend_oauth2, opaque_token_signing_key,
728739
[{id, <<"rabbit_key">>}, {type, hs256}, {key, <<"some-key">>}]]),
729-
730-
rabbit_ct_helpers:testcase_started(Config, Testcase);
731-
732-
init_per_testcase(Testcase, Config) ->
733740
Config.
734-
735-
end_per_testcase(Testcase, Config) when Testcase =:= introspect_opaque_token_returns_active_jwt_token orelse
736-
Testcase =:= introspect_opaque_token_returns_inactive_jwt_token orelse
737-
Testcase =:= introspect_opaque_token_returns_401_from_auth_server orelse
738-
Testcase =:= oauth_bootstrap ->
741+
742+
teardown_introspection_configuration(Config) ->
739743
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
740744
[rabbitmq_auth_backend_oauth2, introspection_endpoint]),
741745
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
742746
[rabbitmq_auth_backend_oauth2, introspection_client_id]),
743747
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
744748
[rabbitmq_auth_backend_oauth2, introspection_client_secret]),
749+
Config.
750+
751+
setup_oauth2_management_configuration(Config) ->
752+
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
753+
[rabbitmq_management, oauth_enabled, true]),
754+
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
755+
[rabbitmq_auth_backend_oauth2, resource_server_id, "rabbitmq"]),
756+
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
757+
[rabbitmq_management, oauth_client_id, "rabbit_user"]),
758+
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
759+
[rabbitmq_management, oauth_client_secret, "rabbit_secret"]),
760+
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
761+
[rabbitmq_management, oauth_provider_url, "http://localhost:8080/uaa"]),
762+
Config.
763+
764+
teardown_oauth2_management_configuration(Config) ->
745765
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
746766
[rabbitmq_management, oauth_enabled]),
747767
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
@@ -752,7 +772,19 @@ end_per_testcase(Testcase, Config) when Testcase =:= introspect_opaque_token_ret
752772
[rabbitmq_management, oauth_client_secret]),
753773
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
754774
[rabbitmq_management, oauth_provider_url]),
755-
Config;
775+
Config.
776+
777+
end_per_testcase(Testcase, Config) when Testcase =:= introspect_opaque_token_returns_active_jwt_token orelse
778+
Testcase =:= introspect_opaque_token_returns_inactive_jwt_token orelse
779+
Testcase =:= introspect_opaque_token_returns_401_from_auth_server ->
780+
teardown_introspection_configuration(Config);
781+
782+
end_per_testcase(Testcase, Config) when Testcase =:= oauth_bootstrap_with_jwt_token_in_header orelse
783+
Testcase =:= oauth_bootstrap_with_jwt_token_in_cookie orelse
784+
Testcase =:= oauth_bootstrap_with_opaque_token_in_cookie orelse
785+
Testcase =:= oauth_bootstrap_cannot_introspect_opaque_token orelse
786+
Testcase =:= oauth_bootstrap_without_any_token ->
787+
teardown_introspection_configuration(teardown_oauth2_management_configuration(Config));
756788

757789
end_per_testcase(Testcase, Config) ->
758790
Config.
@@ -777,7 +809,7 @@ finish_init(Group, Config) ->
777809
inets:start(),
778810
NodeConf = [{rmq_nodename_suffix, Group}],
779811
rabbit_ct_helpers:set_config(Config, NodeConf).
780-
812+
781813

782814
%% -------------------------------------------------------------------
783815
%% Test cases.
@@ -995,7 +1027,27 @@ introspect_opaque_token_returns_401_from_auth_server(Config) ->
9951027
{ok, {{_HTTP, 401, _}, _Headers, _ResBody}} = req(Config, 0, post, "/auth/introspect", [
9961028
{"authorization", "bearer 401"}], []).
9971029

998-
oauth_bootstrap(Config) ->
1030+
oauth_bootstrap_with_jwt_token_in_header(Config) ->
1031+
URI = rabbit_mgmt_test_util:uri_base_from(Config, 0, "") ++ "js/oidc-oauth/bootstrap.js",
1032+
Result = httpc:request(get, {URI, [{"Authorization", "bearer active"}]}, [], []),
1033+
ct:log("response idp: ~p ~p", [URI, Result]).
1034+
1035+
oauth_bootstrap_with_jwt_token_in_cookie(Config) ->
1036+
URI = rabbit_mgmt_test_util:uri_base_from(Config, 0, "") ++ "js/oidc-oauth/bootstrap.js",
1037+
Result = httpc:request(get, {URI, [{"Authorization", "bearer active"}]}, [], []),
1038+
ct:log("response idp: ~p ~p", [URI, Result]).
1039+
1040+
oauth_bootstrap_with_opaque_token_in_cookie(Config) ->
1041+
URI = rabbit_mgmt_test_util:uri_base_from(Config, 0, "") ++ "js/oidc-oauth/bootstrap.js",
1042+
Result = httpc:request(get, {URI, [{"Authorization", "bearer active"}]}, [], []),
1043+
ct:log("response idp: ~p ~p", [URI, Result]).
1044+
1045+
oauth_bootstrap_cannot_introspect_opaque_token(Config) ->
1046+
URI = rabbit_mgmt_test_util:uri_base_from(Config, 0, "") ++ "js/oidc-oauth/bootstrap.js",
1047+
Result = httpc:request(get, {URI, [{"Authorization", "bearer active"}]}, [], []),
1048+
ct:log("response idp: ~p ~p", [URI, Result]).
1049+
1050+
oauth_bootstrap_without_any_token(Config) ->
9991051
URI = rabbit_mgmt_test_util:uri_base_from(Config, 0, "") ++ "js/oidc-oauth/bootstrap.js",
10001052
Result = httpc:request(get, {URI, [{"Authorization", "bearer active"}]}, [], []),
10011053
ct:log("response idp: ~p ~p", [URI, Result]).

0 commit comments

Comments
 (0)