Как защитить ВЕБ-API от аутентифицированных пользователей?

#asp.net #rest #asp.net-web-api #asp.net-core #asp.net-web-api2

#asp.net #отдых #asp.net-web-api #asp.net-ядро #asp.net-web-api2

Вопрос:

Обзор: что я сделал:

Я создал ВЕБ-API, и этот ВЕБ-API имеет множество методов GET и POST. Я также внедрил авторизацию токена JWT, чтобы все запросы должны быть аутентифицированы и авторизованы.

Постановка проблемы: теперь все работает нормально, но что, если пользователь, который является аутентифицированным пользователем моего приложения, изменит route parameter значение? Запрос по-прежнему будет аутентифицированным запросом, но при этом он может получить доступ к чужой информации.

Один из способов исправить это: каждый раз, когда приложение отправляет какой Id -либо параметр, я должен проверять Id , принадлежит ли он текущему пользователю или нет? Но я думаю, что это очень плохое решение.

Есть ли у кого-нибудь предложения о том, как я могу защитить свои веб-API для таких случаев? Я думаю, что это часть самой базовой безопасности. Итак, должно быть что-то, о чем я не знаю. Пожалуйста, помогите.

Комментарии:

1. Я думаю, вы можете начать это с таблицы, которая отображает объекты и стиль разрешений пользователей. Затем вы можете добавить пользовательский фильтр, который проверяет сопоставление и аутентификацию

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

3. У вас явно неправильное понимание аутентификации и авторизации. То, что вы настроили до сих пор, завершает только аутентификацию, которая позволяет действительным пользователям входить в систему. Что вы пропустили, так это авторизацию, то есть для каждой операции, выполняемой этими пользователями, вы проверяете, есть ли у этого пользователя разрешения на выполнение. «Один из способов исправить это» — тоже неправильный подход. Для каждого входящего запроса вы знаете, кто является пользователем и какую операцию он пытается выполнить, затем вы должны явно проверить разрешения и решить, можно ли выполнить эту операцию или нет. Id Поле не имеет значения.

4. @Fran — Я считаю это плохим решением, потому что постоянное обращение к базе данных для получения некоторых данных, чтобы убедиться, что обновляемые данные принадлежат зарегистрированному пользователю, также является дополнительной перегрузкой сервера и плохим дизайном.

5. @LexLi — Я привожу вам пример. Пожалуйста, помогите мне понять, как ваше решение работает в этом случае. У меня есть приложение ToDoManager, и я хочу обновить статус своей задачи (я хочу пометить ее как выполненную), и это может сделать любой другой пользователь, использующий приложение. Теперь, что, если я использую postman и сохраню все то же самое, просто измените идентификатор задачи. В этом случае сервер понятия не имеет, что задача не принадлежит мне. Как я могу избежать таких сценариев? Я думаю, что одним из решений является использование GUID в качестве первичного ключа. Но для целых чисел я не знаю.