如何使用Facebook验证我的移动应用及其服务器?

0 投票
1 回答
778 浏览
提问于 2025-04-16 12:51

我想要的行为很简单:

  1. 用户启动应用程序。
  2. 系统提示用户输入他们的Facebook用户名和密码。
  3. 登录成功后,用户就可以在应用程序和网络服务器上进行身份验证。此时,服务器上会有一个与Facebook ID关联的用户。之后所有的HTTP请求都会带有一个在网络服务器上经过身份验证的cookie。

不过,从我看来,这种行为有几个问题。

关于Facebook

根据服务条款,你不能通过编程方式登录;用户必须通过Facebook网站或SDK进行登录,这两个方式都是需要用户互动的。因此,我不能创建自己的表单,把用户名和密码传给我的网络服务器,在那里登录并返回成功的cookie。

安全性

如果用户通过应用程序登录,他们只是在应用程序中被认证。虽然可以把Facebook ID传给我的网络服务器,但考虑到查找用户的Facebook ID是多么简单,这样很容易就能伪造服务器。我考虑过在应用程序中自动生成一个密码,但这只是缩短了伪造的时间窗口,并没有完全解决问题。

(安全性对我的项目来说其实不是大问题,但我不想留下这么明显的漏洞。)


我的技术栈是iOS 3.0以上的移动应用程序和Google App Engine作为服务器,运行的是修改过的Django。

我想出的解决方案,应该可以绕过这些限制,步骤如下:

  1. 用户启动应用程序。
  2. 应用程序检查当前设置的cookie是否在服务器上经过身份验证。
  3. 如果没有,就通过URL方案打开Safari,跳转到网络服务器上的实际页面,并提供通过Facebook登录的选项(或者我以后添加的其他认证系统)。
  4. 用户进行身份验证,服务器创建与Facebook ID关联的用户(如果需要的话)。
  5. 成功登录后,服务器会重定向到一个页面,调用移动应用程序的URL方案,并将cookie ID作为参数传递。
  6. 成功了吗?

所以,我的问题是:我这样做对吗?我的假设有错吗?

1 个回答

-1

你可以试试使用OAuth框架。

撰写回答