最佳实践(最适合Android):使用Facebook或Googleloginauthentication用户

我正在开发一个既有Facebook和Googlelogin选项的应用程序,也有一个经典的电子邮件+密码login。 我很想知道关于使用第三方APIlogin的几件事情:

1.因为一个用户可以使用他的Facebook帐户login,之后决定注销并使用他的Google帐户login,用户应该通过他的电子邮件地址进行识别。 因此,只要用其他帐户login,就会在数据库中search电子邮件地址,如果find,则会将此新login附加到先前创build的帐户。 请批准这一点。

2.如果用户使用Facebookloginlogin,您可以获得accessToken,userId,用户电子邮件等。对用户进行身份validation的最佳做法是什么,以便它仍然是最安全的方式? 我应该将他的Facebook访问令牌和电子邮件地址直接发送到服务器? 如果服务器检查Facebook,如果accessToken确实存在于Facebook上? 什么是在服务器端生成应用程序专用访问令牌的最好和最安全的方法? 我听说过关于MD5散列的一些东西…我应该在API调用中只使用这个新生成的访问令牌,而不是使用任何的Facebook的凭据? 或者我应该使用Facebook的凭据,并将其保存在服务器/客户端? 我将在我的应用程序的服务器端使用Java App-engine。

3.如果用户在Facebook上删除了自己的帐户,该怎么办? 应用程序将如何知道这个? 如果它知道它,它应该怎样处理帐户?

  1. 我应该定期检查Facebook上的访问令牌吗? 为什么以及如何和多久?

我不知道我是否在正确的地方问。 如果我错了,请将我的方式redirect到我应该去的地方,或许是关于这些最佳做法的链接? 到目前为止,我还没有发现任何可以回答我所有问题的东西。 我想这是编码和安全相关的。 感谢您的所有提示和技巧。

Solutions Collecting From Web of "最佳实践(最适合Android):使用Facebook或Googleloginauthentication用户"

经过一番阅读和问我已经来到这个:

1.是的,如果您希望用户使用他们的Facebook或Google帐户注册,请致电API,获取电子邮件地址(使用Google的Android帐户pipe理器更容易),将其发送到您的服务器将保存电子邮件地址,关联一个用户ID并生成它自己的访问代码。 访问代码将被发送回您的客户端应用程序,以便以后使用。 每当用户想要做一些操作,服务器API将被调用用户的电子邮件地址和访问代码,你可以确定它确实是用户。 从外部调用API并猜测电子邮件地址和访问代码是非常困难的,所以它是比较安全的。

2.由于Facebook的login只是用来validation用户身份,也就是说只validation用户是否存在并拥有一个账号,所以我们实际上并不需要FB的accessToken。 我们只需要FB accessToken用于Facebook服务器的API调用,例如当我们想要检索用户的朋友列表时。 在这种情况下,您可以获取Facebook SDK提供的活动会话,并从那里获取accessToken。

这件事情再次很简单。 如果您只使用Facebooklogin来validation用户,那么您将不在乎用户是否将来删除了自己的帐户。 第一次login后,你保存他的电子邮件地址,可能是一张图片,不再关心他的Facebook的个人资料。 如果您使用Facebooklogin获取好友列表等,则无论如何都不会将此类数据保留在本地存储中,因此只要用户删除了自己的帐户,他也会丢失好友列表。 或者,您可以保留自己的好友列表,并在每次使用您的应用程序时尝试更新该好友列表,并且一旦他删除了自己的帐户,好友列表就会停止更新,同样也是由用户决定不要使用Facebook帐户。 最后的想法宁愿适合游戏应用的使用情况….只是一个想法,没有任何官方接受的最好的。

  • 1&2

您可以通过多种方式来完成这个任务,并且由您来实现,您可以从每次login时收到您的电子邮件,并将其保存为数据库中的用户。 然后,对于任何login的用户都可以通过并散列返回的电子邮件,并检查该散列是否已经存在。

您也可以让用户使用服务login,然后使用用户名,电子邮件密码等完成用户创build。然后,当您尝试使用差异服务login时,您可以通过再次注册使用已有的服务帐户button,以及如果您尝试创build相同的帐户两次链接到一个帐户。

将关联的令牌保存在链接到用户的第三方login令牌表中。

我推荐散列所有用户的私人数据,让用户更加信任你的应用程序

  • 3

我不喜欢依靠第三方账户,并相信“完成创build您的账户”过程将创build更好的账户pipe理。 允许用户使用第三方或用户名和密码login。