Я работаю над приложением для Android, которое взаимодействует с REST API на моем сервере, которое подписано самостоятельно.Мой API работает на узле с использованием фреймворка Loopback.
Прямо сейчас мой API не защищен, поэтому я могу отправлять запросы из моего приложения для Android, и он работает нормально.Только мой домен защищен.API работает на порте 3000. И теперь возникает проблема.
Я создал веб-форму для сброса пароля, поэтому, когда пользователь находится в приложении и хочет сбросить пароль для своей учетной записи, он получает электронную почту.Он может открыть это письмо с помощью ссылки сброса либо в приложении, либо в браузере.
1.case
Когда пользователь открывает ссылку сброса в браузере, он попадает на HTTPS URL.Когда он вводит новый пароль и нажимает кнопку для изменения пароля, он отправляет запрос из HTTPS в незащищенный API по HTTP.
Это дает мне ошибку:
The page at xxx was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint xxx. This request has been blocked; the content must be served over HTTPS.
Вот моя функция:
function post() {
const urlParams = new URLSearchParams(window.location.search);
const token = urlParams.get('access_token');
console.log("TOKEN:", token);
const user = {
newPassword: document.querySelector('#input-password-check').value,
}
const http = new XMLHttpRequest()
http.open('POST', 'http://www.example.com:3000/api_path/reset-password')
http.setRequestHeader('x-access-token', token)
http.send(JSON.stringify(user))
http.onload = function() {
alert(http.responseText)
}
}
2.case
Когда я защищаю свой API, чтобы и мой домен, и API были HTTPS, я мог сбросить пароль из сети, но когда я отправляю запрос, я получаю ERR_CERT_AUTHORITY_INVALID
.А также из приложения для Android, так как он не доверяет моему сертификату.И я не смог найти решение, как заставить мое приложение доверять ему.
Я должен также сказать, что я парсирую токен из URL, и при сбросе пароля в приложении этот токен отправляется в заголовке, и я отправляюзапрос из моего приложения в Java ... Не открывается веб-сайт.Все идет через retrofix + rxjava.
Есть идеи, как это решить?Я не хочу обойти это, я хочу сделать это правильно, но также не желаю платить за SSL-сертификат, которому будут доверять ...