Похоже, вам нужно отозвать токен доступа при изменении ролей пользователей, если вы хотите, чтобы следующий запрос получил новый токен доступа с новыми ролями и не возвращал существующий токен с существующими ролями, если он все еще действителен.
В тот момент, когда вы обновляете роли пользователей, вы, вероятно, захотите отозвать токен.
Я лично не проверял это, но нашел руководство для этого здесь https://www.baeldung.com/spring-security-oauth-revoke-tokens, поэтому ваш пробег может варьироваться.
Я хочу добавить, что это не похоже на обычный процесс OAuth2, и вы можете нарушить некоторые соглашения, которые могут вас укусить позже. Тем не менее, вам не нужно следовать стандарту, если вы уверены в предложенном решении.
Редактировать: для уточнения ролей пользователей и их доступа обычно является частью ресурса, а не частью обмена токенами. Например, у вас есть обычный запрос OAuth2, который генерирует токен, который вы можете обменять на токен доступа, как вы изложили в шагах 1 и 2. Затем вы обычно берете этот токен доступа и запрашиваете информацию о доступе пользователя у ресурса например, сервис "userinfo" или что-то подобное.
Ваша служба безопасности также может быть сервером ресурсов, но эти два шага должны рассматриваться как разные. Затем, когда вы хотите изменить роли пользователей, вы делаете это снова через ресурс. Это означает, что в следующий раз, когда вы будете вызывать ресурс, он будет иметь актуальную информацию без необходимости повторной аутентификации пользователя.