使用Facebook登录 + 自定义API - 适用于iOS应用程序

3
假设我有一个iOS应用程序,它依赖于自定义REST API进行帐户管理(注册、登录、密码重置、获取/设置用户相关数据)等事项。
假设我想添加一个“使用Facebook登录/注册”的按钮,以便我们的用户不必填写乏味的注册表格。
我的数据库仍将包含这些用户,但它们将没有用户名/密码哈希/电子邮件,它们只与由Facebook iOS SDK在应用内Facebook登录后返回的“Facebook用户ID”相关联。
因此,我的API将具有这样的调用:

http://www.myapi.com/create_user_with_facebook?facebook_user_id=XXXXX

好的,不完全准确,它不会是一个GET请求等等,但你明白我的意思。

我担心的是任何人都可以调用该API并使用任何公开可用的Facebook用户ID创建此类帐户,即使这些ID不属于他们。没有数据会有危险或其他什么问题,但当该Facebook账户的合法所有者尝试使用该应用程序时,该应用程序将说“不,抱歉,此Facebook账户似乎已与现有应用程序账户关联!”

我不知道如何保护我们的平台免受这种“攻击”的影响。

(该API仍将允许传统方式注册帐户或将现有帐户与Facebook帐户同步-就像现在许多应用程序一样)

非常感谢您对解决此问题应采取的方向提供的任何帮助!


1
使用从Facebook登录获取的访问令牌,调用FB API请求用户的基本信息(/me)。 - CBroe
2个回答

1
在这种情况下,您可以将应用程序成功登录Facebook后获得的访问令牌发送到您的自定义API。然后,API将使用以下URL调用Facebook以获取用户的电子邮件ID -
https://graph.facebook.com/v2.2/me?fields=email&access_token=ACCESS_TOKEN

你的API将会检查电子邮件地址是否已经存在于用户表中。如果存在,则发送成功登录消息给应用程序,如果不存在,则可以创建一个新条目并允许用户注册,或者只是发送一个错误消息。

1
如果有人可以访问你的API(例如,我可以使用他人的电子邮件地址调用你的API并创建新帐户),那么任何人都可以使用相同的方法。因此,这不是一个“Facebook”问题。解决方案是,如果您不希望随机人员直接访问API,请确保其安全性。

但是在移动设备上,没有真正的方法来保护API访问,对吧?没有办法保证它是我的应用程序在调用。根据我所了解的,使用Oauth2和类似的方法,在代码中使用密钥/密码也可以被反向工程破解,只有我的移动代码才能访问我的API代码,这种情况是不可能的。我唯一能做的就是设计API会话/令牌/用户等功能,以便即使是另一个恶意应用程序使用它,也很难造成太大的危害。无论如何,我不是专家。 - MikaelW
也许保护第一个“API注册调用”免受大规模滥用的解决方案是在注册表单中包含经服务器验证的移动友好型验证码。所有后续的API调用都受到会话令牌的保护,并且每个用户的API调用计数也受到监控。你觉得呢? - MikaelW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接