2014-04-03 19 views
0

我最近开始玩弄android应用程序,并且我已经到了希望它与Web服务进行通信的地步,我完全理解如何以不安全的方式执行此操作,我在哪里有点绊倒了安全。Android应用程序持久身份验证

我希望它能像我的手机上的Facebook应用一样工作,它始终登录,永远不会过期。

我的第一个想法是使用用户/密码并将它们本地保存在使用SSL加密的手机上。但是,这可能是一个安全问题,丢失的电话被植根,然后人们可以看到登录和通过(即使他们是哈希/加密,这似乎是一个问题)

我的另一种选择是使用Oauth 1a/2但是,如果我没有弄错,除了auth令牌外,这似乎也有相同的问题,这意味着除了在api层之外发生同样的问题。

我也看了一下androids accountManager,但我打算在iOS上做这个,所以我想为两者都使用通用的做法。

你们认为什么?

一般问题:

  1. 令人耳目一新OAuth凭证相同的话说登录一次,或者是它只是一个新的Oauth权杖?

  2. 有没有办法从手机中获得一个唯一的ID来检测是否正在使用“新手机”?

  3. 有谁知道Facebook或谷歌如何处理他们的设备上的身份验证/授权?他们只是简单地存储一个永不过期的验证令牌,或者只是发布一个新的验证令牌?

我猜Android应用程序对我来说似乎很脆弱,如果有人发现利用漏洞获取身份验证令牌而无需root访问权限?立足点,我在想这个错了吗?

我是否错误地认为唯一能够阻止某人通过api访问我的帐户的人,如果他们获得了我的令牌的话,是否我访问并使用了api,并且将Oauth更新为新的值以使我的旧的过时? (假设没有可靠的方法来确定哪个设备是哪个设备)

回答

1

是的,存储用户/传递设备是不可能的。看看this了解关于令牌如何工作的一些细节。

一旦用户登录,存储并使用它来签署所有请求,您希望从服务器获取OAuth令牌。如果其他人获得了令牌,则可以使其无效,以便他们无法代表您进行更多请求。

关于你的问题:

  1. 无效您的令牌将类似于登录你。刷新(交换新的令牌)就像再次登录你一样。
  2. 是的,你可以找到如何here
  3. 我已经实现了使用FB和Twitter认证对我的应用程序 之前,它的工作方式是,用户验证后,你会得到一个 短的时间令牌可以换取一个长期的。然后您将 存储在设备上并用于将来的请求。更多信息 here
+0

好吧,所以Oauth的想法并不是说它在漏洞的意义上更安全(因为用户/密码具有相同的问题),但在某种意义上它保护用户的实际用户名和密码,并且如果它被破坏,你只需更新/使令牌无效。 – Krum110487

+1

是的。您不必存储用户凭据,每次打开应用程序时都不必通过网络传输它们。 – FMontano

+0

看看[这个答案](http://stackoverflow.com/questions/7561631/oauth-2-0-benefits-and-use-cases-why)。你可能会发现它很有帮助。 – FMontano

相关问题