Skip to content

Commit 8ce0bb1

Browse files
Resolve conflicts
1 parent 3d8629b commit 8ce0bb1

File tree

2 files changed

+33
-65
lines changed

2 files changed

+33
-65
lines changed

deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl

Lines changed: 31 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020

2121
% for testing
2222
-export([post_process_payload/2, get_expanded_scopes/2]).
23-
23+
-import(uaa_jwt, [resolve_resource_server_id/1]).
2424
-import(rabbit_data_coercion, [to_map/1]).
25+
-import(rabbit_oauth2_config, [get_preferred_username_claims/1]).
2526

2627
-ifdef(TEST).
2728
-compile(export_all).
@@ -98,46 +99,28 @@ check_topic_access(#auth_user{impl = DecodedTokenFun},
9899
end).
99100

100101
update_state(AuthUser, NewToken) ->
101-
<<<<<<< HEAD
102-
case check_token(NewToken) of
103-
%% avoid logging the token
104-
{error, _} = E -> E;
105-
{refused, {error, {invalid_token, error, _Err, _Stacktrace}}} ->
106-
{refused, "Authentication using an OAuth 2/JWT token failed: provided token is invalid"};
107-
{refused, Err} ->
108-
{refused, rabbit_misc:format("Authentication using an OAuth 2/JWT token failed: ~tp", [Err])};
109-
{ok, DecodedToken} ->
110-
Tags = tags_from(DecodedToken),
111-
112-
{ok, AuthUser#auth_user{tags = Tags,
113-
impl = fun() -> DecodedToken end}}
114-
end.
115-
=======
116-
case resolve_resource_server(NewToken) of
117-
{error, _} = Err0 -> Err0;
118-
{ResourceServer, _} = Tuple ->
119-
case check_token(NewToken, Tuple) of
120-
%% avoid logging the token
121-
{refused, {error, {invalid_token, error, _Err, _Stacktrace}}} ->
122-
{refused, "Authentication using an OAuth 2/JWT token failed: provided token is invalid"};
123-
{refused, Err} ->
124-
{refused, rabbit_misc:format("Authentication using an OAuth 2/JWT token failed: ~tp", [Err])};
125-
{ok, DecodedToken} ->
126-
CurToken = AuthUser#auth_user.impl,
127-
case ensure_same_username(
128-
ResourceServer#resource_server.preferred_username_claims,
129-
CurToken(), DecodedToken) of
130-
ok ->
131-
Tags = tags_from(DecodedToken),
132-
{ok, AuthUser#auth_user{tags = Tags,
133-
impl = fun() -> DecodedToken end}};
134-
{error, mismatch_username_after_token_refresh} ->
135-
{refused,
136-
"Not allowed to change username on refreshed token"}
137-
end
102+
case check_token(NewToken) of
103+
%% avoid logging the token
104+
{error, _} = E -> E;
105+
{refused, {error, {invalid_token, error, _Err, _Stacktrace}}} ->
106+
{refused, "Authentication using an OAuth 2/JWT token failed: provided token is invalid"};
107+
{refused, Err} ->
108+
{refused, rabbit_misc:format("Authentication using an OAuth 2/JWT token failed: ~tp", [Err])};
109+
{ok, DecodedToken} ->
110+
ResourceServerId = resolve_resource_server_id(DecodedToken),
111+
CurToken = AuthUser#auth_user.impl,
112+
case ensure_same_username(
113+
get_preferred_username_claims(ResourceServerId),
114+
CurToken(), DecodedToken) of
115+
ok ->
116+
Tags = tags_from(DecodedToken),
117+
{ok, AuthUser#auth_user{tags = Tags,
118+
impl = fun() -> DecodedToken end}};
119+
{error, mismatch_username_after_token_refresh} ->
120+
{refused,
121+
"Not allowed to change username on refreshed token"}
138122
end
139123
end.
140-
>>>>>>> 3718fe3289 (Prevent change of username on token refresh)
141124

142125
expiry_timestamp(#auth_user{impl = DecodedTokenFun}) ->
143126
case DecodedTokenFun() of
@@ -162,37 +145,20 @@ authenticate(_, AuthProps0) ->
162145
{refused, "Authentication using an OAuth 2/JWT token failed: ~tp", [Err]};
163146
{ok, DecodedToken} ->
164147
Func = fun(Token0) ->
165-
Username = username_from(rabbit_oauth2_config:get_preferred_username_claims(), Token0),
166-
Tags = tags_from(Token0),
167-
168-
{ok, #auth_user{username = Username,
169-
tags = Tags,
170-
impl = fun() -> Token0 end}}
171-
end,
148+
ResourceServerId = resolve_resource_server_id(Token0),
149+
Username = username_from(
150+
get_preferred_username_claims(ResourceServerId),
151+
Token0),
152+
Tags = tags_from(Token0),
153+
{ok, #auth_user{username = Username,
154+
tags = Tags,
155+
impl = fun() -> Token0 end}}
156+
end,
172157
case with_decoded_token(DecodedToken, Func) of
173158
{error, Err} ->
174159
{refused, "Authentication using an OAuth 2/JWT token failed: ~tp", [Err]};
175-
<<<<<<< HEAD
176160
Else ->
177161
Else
178-
=======
179-
{ok, DecodedToken} ->
180-
Func = fun(Token0) ->
181-
Username = username_from(
182-
ResourceServer#resource_server.preferred_username_claims,
183-
Token0),
184-
Tags = tags_from(Token0),
185-
{ok, #auth_user{username = Username,
186-
tags = Tags,
187-
impl = fun() -> Token0 end}}
188-
end,
189-
case with_decoded_token(DecodedToken, Func) of
190-
{error, Err} ->
191-
{refused, "Authentication using an OAuth 2/JWT token failed: ~tp", [Err]};
192-
Else ->
193-
Else
194-
end
195-
>>>>>>> 3718fe3289 (Prevent change of username on token refresh)
196162
end
197163
end.
198164

deps/rabbitmq_auth_backend_oauth2/src/uaa_jwt.erl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
-export([add_signing_key/3,
1010
decode_and_verify/1,
1111
get_jwk/2,
12+
resolve_resource_server_id/1,
1213
verify_signing_key/2]).
1314

1415
-export([client_id/1, sub/1, client_id/2, sub/2]).
@@ -79,6 +80,7 @@ decode_and_verify(Token) ->
7980
end
8081
end.
8182

83+
-spec resolve_resource_server_id(binary()) -> binary() | {error, term()}.
8284
resolve_resource_server_id(Token) ->
8385
case uaa_jwt_jwt:get_aud(Token) of
8486
{error, _} = Error ->

0 commit comments

Comments
 (0)