【发布时间】:2019-08-10 14:21:09
【问题描述】:
我正在开发与我的服务器上的 REST API 通信的 android 应用程序,该应用程序是自签名的。我的 API 在节点上运行,使用框架 Loopback。
现在,我的 API 不安全,所以我可以从我的 android 应用程序发送请求并且它工作正常。只有我的域是安全的。 API 在 3000 端口上运行。现在问题来了。
我创建了一个用于密码重置的网络表单,因此当用户在应用程序中并想要为其帐户重置密码时,他会收到电子邮件。他可以在应用程序或浏览器中打开这封带有重置链接的电子邮件。
1.案例
当用户在浏览器中打开重置链接时,他是在 HTTPS URL 上。当他输入新密码并点击按钮更改密码时,他正在从 HTTPS 向 HTTP 上的不安全 API 发送请求。
这给了我错误:
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。案例
当我保护我的 API 时,我的域和 API 都是 HTTPS,我可以从 Web 重置密码,但是当我发送请求时,我得到 ERR_CERT_AUTHORITY_INVALID。而且来自android APP,因为它不信任我的证书。而且我无法找到如何让我的应用信任它的解决方案。
我还应该说我正在从 url 解析令牌,并且在应用程序中重置密码时,该令牌在标头中发送,我在 java 中从我的应用程序发送请求......没有打开网站。一切都通过retrofix + rxjava。
任何想法如何解决这个问题?我不想绕开它,我想把它做对,但也不愿意为受信任的 SSL 证书付费......
【问题讨论】:
标签: android rest api ssl https