如何使用Facebook验证我的移动应用及其服务器?
我想要的行为很简单:
- 用户启动应用程序。
- 系统提示用户输入他们的Facebook用户名和密码。
- 登录成功后,用户就可以在应用程序和网络服务器上进行身份验证。此时,服务器上会有一个与Facebook ID关联的用户。之后所有的HTTP请求都会带有一个在网络服务器上经过身份验证的cookie。
不过,从我看来,这种行为有几个问题。
关于Facebook
根据服务条款,你不能通过编程方式登录;用户必须通过Facebook网站或SDK进行登录,这两个方式都是需要用户互动的。因此,我不能创建自己的表单,把用户名和密码传给我的网络服务器,在那里登录并返回成功的cookie。
安全性
如果用户通过应用程序登录,他们只是在应用程序中被认证。虽然可以把Facebook ID传给我的网络服务器,但考虑到查找用户的Facebook ID是多么简单,这样很容易就能伪造服务器。我考虑过在应用程序中自动生成一个密码,但这只是缩短了伪造的时间窗口,并没有完全解决问题。
(安全性对我的项目来说其实不是大问题,但我不想留下这么明显的漏洞。)
我的技术栈是iOS 3.0以上的移动应用程序和Google App Engine作为服务器,运行的是修改过的Django。
我想出的解决方案,应该可以绕过这些限制,步骤如下:
- 用户启动应用程序。
- 应用程序检查当前设置的cookie是否在服务器上经过身份验证。
- 如果没有,就通过URL方案打开Safari,跳转到网络服务器上的实际页面,并提供通过Facebook登录的选项(或者我以后添加的其他认证系统)。
- 用户进行身份验证,服务器创建与Facebook ID关联的用户(如果需要的话)。
- 成功登录后,服务器会重定向到一个页面,调用移动应用程序的URL方案,并将cookie ID作为参数传递。
- 成功了吗?
所以,我的问题是:我这样做对吗?我的假设有错吗?
1 个回答
-1
你可以试试使用OAuth框架。