Skip to content

Commit aa50567

Browse files
Move is_jwt_token to oauth2_client
1 parent 3012375 commit aa50567

File tree

4 files changed

+65
-6
lines changed

4 files changed

+65
-6
lines changed

deps/oauth2_client/src/oauth2_client.erl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
merge_openid_configuration/2,
1616
merge_oauth_provider/2,
1717
extract_ssl_options_as_list/1,
18-
format_ssl_options/1, format_oauth_provider/1, format_oauth_provider_id/1
18+
format_ssl_options/1, format_oauth_provider/1, format_oauth_provider_id/1,
19+
is_jwt_token/1
1920
]).
2021

2122
-include("oauth2_client.hrl").
@@ -916,7 +917,13 @@ get_env(Par, Def) ->
916917
set_env(Par, Val) ->
917918
application:set_env(rabbitmq_auth_backend_oauth2, Par, Val).
918919

919-
920+
-spec is_jwt_token(binary() | map()) -> boolean().
921+
is_jwt_token(Token) when is_binary(Token) ->
922+
case binary:split(Token, <<".">>, [global]) of
923+
[_, _, _] -> true;
924+
_ -> false
925+
end;
926+
is_jwt_token(_Token) -> true.
920927

921928
-spec make_jwk(map()) -> {ok, #{binary() => binary()}} | {error, term()}.
922929

deps/oauth2_client/test/unit_SUITE.erl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ all() ->
3131
groups() ->
3232
[
3333
{sign_token, [], [
34-
can_sign_token
34+
can_sign_token,
35+
is_jwt_token,
36+
is_not_jwt_token
3537
]},
3638
{ssl_options, [], [
3739
no_ssl_options_triggers_verify_peer,
@@ -311,3 +313,13 @@ can_sign_token(_Config) ->
311313
{ok, Value } = oauth2_client:sign_token(#{"scopes" => "a b"}),
312314
ct:log("JWT : ~p", [Value]),
313315
ok.
316+
317+
is_jwt_token(Config) ->
318+
Jwk = ?UTIL_MOD:fixture_jwk(),
319+
AccessToken = maps:remove(<<"exp">>, ?UTIL_MOD:fixture_token()),
320+
ct:log("AccesToken ~p", [AccessToken]),
321+
{_, EncodedToken} = ?UTIL_MOD:sign_token_hs(AccessToken, Jwk),
322+
?assertEqual(true, oauth2_client:is_jwt_token(EncodedToken)).
323+
324+
is_not_jwt_token(_) ->
325+
?assertEqual(false, oauth2_client:is_jwt_token(<<"some opaque token">>)).

deps/rabbitmq_management/src/rabbit_mgmt_oauth_bootstrap.erl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ set_token_auth(AuthSettings, Req0) ->
3838
true ->
3939
case cowboy_req:parse_header(<<"authorization">>, Req0) of
4040
{bearer, Token} ->
41+
?LOG_DEBUG("set_token_auth bearer token ~p", [Token]),
42+
4143
case oauth2_client:is_jwt_token(Token) of
4244
true ->
4345
{
@@ -64,6 +66,7 @@ set_token_auth(AuthSettings, Req0) ->
6466
Cookies = cowboy_req:parse_cookies(Req0),
6567
case lists:keyfind(?OAUTH2_ACCESS_TOKEN_COOKIE_NAME, 1, Cookies) of
6668
{_, Token} ->
69+
?LOG_DEBUG("set_token_auth cookie token ~p", [Token]),
6770
{
6871
cowboy_req:set_resp_cookie(
6972
?OAUTH2_ACCESS_TOKEN_COOKIE_NAME, <<"">>, Req0, #{
@@ -86,6 +89,23 @@ set_token_auth(AuthSettings, Req0) ->
8689
}
8790
end.
8891

92+
map_opaque_to_jwt_token(OpaqueToken) ->
93+
case oauth2_client:introspect_token(Token) of
94+
{error, introspected_token_not_valid} ->
95+
?LOG_ERROR("Failed to introspect token due to ~p", [introspected_token_not_valid]),
96+
rabbit_mgmt_util:not_authorised("Introspected token is not active", ReqData, Context);
97+
{error, Reason} ->
98+
?LOG_ERROR("Failed to introspect token due to ~p", [Reason]),
99+
rabbit_mgmt_util:not_authorised(Reason, ReqData, Context);
100+
{ok, JwtPayload} ->
101+
case oauth2_client:sign_token(JwtPayload) of
102+
{ok, JWT} ->
103+
rabbit_mgmt_util:reply([{token, JWT}], ReqData, Context);
104+
{error, Reason} ->
105+
rabbit_mgmt_util:not_authorised(Reason, ReqData, Context)
106+
end
107+
end.
108+
89109
import_dependencies(Dependencies) ->
90110
["import {", string:join(Dependencies, ","), "} from './helper.js';"].
91111

deps/rabbitmq_management/test/rabbit_mgmt_wm_auth_SUITE.erl

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ 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,
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,
5858
idp_introspect_opaque_token
5959
]}
6060
]},
@@ -709,6 +709,16 @@ init_per_testcase(Testcase, Config) when Testcase =:= introspect_opaque_token_re
709709
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
710710
[rabbitmq_auth_backend_oauth2, introspection_client_secret, "some-secret"]),
711711
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"]),
712722

713723
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env,
714724
[rabbitmq_auth_backend_oauth2, key_config, [{cacertfile, CaCertFile}]]),
@@ -732,6 +742,16 @@ end_per_testcase(Testcase, Config) when Testcase =:= introspect_opaque_token_ret
732742
[rabbitmq_auth_backend_oauth2, introspection_client_id]),
733743
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
734744
[rabbitmq_auth_backend_oauth2, introspection_client_secret]),
745+
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
746+
[rabbitmq_management, oauth_enabled]),
747+
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
748+
[rabbitmq_auth_backend_oauth2, resource_server_id]),
749+
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
750+
[rabbitmq_management, oauth_client_id]),
751+
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
752+
[rabbitmq_management, oauth_client_secret]),
753+
ok = rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
754+
[rabbitmq_management, oauth_provider_url]),
735755
Config;
736756

737757
end_per_testcase(Testcase, Config) ->

0 commit comments

Comments
 (0)