@@ -110,29 +110,45 @@ check_topic_access(#auth_user{impl = DecodedTokenFun},
110110 end ).
111111
112112update_state (AuthUser , NewToken ) ->
113- case resolve_resource_server (NewToken ) of
114- {error , _ } = Err0 -> Err0 ;
115- {ResourceServer , _ } = Tuple ->
116- case check_token (NewToken , Tuple ) of
117- % % avoid logging the token
118- {refused , {error , {invalid_token , error , _Err , _Stacktrace }}} ->
119- {refused , " Authentication using an OAuth 2/JWT token failed: provided token is invalid" };
120- {refused , Err } ->
121- {refused , rabbit_misc :format (" Authentication using an OAuth 2/JWT token failed: ~tp " , [Err ])};
122- {ok , DecodedToken } ->
123- CurToken = AuthUser # auth_user .impl ,
124- case ensure_same_username (
125- ResourceServer # resource_server .preferred_username_claims ,
126- CurToken (), DecodedToken ) of
127- ok ->
128- Tags = tags_from (DecodedToken ),
129- {ok , AuthUser # auth_user {tags = Tags ,
130- impl = fun () -> DecodedToken end }};
131- {error , mismatch_username_after_token_refresh } ->
132- {refused ,
133- " Not allowed to change username on refreshed token" }
134- end
113+ TokenResult = case oauth2_client :is_jwt_token (NewToken ) of
114+ true -> {ok , NewToken };
115+ false ->
116+ case oauth2_client :introspect_token (NewToken ) of
117+ {ok , Tk1 } ->
118+ ? LOG_DEBUG (" Successfully introspected token : ~p " , [Tk1 ]),
119+ {ok , Tk1 };
120+ {error , Err1 } ->
121+ ? LOG_ERROR (" Failed to introspected token due to ~p " , [Err1 ]),
122+ {error , Err1 }
135123 end
124+ end ,
125+ case TokenResult of
126+ {ok , Token } ->
127+ case resolve_resource_server (Token ) of
128+ {error , _ } = Err0 -> Err0 ;
129+ {ResourceServer , _ } = Tuple ->
130+ case check_token (Token , Tuple ) of
131+ % % avoid logging the token
132+ {refused , {error , {invalid_token , error , _Err , _Stacktrace }}} ->
133+ {refused , " Authentication using an OAuth 2/JWT token failed: provided token is invalid" };
134+ {refused , Err } ->
135+ {refused , rabbit_misc :format (" Authentication using an OAuth 2/JWT token failed: ~tp " , [Err ])};
136+ {ok , DecodedToken } ->
137+ CurToken = AuthUser # auth_user .impl ,
138+ case ensure_same_username (
139+ ResourceServer # resource_server .preferred_username_claims ,
140+ CurToken (), DecodedToken ) of
141+ ok ->
142+ Tags = tags_from (DecodedToken ),
143+ {ok , AuthUser # auth_user {tags = Tags ,
144+ impl = fun () -> DecodedToken end }};
145+ {error , mismatch_username_after_token_refresh } ->
146+ {refused ,
147+ " Not allowed to change username on refreshed token" }
148+ end
149+ end
150+ end ;
151+ {error , Error } -> {refused , " Unable to introspect token: ~p " , [Error ]}
136152 end .
137153
138154expiry_timestamp (# auth_user {impl = DecodedTokenFun }) ->
0 commit comments