Да.Это возможно.
Идея состоит в том, что вы можете зарегистрировать множество AuthenticationProvider
, где каждый AuthenticationProvider
отвечает за определенный тип механизма аутентификации (т. Е. Один для JWT, один для Azure AD в ваших случаях).
После этого Spring Security последовательно перебирает эти AuthenticationProvider
, чтобы проверить, кто из них может успешно аутентифицировать запрос.Он прекратит зацикливание, как только обнаружит, что AuthenticationProvider
может успешно аутентифицироваться.
Это означает, что в каждом из ваших AuthenticationProvider
вы можете получить информацию о роли для текущего запрошенного пользователя, а затем проверить, есть ли у него требуемыероли для этого механизма аутентификации.Просто бросьте AuthenticationException
, если у него нет необходимых ролей.