我有一个与 ASP.NET Web 服务通信的 Android 应用程序(用 Java 编写)。Android 应用程序是一个论坛阅读器,应显示论坛中的主题列表并允许用户阅读主题。该应用程序仅在后台联系 Web 服务,并且基本上询问“给我线程 x 中的帖子”。Web 服务然后连接到论坛,下载 HTML 源代码,对其进行解析,最后返回(以 json 格式)相关信息(每个帖子以及作者、日期、消息等)。然后,Android 应用程序接收该信息并很好地显示它。
通过这种方式,Web 服务完成了所有“繁琐的工作”(下载论坛 HTML 源代码、解析它并提取相关信息),而 Android 应用程序只是坐下来接收它想要的信息。
但是,为了让 web 服务访问论坛及其页面源,用户必须经过身份验证。我可以通过将用户名和密码发送到论坛登录页面的 HTTP POST 并存储成功时接收到的 CookieContainer 来授予 Web 服务访问论坛的权限。然后我在所有进一步的请求中使用相同的 CookieContainer 对象,这足以验证用户并允许访问线程及其页面源。
明显的缺点是除我之外的任何用户都必须在 Android 应用程序中输入他们的密码,这将不得不将其发送到 web 服务,最终使用它来验证用户。网络服务显然需要纯文本密码,因此它无法接收散列版本。我当然可以加密密码或使用 HTTPS,但事实仍然是这样我需要 web 服务上的明文密码,我可能会在其中存储它并窃取密码。显然不是最好的方法。
我能想到的唯一选择是在 Android 应用程序本身上进行登录工作,在那里接收 CookieContainer(我猜 Java 中一定有类似的东西?),然后将该 cookie 信息发送到 Web 服务。这仍然允许“黑客”通过拦截数据来冒充另一个用户,但据我所知,它的安全性不亚于人们只需通过 Android 网络浏览器登录论坛。明显的好处是我不再需要webservice站点上的明文密码,Android应用程序不需要发送给我(只发送到(https)登录页面,就像他们直接使用浏览器一样)并且有它没有办法被拦截或我窃取它。
长话短说:我想从 Java(Android 应用程序)中的 webrequest 接收 cookie,并以某种方式将它们传输到 web 服务(ASP.NET),在那里我可以重建 CookieContainer 对象并将其用于进一步的请求。因此,我必须以某种方式将我在 Java 中获得的 cookie 转换为字符串,并将它们发送到 web 服务,在那里我从这些字符串中重建一个 CookieContainer 对象。
我尝试了一些基本方法,但我一无所获。任何人都可以帮助我完成这一步吗?
目前,在 ASP.NET Web 服务中,我创建了一个新的 CookieContainer 对象并将其用作 HttpWebRequest 对象的 CookieContainer 属性。然后我对登录页面执行 HTTP POST 请求,如果成功,则可以使用相同的 CookieContainer 对象来验证任何进一步的请求。我必须基本上用Java重写它,而不是直接使用CookieContainer(或Java中的任何等价物),我需要将它转换为字符串,以便我可以将它发送到Web服务,在那里我可以重建CookieContainer字符串。
有什么提示吗?谢谢!