我正在尝试使用Facebook登录功能使用Javascript将用户注册到我的Web应用程序,然后将用户信息传递到应用程序的服务器端,现在我必须保存信息,以便稍后我可以登录用户,但它应该没有密码,我应该保存在我的应用程序的数据库而不是密码,以验证用户是真的他声称是谁,而不是其他人试图绕过我的安全?首先想到的是保存Facebook用户ID以对用户进行身份验证,但它听起来根本不安全,这是一个好主意还是一个坏主意?还有另一种表演我需要的吗?
答案 0 :(得分:4)
我建议在developers.facebook.com上关注Facebook的OAuth示例。
自从我完成任何OAuth工作以来已经有一段时间了,但从我记忆中,Facebook会对您指定的服务器执行回调。当Facebook调用此回调时,它们会为您提供访问令牌。然后,您可以使用此访问令牌获取有关用户的信息(即电子邮件,名字,姓氏)。
由您决定在调用此回调时要执行的操作。也许您获取用户的电子邮件,名字和姓氏,并在后端自动为用户创建一个帐户(如果该帐户不存在)。如果您找到了匹配的帐户(可能通过他们的电子邮件),那么只需登录(不需要为用户存储任何密码)。我不相信这种方法真的让人担心,因为Facebook提供了类似于用户的唯一访问令牌,然后您的服务器正在根据此访问令牌获取电子邮件。有人可以解决这个问题的唯一方法就是如果他们掌握了用户的访问令牌,这并不容易(假设您使用的是SSL)。
要确定是否有人使用Facebook或其他方法创建了帐户,我会在“用户”表格下创建一个列,用于指示此信息。
答案 1 :(得分:0)
我只是自己做了一些研究,因为我使用Javascript SDK实现了Facebook登录。
从Graph API 2.0开始,您不再收到用户的主ID ,但是a scoped id which is unique per app:
当人们第一次登录时,Facebook将开始发布应用范围的用户ID 进入针对API的v2.0编码的应用程序实例。同 应用范围的ID,同一用户的ID之间会有所不同 应用
请注意,这是向后兼容的:如果您有用户通过Graph API< 2.0然后他们仍然有主要的身份。
从安全的角度来看,事情稍有改变,因为外部人员似乎无法访问范围内的ID。这与任何人都可以公开获得的Facebook主要内容形成鲜明对比。
话虽这么说,我仍然不建议使用这个新的作用域id作为密码替换。