使用Android AccountManager对服务器的用户进行身份验证

时间:2011-02-25 09:05:47

标签: android facebook authentication

我正在编写一个具有服务器连接的Android应用程序。我想在Android设备上验证应用程序的用户,让服务器知道这已经完成。

假设用户有:

  1. 在谷歌和Facebook的Android设备中输入了他/她的凭据(这些是我目前感兴趣的)
  2. 允许应用程序使用Android设备上存储的凭据
  3. 该应用程序从Android的AccountManager成功
  4. 获取了详细信息(帐户用户和令牌)

    我现在想要正确安全地让服务器知道设备上的应用已经对用户进行了身份验证。服务器如何验证这不是假的?有没有办法在服务器上使用Google和Facebook验证令牌而无需用户交互?

    感谢。

3 个答案:

答案 0 :(得分:1)

你应该看看这个问题: Generating Device-Specific Serial Number

您可以根据其使用的服务获取帐户名称,例如:

AccountManager am = AccountManager.get(this); // "this" references the current Context

Account[] accounts = am.getAccountsByType("com.google");

但您必须在清单中声明它并要求用户验证权限。

答案 1 :(得分:0)

虽然使用检索到的令牌并保存或将其传输到服务器可能不是一个好主意,但可能还有其他方法让您的服务器知道身份验证已完成。

它可能不是一种防填充方法,但根据您的用例,它可能会有效。

  1. AccountManagerFuture界面有一个回调isDone(),它表示现在您可以检索您的令牌。这实际上意味着,在用户授予您的应用使用特定帐户的权限后,身份验证已经发生。

  2. 否则,如果您使用AccountManagerCallback作为代码,则在尝试检索帐户的令牌后,您可以在代码中知道身份验证已经发生。

  3. 在其中任何一种情况下,您都必须调用服务器,让它知道身份验证已经发生。我真的不知道你是否还需要将令牌发送到你的服务器。但是,如果你愿意,我想,你可以这样做。

答案 2 :(得分:0)

有几种方法可以做到这一点,同时试图确保它不是'虚假'。一,在初始身份验证(您获得用户帐户信息)时,获取他们的设备ID以及他们的位置(不是精确的位置,但使用他们的IP地址,您可以获得各种区域)。这样,如果有人试图使用虚假凭据进行身份验证,则会阻止他们。我建议让实际用户知道有人试图通过向他们发送电子邮件来做到这一点。您还可以在初始身份验证时让用户设置PIN或密码,然后将其保存在设备上。将针脚的散列版本发送到服务器,并在每次用户进行身份验证时检查。

我完全可以完成你想要完成的事情,因为描述比任何事情都更糟糕,但我希望这有帮助