我正在编写一个android应用程序,它通过POST请求连接到我的服务器。到目前为止,我正在使用SHA-256哈希和盐时代时间,并使用它作为第三个参数与用户名和密码,以确保身份验证是从应用程序。但是,攻击者可以对apk进行解压缩,并计算出我要添加到划时代时间的盐分,允许他们从任何地方发出POST请求。
我想知道是否有办法确保帖子请求是从我的应用程序中发出的。注意,我不能从POST中更改服务器的身份验证方法。
提前谢谢。
发布于 2018-09-04 22:06:57
HTTP客户端身份验证是一个开放的过程,允许供应商实现不同的身份验证方案。
除了SSL (在HTTP协议下运行时)具有自己的身份验证机制(用于服务器和/或客户端)之外,HTTP协议上的身份验证任务由header协议中的WWW-Authenticate
报头管理。该字段反映服务器是否需要某种身份验证,以及如何对对等方进行身份验证。
这允许对等协议身份验证(不仅对客户端,而且对服务器也可以进行身份验证),但它使HTTP方法不可知,因为身份验证过程与请求信息的方法正交。您可以将身份验证与任何(或所有) http方法(GET、POST、CONNECT、HEAD、PUT、DELETE等)一起使用
您需要阅读RFC的文档:七百二百三十、七二三一、七二三二、七二三三、七二三四和七二五五。
您更感兴趣的是七二三四 (它描述协议身份验证),以及您请求的web服务器的文档,以及如何配置该服务,以了解它支持的身份验证方法或您必须提供的认证客户端凭据。
通常情况下,这一过程如下:
要注意的是,根据要使用的身份验证方法(例如BASIC是一个简单的用户名/密码方案,而摘要强制用户根据已使用的凭据和某些服务器提供的信息生成摘要),您可以需要一次以上的往返到服务器(服务器可以强迫您(虽然不是很常见)使用链中的两种方法来授予您访问资源的权限)。
在Java的例子中,一个很好的文档来源可能是Apache HttpClient类,它提供了一些来自Apache的教程,这些教程向您展示了如何发出经过身份验证的请求。一个很好的参考是这。
https://stackoverflow.com/questions/52164853
复制