我正在使用Facebook和Google选项开发一个用于登录的应用程序,以及经典的电子邮件+密码登录。我正在抓住自己想知道有关使用第三方API登录的几件事情:
1。 由于一个用户可以使用他的Facebook帐户登录,然后决定退出并使用他的Google帐户登录,因此用户应该通过他的电子邮件地址进行识别。因此,每当他使用其他帐户登录时,都会在数据库中搜索电子邮件地址,如果找到,则会将此新登录信息附加到之前创建的帐户。请批准这一点。
2。 如果用户使用Facebook登录登录,您可以获得accessToken,userId,用户电子邮件等。对用户进行身份验证的最佳做法是什么,以便它仍然是最安全的方式?我应该将他的facebook accessToken和电子邮件地址直接发送到服务器吗?如果服务器检查Facebook,Facebook上是否确实存在accessToken? 在服务器端生成应用程序专用访问令牌的最佳和最安全的方法是什么?我听说过有关MD5哈希的内容......我是否应该在API调用中仅使用这个新生成的访问令牌而不使用任何facebook凭据?或者我应该使用Facebook凭据,从而将它们保存在服务器/客户端? 我将在我的应用程序的服务器端使用Java App-engine。
3。 如果用户在Facebook上删除了他的帐户怎么办?该应用程序将如何知道这一点?如果它知道它,该怎么办?
我不确定我是否在正确的地方提问。如果我错了,请以我应该去的方式重定向我,也许这些最佳实践的一些链接?到目前为止,我还没有发现任何可以回答我所有问题的内容。我想这与编码和安全相关。 感谢您提供的所有提示和技巧。
答案 0 :(得分:11)
经过一番阅读并询问我是否已达到此目的:
1。 是的,如果您希望您的用户使用他们的Facebook或Google帐户注册,您可以调用API,获取电子邮件地址(使用Android上的Google AccountManager更加容易),将其发送到您的服务器,这将节省电子邮件地址,关联用户ID并生成自己的访问代码。访问代码将被发送回您的客户端应用程序以存储它以供以后使用。每当用户想要进行某些操作时,将使用用户的电子邮件地址和访问代码调用服务器API,您可以确定它确实是用户。从外部调用API并且正确地猜测电子邮件地址和访问代码是非常困难的,因此它有点安全。
2。 由于Facebook登录仅用于验证用户,这意味着仅验证用户是否存在并且拥有帐户,因此我们实际上不需要FB accessToken。我们需要FB accessToken仅用于Facebook服务器的API调用,因此例如当我们想要检索用户朋友列表等时。在这种情况下,您可以获取Facebook SDK提供的活动会话,并从那里获取accessToken。
3。 这种情况再次非常简单。 如果您仅使用Facebook登录来验证用户身份,则无论用户以后是否删除其帐户,您都不在乎。首次登录后,您保存他的电子邮件地址,可能是图片,不再关心他的Facebook个人资料。 如果您使用Facebook登录获取朋友列表等,则无论如何都不会将此类数据保留在本地存储中,因此一旦用户删除了他的帐户,他也会丢失他的朋友列表。或者,您可以保留他的好友列表并尝试在每次使用您的应用时更新它,并且一旦他删除了他的帐户,该好友列表就会停止更新,并且再次由您的用户决定不使用Facebook帐户。最后一个想法更适合游戏应用程序使用案例....只是一个想法,而不是任何官方认为最好的。
答案 1 :(得分:1)
您可以通过多种方式执行此操作,并且由您实施,您可以从每个登录哈希中收到您的电子邮件,并将其保存为数据库中的用户。然后对于登录的任何用户都可以浏览并散列返回的电子邮件并检查该散列是否已存在。
您还可以让用户使用服务登录,然后让他们使用用户名,电子邮件密码等完成用户创建。然后当您尝试使用差异服务登录时,您可以通过I再次注册已经有一个帐户按钮,如果您尝试创建两次相同的帐户,也可以链接到帐户。
保存链接到用户的第三方登录令牌表中关联的令牌。
我建议散列所有用户私有数据,让用户对您的应用更加信任
我从不喜欢依赖第三方帐户,并且相信"完成创建帐户"流程将创建更好的帐户管理。允许用户使用第三方或用户名和密码登录。