Безопасная конечная точка с идентификатором весной - PullRequest
1 голос
/ 20 сентября 2019

У меня вопрос по поводу весенней безопасности.Допустим, у меня есть конечная точка, подобная этой

 /orders/order/{userId}

Как избежать ситуации, когда у меня есть несколько зарегистрированных пользователей, и кто-то может напечатать userId другого зарегистрированного пользователя.Например,

Пользователь_1 имеет id = 1,

Пользователь_2 имеет id = 2

, и теперь Пользователь_2 может просто поместитьid пользователя_1 и получить его заказы или удалить его.Должен ли я просто проверять для каждого запроса, равен ли идентификатор URL-адреса текущему зарегистрированному пользователю или есть более эффективные способы сделать это с помощью Spring Security?Тот же сценарий будет, когда я использую имя пользователя в шаблоне URL вместо идентификатора пользователя, например

 /orders/order/{username}

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Когда пользователь входит в систему, используя свои учетные данные, мы обычно генерируем для него уникальный токен и отправляем его клиенту.Затем клиент отправляет этот токен для дальнейших запросов на проверку пользователя на стороне сервера.Вы можете создать и использовать класс Utils для генерации токена и проверки пользователя.Когда пользователь делает запрос на /orders/order/{userId}, извлеките userId и сопоставьте его с userId из токена.Если он действителен, выполните необходимые действия или дайте ответ 401/403 (здесь я использую пример токена JWT)

public String getUsernameFromToken(String token) {
     return getClaimFromToken(token, Claims::getSubject);
} 

 public String generateToken(User user) {
     return doGenerateToken(user.getEmail() , user.getRole());
 }
0 голосов
/ 20 сентября 2019

Есть ли у вас какая-либо аутентификация?После входа пользователя в систему вы можете обработать его / ее идентификатор токеном (например, JWT) и сопоставить идентификатор в URL-адресе с идентификатором, закодированным в вашем токене, хотя в этот момент идентификатор в URL-адресе становится бесполезным.

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