Проверка пользователя на сервере ресурсов Spring Security - PullRequest
2 голосов
/ 15 февраля 2020

У меня есть сервер авторизации и сервер ресурсов, реализованный с использованием весенней загрузки с oauth2. На сервере ресурсов я настроил конечную точку check_token и соответствующую информацию для проверки запросов от сервера авторизации.

security:
  oauth2:
    resource:
      token-info-uri: http://localhost:9191/auth-service/oauth/check_token
    client:
      client-id: mobile
      client-secret: secret

Так что теперь, когда приходит запрос с токеном-носителем, он позволяет получить доступ к серверу ресурсов. Но если токен украден и попытаться обновить запись другого пользователя, это все еще возможно, поскольку у него / нее есть действительный токен. Чтобы уменьшить этот риск, я хотел добавить фильтр на сервере ресурсов и проверить с уникальным идентификатором, который поставляется вместе с заголовком запроса, против поля идентификатора, которое я добавил в токен при создании токена. Но объект аутентификации возвращает только имя пользователя владельца токена.

final OAuth2Authentication authentication = (OAuth2Authentication) SecurityContextHolder
            .getContext().getAuthentication();

// this principal object returns the user name.
Object principal = authentication.getUserAuthentication().getPrincipal();

Я хочу, чтобы этот основной объект или другое свойство отправили мне идентификатор пользователя, который я установил для токена. Это мой ответ check_token, как вы видите, в ответе есть поле ИД пользователя.

{
  "aud": [
    "oauth2-resource"
  ],
  "data": {
    "userId": "uid-0c51148d-162a-4fa4-95c5-asd3434",
  },
  "user_name": "test",
  "scope": [
    "READ",
    "WRITE",
    "UPDATE"
  ],
  "active": true,
  "client_id": "mobile",
}

Пожалуйста, помогите мне разобраться с этим.

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