将数据导入Android应用程序的最佳方法?

时间:2010-04-26 11:54:09

标签: java sql-server android web-services flawed-concept

只是一点点背景。我是一名精通asp.net/c#/sql的服务器程序员,他已经学习Android不到2天。

我们有一个现有的.net网站,它存储MS SQL Server 2008中的位置列表,我正在尝试创建获取这些位置并在Google地图上显示它们的Android应用程序。

问题实际上是如何让应用程序连接到SQL数据库。我猜有几个选择......

1)应用程序和远程数据库之间的某种直接连接。

2)使用asp.net创建某种中间层,将数据转换为更适用于Android应用程序中的Java代码的东西(记住我几乎知道没有java),完全相同的是我们有.net代码,它为我们的网络应用程序提供JSON。

3)创建某种Web服务,只返回Web服务器的XML结果。我不知道如何保证这一点,以便只有Android应用程序可以请求数据。

任何有关最佳实践的帮助或建议都非常有用。我想我只需指出一个好策略的大方向,我就可以解决它。

5 个答案:

答案 0 :(得分:1)

  

我不知道如何确保这一点,以便只有Android应用可以请求数据。

你的问题比那更大。

它仅与第(3)点有关,它与您将要选择的任何可能方法有关。

  • 如果您在互联网上公开任何类型的数据,可以通过身份验证或没有身份验证来访问它。
  • 如果使用身份验证访问它,则为每个用户提供一个凭据,或为多个用户提供一个凭据。
  • 一旦用户拥有凭证,它可以随意使用,但您不能限制它,只能完全阻止凭证本身。

现在,您将采用这种方式,即一个对所有用户都有效的凭证,即应用程序已获得它并使用它来获取数据。事实上,用户自己现在可能不相关。

请记住:通过默默无闻的安全措施不起作用。如果你想破坏,朦胧只是“一个更烦恼”,它就像一个里面有贵重物品的黑暗房间:黑暗无济于事,但没有理由没有锁定。有人即将偷东西,这只是时间问题。

答案 1 :(得分:1)

您的安全问题是网络基础架构和协议之一,而不是Android。 OAUTH正在成为这样做的标准方式,并以谷歌为例,或许更好的类比是访问Google Docs?

更多信息:

实际上实施握手等可能需要一些工作,具体取决于您想要的安全性。同样,这不是一个真正的“Android事物”,因为它首先是一个架构挑战,一旦你做出了一些架构决策,你就可以实际实现你决定在Android或其他任何事情上做的事情。

从概念上讲,通过Web服务公开您的数据并从您的UI中消费它们就可以了。您必须确定您的安全策略,OAuth或其他方式。

答案 2 :(得分:0)

Android的原生LDAP支持很快就会到来(Lots of people want it),这有助于提高安全性(即使用Exchange Server验证不同的用户凭据而不是使用应用程序凭据)

与此同时,数据可能比它应该更容易访问。它敏感吗?

答案 3 :(得分:0)

您实际上无法连接到远程数据库,特别是如果它是MS SQL数据库(android只能处理SQLite)。

您知道自己想要保护数据的最佳选择是在服务器端构建一个可以访问数据库的Java接口。

然后,你可以做一些RMI,或者你可以使用套接字发送和接收数据(包括加密数据)。

答案 4 :(得分:0)

在保护数据的问题下,我将采取的措施包括以下步骤:

  • 使用json Web服务在移动设备和数据库之间进行通信。由于移动设备的网络连接不稳定,每次访问数据库时都必须重新建立数据库连接。 Web服务很好地将一个问题包装到数据库中。
  • 使用google gson将json解析为java数据对象,以便在应用程序中处理它们。
  • 使用您自己的Mapview创建overlay以显示地图上的项目。

安全问题是我想到的很多问题。如果要限制对数据库的访问,则需要应用程序在Web服务器上使用某种密钥进行身份验证。问题是,有人可能只是打开你的应用程序并查找此密钥,然后重新构建您的应用程序中使用的流量。您可以使用密钥与您的网络API进行https连接,这禁止其他人接入网络连接,但拥有电话的人始终可以访问该密钥。

你总是可以让攻击者变得更加困难,但你总是假装成一个手机应用程序,因为auth令牌需要在手机上。使其变得更加困难的一些方法是:

  • 加密应用程序内部的密钥,这使得在类文件中快速搜索并轻松提取密钥变得更加困难。但是只有一层隐藏,因为解密密钥也必须在你的应用程序中。
  • 根据手机数据生成第二个密钥,添加imei的哈希值,电话号码等。问题是这个数据必须最初在服务器上注册,因此它可以简单地伪造。

如果您只是希望通过机器人获取数据,那么服务器只会响应似乎来自手机的请求。阻止对Web服务进行数百次调用的单个IP。