У меня есть веб-приложение на основе PHP, которое отправляет HTTP-запросы в веб-службу Java, которая, в свою очередь, выполняет действия, запрашиваемые в базе данных Oracle. Я хочу использовать password_hash для хеширования моего пароля перед отправкой в HTTP-запросе. Если я делаю это при создании нового пользователя, там нет никаких проблем. Однако, когда мне нужно войти в систему с использованием этого пароля, я не могу проверить его в PHP, потому что у меня нет (и я не могу) прямого доступа к базе данных, чтобы иметь возможность хранить там хэш. Таким образом, проверка должна быть в веб-сервисе Java. Возможно ли это, а если нет, какова альтернатива? Используемая соль будет случайной, поэтому я не могу хэшировать пароль, используемый для входа в систему, и отправлять его, потому что у меня нет соли, используемой для хеша, сохраненного в базе данных.
Поместите свой вход в систему в качестве службы в веб-службу, добавьте проверку функции входа в систему, чтобы только PHP-сервер мог получить к ней доступ (я полагаю, что вся служба может быть доступна только для PHP-сервера, поэтому у вас есть отдельный PHP-сервер). на первом месте). Для того, чтобы сеанс оставался открытым, время от времени необходимо будет обновлять имя входа (ping), все операции службы будут проверять, что этот сеанс активен, а Java-агент закрывает незанятые соединения, если веб-служба работает только по запросу. /От себя.
Вам придется взять на себя скучную задачу по передаче имени пользователя от пользователя через php в веб-службу и полностью выполнить вход в систему, а затем вернуться к php и начать обслуживание после проверки подлинности пользователя.
Если это угроза безопасности (вы не хотите, чтобы PHP даже имел хеш-пароль), вам нужно, чтобы пользователь самостоятельно вошел в веб-службу, затем связался с вами, подтвердил, что пользователь является зарегистрированным пользователем, и запустите службу.
Что касается хешей и солей, они используются для защиты зашифрованных данных в базе данных от кражи и чтения. (в простейшем виде для защиты номеров кредитных карт). Соль может быть публичной, хеш технически тоже, но вам придется защищать ее с помощью SSL как минимум, чтобы никто не мог войти в систему, используя ее (или простой пароль, если ваш пользователь отправляет это): P. простой пароль> хэш, затем добавьте соль> соль и результат, сохраненный в базе данных.
В случае, если PHP передает данные для входа в систему, тогда PHP может удерживать свою сторону сеанса, так как он знает личность пользователя с cookie + агент браузера + ip (по-прежнему необходимо держать сеанс открытым со службой). В случае, если пользователь входит в веб-службу напрямую, PHP должен запросить эту информацию у веб-службы (если возможно, ip + агент браузера) или запросить токен сеанса (строка, сгенерированная службой), которая должна быть предоставлена пользователь, если он хочет получить доступ к любой странице на сервере PHP в течение срока действия токена.
Других решений пока нет …