Spring Security каждый раз возвращает один и тот же токен - PullRequest
0 голосов
/ 26 июня 2019

Мы используем Spring Security (сервер авторизации и ресурсов) в нашем проекте.

  1. клиент отправляет запрос токена (/ oauth / token) с параметрами oauth2.

  2. приложение Spring Security создает токен для пользователя иответьте клиенту с помощью access_token, refresh_token, пользовательского объекта пользователя (имя, организация, адрес электронной почты и т. д.) и полномочий (ролей).

  3. Клиент добавляет дополнительные роли (скажем, ROLE_CLIENT, ROLE_USER).

  4. Приложение Spring будет хранить вышеуказанные роли для данного пользователя.

  5. В следующий раз, когда клиент отправляет запрос токена, Spring Security возвращает ранеесозданный токен (еще не истек) вместе с информацией о пользователе и полномочиях.Эта информация о полномочиях не имеет последних ролей (добавленных в шаге 4).

Здесь Spring Security всегда использует существующий токен (так как он не просрочен) и возвращает действительный токен.Является ли это ожидаемым поведением, даже если объект пользователя изменяется?

1 Ответ

1 голос
/ 26 июня 2019

Похоже, вам нужно отозвать токен доступа при изменении ролей пользователей, если вы хотите, чтобы следующий запрос получил новый токен доступа с новыми ролями и не возвращал существующий токен с существующими ролями, если он все еще действителен.

В тот момент, когда вы обновляете роли пользователей, вы, вероятно, захотите отозвать токен. Я лично не проверял это, но нашел руководство для этого здесь https://www.baeldung.com/spring-security-oauth-revoke-tokens, поэтому ваш пробег может варьироваться.

Я хочу добавить, что это не похоже на обычный процесс OAuth2, и вы можете нарушить некоторые соглашения, которые могут вас укусить позже. Тем не менее, вам не нужно следовать стандарту, если вы уверены в предложенном решении.

Редактировать: для уточнения ролей пользователей и их доступа обычно является частью ресурса, а не частью обмена токенами. Например, у вас есть обычный запрос OAuth2, который генерирует токен, который вы можете обменять на токен доступа, как вы изложили в шагах 1 и 2. Затем вы обычно берете этот токен доступа и запрашиваете информацию о доступе пользователя у ресурса например, сервис "userinfo" или что-то подобное.

Ваша служба безопасности также может быть сервером ресурсов, но эти два шага должны рассматриваться как разные. Затем, когда вы хотите изменить роли пользователей, вы делаете это снова через ресурс. Это означает, что в следующий раз, когда вы будете вызывать ресурс, он будет иметь актуальную информацию без необходимости повторной аутентификации пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...