Java 如何确保用户通过POST请求通过我的应用程序进行身份验证?

Java 如何确保用户通过POST请求通过我的应用程序进行身份验证?,java,android,post,Java,Android,Post,我正在编写一个android应用程序,通过POST请求连接到我的服务器。到目前为止,我正在使用SHA-256来哈希和salt epoch time,并将其用作用户名和密码旁边的第三个参数,以确保从应用程序完成身份验证。然而,攻击者可以对apk进行反编译,并找出我添加到epoch time中的salt,从而允许他们从任何地方发出POST请求 我想知道是否有办法确保POST请求是从我的应用程序发出的。请注意,我无法从POST更改服务器的身份验证方法 提前感谢。HTTP客户端身份验证是一个开放的过程,

我正在编写一个android应用程序,通过POST请求连接到我的服务器。到目前为止,我正在使用SHA-256来哈希和salt epoch time,并将其用作用户名和密码旁边的第三个参数,以确保从应用程序完成身份验证。然而,攻击者可以对apk进行反编译,并找出我添加到epoch time中的salt,从而允许他们从任何地方发出POST请求

我想知道是否有办法确保POST请求是从我的应用程序发出的。请注意,我无法从POST更改服务器的身份验证方法


提前感谢。

HTTP客户端身份验证是一个开放的过程,允许供应商实施不同的身份验证方案

除了SSL(在HTTP协议下运行时)具有自己的身份验证机制(对于服务器和/或客户端),HTTP协议上的身份验证任务由HTTP标头协议中的
WWW Authenticate
标头管理。该字段反映服务器是否需要某种身份验证以及如何对对等方进行身份验证

这允许对等协议身份验证(不仅对客户端,而且对服务器也可以进行身份验证),但它使HTTP方法不可知,因为身份验证过程与用于请求信息的方法正交。您可以对任何(或所有)http方法(GET、POST、CONNECT、HEAD、PUT、DELETE等)使用身份验证

您需要阅读RFC的文档:、和

您更感兴趣的是(它描述了协议身份验证)和您请求的web服务器的文档,以及服务的配置方式,以了解它支持的身份验证方法或您必须提供的凭据,从而对客户端进行身份验证

通常情况下,流程如下:

  • 客户端对目标url发出未经验证的信息请求
  • 服务器拒绝请求,必须使用信令身份验证,并提出身份验证方法和质询
  • 客户机重做请求,但从服务器提供请求的凭据
  • 服务器接受请求或再次拒绝请求
  • 需要注意的是,根据要使用的身份验证方法(例如,BASIC是一个简单的用户名/密码方案,而DIGEST强制用户根据使用的凭据和某些服务器提供的信息生成摘要),您可能需要多次往返服务器(服务器可以强制您(虽然不是常见的)在链中使用其中两个来授予您对资源的访问权限)


    就Java而言,Apache HttpClient类可能是一个很好的文档来源,它有一些Apache教程,向您展示如何发出经过身份验证的请求。一个很好的参考是。

    POST
    不是一种身份验证方法。请阅读HTTP的rfc以获取有关身份验证可能性的信息(在注释中可以显示很多)参考有:HTTP协议、RFCs和。您更感兴趣的是(协议身份验证)。