Как убедиться, что пользователь проходит проверку подлинности из моего приложения с помощью запроса POST? - PullRequest
0 голосов
/ 04 сентября 2018

Я пишу приложение для Android, которое подключается к моему серверу с помощью запроса POST. До сих пор я использую SHA-256 для хеширования и подсчета времени эпохи и использую его в качестве третьего параметра наряду с именем пользователя и паролем, чтобы убедиться, что аутентификация выполняется из приложения. Однако злоумышленник может декомпилировать apk и выяснить, какую соль я добавляю в эпоху, что позволяет ему отправлять POST-запрос откуда угодно.

Мне интересно, есть ли способ убедиться, что из моего приложения выполняется запрос POST. Обратите внимание, что я не могу изменить метод аутентификации сервера с POST.

Заранее спасибо.

1 Ответ

0 голосов
/ 05 сентября 2018

HTTP-аутентификация клиента является открытым процессом, позволяющим поставщикам реализовывать различные схемы аутентификации.

Помимо SSL (при работе по протоколу HTTP), имеющего собственный механизм аутентификации (для серверов и / или клиентов), задачей аутентификации по протоколу HTTP управляет заголовок WWW-Authenticate в протоколе заголовка HTTP. Это поле отражает, требует ли сервер какой-либо аутентификации и как будет проходить аутентификация однорангового узла.

Это позволяет выполнять аутентификацию по протоколу равноправного узла (не только для клиента, но и для сервера), но делает метод HTTP независимым, поскольку процедура аутентификации ортогональна методу, используемому для запроса информации. Вы можете использовать аутентификацию с любыми (или всеми) методами http (GET, POST, CONNECT, HEAD, PUT, DELETE и т. Д.)

Вам необходимо прочитать документы RFC: 7230 , 7231 , 7232 , 7233 , 7234 и 7235 .

Более интересным для вас является 7234 (в нем описывается проверка подлинности протокола), и документация веб-сервера, который вы запрашиваете , и способ настройки службы для получить представление о методах аутентификации, которые он поддерживает, или учетных данных, которые вы должны предоставить для аутентификации клиента.

Обычно этот процесс выглядит следующим образом:

  1. клиент делает неаутентифицированный запрос информации для целевого URL.
  2. Сервер отклоняет запрос, должна использоваться аутентификация с сигнализацией и предлагает метод аутентификации и вызов.
  3. Клиент повторяет запрос, но предоставляет запрошенные учетные данные с сервера.
  4. Сервер принимает запрос или снова отклоняет его.

Следует отметить, что в зависимости от используемого метода аутентификации (например, BASIC - это простая схема имени пользователя / пароля, в то время как DIGEST вынуждает пользователя создавать дайджест на основе используемых учетных данных и некоторой информации, предоставленной сервером), вам может потребоваться больше чем одна поездка на сервер (сервер может заставить вас, хотя и не часто, использовать два из них в цепочке для предоставления вам доступа к ресурсам)

В случае Java, вероятно, хорошим источником документации является класс Apache HttpClient , и в нем есть несколько учебных пособий от Apache, которые показывают вам, как выполнять аутентифицированные запросы. Хорошая справка: это .

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