2012-10-24 31 views
0

我有一个与ASP.NET Web服务进行通信的Android应用程序(用Java编写)。 Android应用程序是一个论坛阅读器,应该显示论坛中的线程列表并允许用户阅读线程。该应用程序仅在后台联系web服务,基本上要求“给我线程x中的帖子”。然后,web服务连接到论坛,下载HTML源代码,解析它,最后返回(以json格式)相关信息(每篇文章与作者,日期,消息等一起)。然后Android应用程序会收到该信息并很好地显示它。将Cookie从Android应用程序传输到.NET Web服务

通过这种方式,web服务完成所有'脏工作'(下载论坛HTML源代码,解析它并提取相关信息),而Android应用程序仅仅是坐下来接收它想要的信息。

但是,为了让webservice访问论坛及其页面源,必须对用户进行身份验证。我可以通过使用用户名和密码进入论坛登录页面的HTTP POST并存储它在成功时收到的CookieContainer来为论坛提供访问web服务的权限。然后我在所有进一步的请求中使用相同的CookieContainer对象,这足以验证用户并允许访问线程及其页面源。

一个明显的缺点是,除我自己之外的任何用户都必须在Android应用程序中输入自己的密码,该应用程序必须将其发送到Web服务,最终使用它来验证用户身份。 webservice明显需要明文密码,因此无法接收散列版本。我当然可以加密密码或使用HTTPS,但事实仍然是这样,我需要web服务上的明文密码,我可以在那里存储密码并窃取密码。显然不是最好的方法。

我能想到的唯一方法就是在Android应用程序本身上进行登录工作,并在那里接收CookieContainer(我想Java中必须有类似的东西?),然后将该cookie信息发送给webservice。这仍然可以让'黑客'通过拦截数据来冒充他们自己作为另一个用户,但就我所见,它的安全性也不低,那么人们只需通过Android网页浏览器登录论坛即可。明显的优势是我不再需要Web服务站点上的纯文本密码,Android应用程序不需要将它发送给我(仅限于(https)登录页面,就像他们直接使用浏览器一样),并且存在没有办法让它被拦截或者我偷走它。我想从Java WebRequest(Android应用程序)接收cookie,并以某种方式将它们转移到Web服务(ASP.NET),在那里我可以重建CookieContainer对象并将其用于进一步的请求。因此,我必须以某种方式将我在Java中获得的cookie转换为字符串,并将它们发送到web服务,在那里我从这些字符串中重建CookieContainer对象。

我尝试了一些基本的方法,但我无处可去。任何人都可以用这一步来协助我吗?

当前,在ASP.NET webservice中,我创建了一个新的CookieContainer对象,并将其用作HttpWebRequest对象的CookieContainer属性。然后,我执行一个HTTP POST请求到登录页面,并且如果成功,那么相同的CookieContainer对象可以用来认证任何进一步的请求。我必须重写这基本上在Java中,而不是直接使用CookieContainer(或任何相当于Java),我需要将其转换为一个字符串,所以我可以发送到Web服务,我可以重建CookieContainer从字符串。

任何提示?谢谢!

回答

0

使用登录活动(本地可能效果最好)。让登录活动直接向论坛发帖并获取cookie。如果登录成功,则将cookie发送到您的web服务,并将其存储并用于来自该设备的后续请求(假设您正在跟踪web服务上的设备)。如果您不想跟踪设备,请让Android应用将cookie作为每个请求的一部分发送,并让web服务将其传递。

+0

这就是主意,是的。我会发送每个请求的cookie。但我不知道具体细节 - 如何将cookie发送到web服务?我必须将Java端的cookie转换为某种字符串,因此我可以将它发送到web服务,然后从该字符串中构建一组新的cookie。这就是我现在想要做的,作为一个测试,我只是通过使用Chrome开发人员工具发送了我看到的Cookie值,但即使这样做仍然无效,但我认为这个域的某些问题饼干... –

相关问题