我正在编写一个通过POST请求连接到我的服务器的android应用。到目前为止,我正在使用SHA-256来散列和加盐时间,并将其作为第三个参数与用户名和密码一起使用,以确保通过应用程序进行身份验证。但是,攻击者可能会反编译apk并弄清楚我要添加的时间,从而使他们可以从任何地方发出POST请求。
我想知道是否有一种方法可以确保从我的应用发出了POST请求。请注意,我无法从POST更改服务器的身份验证方法。
谢谢。
答案 0 :(得分:1)
HTTP客户端身份验证是一个开放过程,允许供应商实施不同的身份验证方案。
除了具有自己的身份验证机制(用于服务器和/或客户端)的SSL(在HTTP协议下运行)之外,HTTP协议上的身份验证任务还由HTTP头协议中的WWW-Authenticate
头管理。该字段反映了服务器是否需要某种身份验证以及对端将如何进行身份验证。
这允许对等协议身份验证(不仅针对客户端,而且可以对服务器进行身份验证),但由于身份验证过程与用于请求信息的方法正交,因此使HTTP方法不可知。您可以对任何(或所有)http方法(GET,POST,CONNECT,HEAD,PUT,DELETE等)使用身份验证
您需要阅读RFC的文档:7230,7231,7232,7233,7234和7235。
您更感兴趣的是7234(它描述协议身份验证),以及您要请求的Web服务器的文档,以及如何配置服务以获取有关其支持的身份验证方法或您必须提供的用于对客户端进行身份验证的凭据的想法。
通常,过程如下:
要注意的是,根据使用的身份验证方法(例如,BASIC是简单的用户名/密码方案,而DIGEST会根据使用的凭据和某些服务器提供的信息,强制用户生成摘要),您可能需要更多信息到服务器的一次往返(服务器可以强迫您(虽然不常见)强制使用其中的两个来授予您对资源的访问权限)
对于Java来说, Apache HttpClient 类可能是一个很好的文档来源,并且其中有Apache的一些教程,这些教程向您展示了如何进行经过身份验证的请求。 this是一个很好的参考。