Как аутентифицировать пользователя перед запросом?

#spring #security

#spring #Безопасность

Вопрос:

Я разрабатываю restful api.

Я хочу аутентифицировать пользователя, используя некоторое значение подписи для каждого API.

Значение подписи будет сохранено в моей базе данных. Я хочу сравнить значение подписи из моей базы данных и значение из пользовательского запроса.

Любой намек на этот поток?

Ответ №1:

Распространенным способом является использование токена средней длины (от 32 до 256 символов), передаваемого в качестве параметра запроса или в заголовке.

Если вам нужна более надежная защита, вы можете вместо этого передать хэш, вычисленный из других параметров запроса и этой подписи. Таким образом, для каждого запроса передается отдельное значение, и протокол становится более устойчивым к атакам «Человек посередине».

Обычно в итоге достигается баланс между простотой и безопасностью (HTTPS может быть защитой от MITM). Итак, вы должны сначала определить риски и угрозы, которые вы хотите смягчить.

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

1. Любой вариант сделать это простым? передаваемые как параметры должны быть реализованы в каждом API запроса.

2. С Spring framework вы можете реализовать эту часть в фильтре или перехватчике Spring. Таким образом, класс busyness не должен даже знать о части безопасности.

3. Какой из них более предпочтителен? фильтр или перехватчик? моя цель — аутентифицировать пользователя при каждом запросе.

4. Интерфейс фильтра определен на уровне Java-ee и не зависит от Spring Framework. Напротив, перехватчик является объектом Spring и изначально связан с контейнерами Spring и Spring MVC. Если вы предпочитаете тесную интеграцию с Spring (и Spring MVC), выберите перехватчик, если вам нужно решение, которое может работать в среде, отличной от Spring MVC, используйте фильтр. Но это близко к делу вкуса…