Java 无SSL/HTTPS的Android/ASP RESTful API身份验证
这是一个常见的SO问题,但没有明确的答案 我的设置:Java 无SSL/HTTPS的Android/ASP RESTful API身份验证,java,android,rest,security,authentication,Java,Android,Rest,Security,Authentication,这是一个常见的SO问题,但没有明确的答案 我的设置: 我有一个网站上运行的经典ASP与备份数据库。不幸的是,没有可用的SSL证书 我有一个Android应用程序,它将发送一个谷歌截击,使用定制但简单的API从站点请求数据 当前: 我仍在私下进行测试,因此目前我仅访问该网站: 在应用程序上,用户只需输入一次用户ID和密码 用户导航到与特定ASP页面关联的片段,该页面将返回一些数据 截击被发送到/mysite.com/_-api/apage.asp?m=md5hashhereabcdefghi
- 我有一个网站上运行的经典ASP与备份数据库。不幸的是,没有可用的SSL证书
- 我有一个Android应用程序,它将发送一个谷歌截击,使用定制但简单的API从站点请求数据
- 在应用程序上,用户只需输入一次用户ID和密码
- 用户导航到与特定ASP页面关联的片段,该页面将返回一些数据
- 截击被发送到/mysite.com/_-api/apage.asp?m=md5hashhereabcdefghijk
- 服务器在用户记录中搜索匹配的哈希(基于UserID+SALT+pass构建)。在匹配记录上,它使用找到的用户ID作为用户ID
- asp执行一些sql查询并返回一个JSON对象
- 应用程序接收此JSON响应并进行解析
我读过各种不同的解决方案,但没有一个真正适合我的环境。我不能使用ASP会话变量(RESTful是无状态的),我不能使用HTTPS(SSL/TLS),因为服务器上没有证书。我不能使用基于应用程序的密码,因为这可以反编译并很容易看到 我很感激你永远不会得到100%安全的东西,但只能让人们对入侵一个系统不感兴趣,或者让它变得不值得 建议的解决方案: 我想就以下建议方法获得一些反馈/想法:
- 每个请求都有自己的握手来验证应用程序
- 用户首次打开应用程序并输入用户ID/密码。在卸载(或注销)之前,这将一直保留在应用程序中,但我打算让用户的应用程序保持登录状态
- 用户在应用程序中导航到与服务器上特定页面对应的片段
- 截击是通过以下方式发送的:
- UserAgent HTTP头“某些值”
- 为(userid+salt+pass)生成相同的身份验证哈希
- 使用公钥加密此哈希
- 一个查询字符串/apage.asp?q=abcdefghijk。。。。发送到服务器
- 服务器使用其私钥解密
- 服务器和我当前一样检查此哈希
- 页面返回纯文本JSON值(未加密)
- 应用程序向服务器发送截击请求握手(HELO)
- 使用UserAgent HTTP标头检查服务器严重错误
- 服务器记录请求的时间戳和IP,并生成唯一的随机代码
- 应用程序接收此代码并使用该唯一代码作为Salt构建新哈希
- 应用程序将第二次截击发送到/apage.asp?m=MD5(用户标识+唯一代码+密码)
- 使用原始IP、时间戳+容差(两个请求之间的30秒?)和UserAgent请求头进行服务器严重错误检查
- APage.asp使用此哈希对请求进行身份验证,前提是前面的步骤已成功通过
- asp根据请求返回一个JSON对象
- 服务器将原始IP/时间戳的日志标记为已过期,或者仅删除该记录
非常感谢“没有可用的SSL证书”。如何?“我不能使用ASP会话变量(RESTful是无状态的)”-为什么不设置会话cookie?另外:请迁移出该服务器,这会给自己带来不必要的麻烦。