将Cookie从Android应用程序传输到.NET Web服务

时间:2012-10-24 16:41:50

标签: android asp.net web-services authentication cookies

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

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

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

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

我能想到的唯一选择是在Android应用程序本身上进行登录工作,在那里接收CookieContainer(我想在Java中必须有类似的内容吗?),并将该cookie信息发送到Web服务。这仍然允许“黑客”通过拦截数据来冒充自己作为另一个用户,但据我所知,它的安全性并不低于人们只需通过Android webbrowser登录论坛。明显的优势是我不再需要webservice网站上的明文密码,Android应用程序不需要发送给我(只有(https)登录页面,就像他们直接使用浏览器一样)并且有没办法让它被截获或让我偷走它。

长话短说:我想从Java(Android应用程序)中的webrequest接收cookie,并以某种方式将它们传输到web服务(ASP.NET),在那里我可以重建CookieContainer对象并将其用于进一步的请求。因此,我必须以某种方式将我在Java中获得的cookie转换为字符串,然后将它们发送到webservice,在那里我用这些字符串重建CookieContainer对象。

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

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

任何提示?谢谢!

1 个答案:

答案 0 :(得分:0)

使用登录活动(本机可能效果最佳)。让登录活动直接将帖子发布到论坛并获取cookie。如果登录成功,请将cookie发送到您的Web服务,它可以存储它并将其用于来自该设备的后续请求(假设您正在跟踪Web服务上的设备)。如果您不想跟踪设备,请让Android应用程序将Cookie作为每个请求的一部分发送,并让网络服务将其传递给您。