Как мне запретить пользователю получать доступ / обновлять данные другого пользователя? - PullRequest
0 голосов
/ 23 марта 2019

У меня есть конечная точка http /update-user-details, которая аутентифицируется токеном JWT.

В моей системе есть два действительных пользователя Пользователь1 и Пользователь2 .

Как запретить Пользователю1 обновлять данные Пользователя2 с помощью конечной точки /update-user-details?

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

У вас есть 3 варианта:

  • Сделай сам : внедри код сам, который это сделает. Это то, что Чаппи Джонсон рекомендует в своем ответе.
  • Внешняя логика авторизации : используйте систему авторизации для проверки. Способ экстернализации действительно зависит от среды, в которой вы разработали API. Например, вы можете обратиться к Flask Authorization для Python или Ruby CanCanCan или утверждений .NET.
  • Внешняя авторизация с использованием стандартного подхода : Управление доступом на основе атрибутов (ABAC) - это именно то, что вы ищете. В ABAC вы пишете политики, которые определяют, что может и не может произойти. и - это два способа написания политик. Преимущество этого подхода в том, что вы всегда можете изменить политики, не переписывая свой API.
0 голосов
/ 24 марта 2019

В вашем JWT у вас должна быть заявка в теле токена, которая содержит идентификатор пользователя запрашивающего пользователя. Перед выполнением редактирования вы можете проверить, что значение user_id в вашем JWT совпадает со значением user_id, которое user1 пытается изменить. Если идентификаторы user_id не совпадают, то отклоните изменение.

    String userId = getUserIdFromJwt();
    if (!userId.equals("some user id")) {
        throw new HttpUnauthorizedException("You do not have access to edit" + 
        "this resource.");
    }

У вас есть вся информация о текущем запрашивающем пользователе в JWT, чтобы вы могли делать утверждения о пользователе.

...