Facebook通过强制门户登录iOS设备

时间:2015-04-14 15:33:11

标签: ios facebook authentication captivenetwork

我正在开发一个强制门户网站实施,它将使用Facebook来验证用户身份。用户必须能够登录到Facebook才能获得身份验证并自由访问互联网。除非用户进行身份验证,否则他们必须无法自由浏览Facebook(或任何其他网站)。我正在使用javascript sdk。

我在iOS设备上遇到此流程时出现问题。连接到ssid时的iOS设备会启动没有cookie和会话的伪浏览器。在此页面上,用户可以点击"通过Facebook连接"。这将打开oauth登录对话框。以下是如何实现这一目标的代码片段: document.location =" https://www.facebook.com/dialog/oauth?client_id=" +         WF_FB_APP_ID +"& response_type = token& scope = public_profile,email,user_birthday& redirect_uri =" +         encodeURIComponent方法(document.location.href);

当用户输入电子邮件和密码时,不会对用户进行身份验证,而是返回错误代码:200,错误说明"权限错误"和错误原因"用户被拒绝"并重定向到safari,用户需要再次输入凭据。此时,输入相同的凭据可以正常工作,用户可以访问互联网。

我想知道为什么信用证第一次不起作用,为什么重定向到safari。 Andriod和Windows设备没有这个问题,因为用户需要打开浏览器并通过Facebook登录进程在浏览器中正常工作。

有什么建议我可以试试吗?我在云中使用Meraki AP,并将所有可能的facebook域放在带围墙的花园入口中。我试过谷歌搜索这个场景但没有用。任何帮助或建议尝试将非常感激。

1 个答案:

答案 0 :(得分:4)

我意识到这是一个旧线程,但我们遇到了同样的问题。 Facebook登录对话框将出现在强制门户窗口中,但是一旦您点击登录,强制门户窗口就会关闭,Facebook会在普通浏览器中打开,提示您再次登录。

经过几个小时的撕裂我的头发后,我找出了实际发生的事情。我们使用运行openwrt的openmesh AP。这些设备动态地将带壁花园配置中的域的ip地址添加到iptables,作为对这些域的请求。我还没有完全了解它,但是白名单中的一些CDN网络域似乎允许访问iOS用于互联网检查访问的域的IP地址。

一旦我从围墙花园列表中删除了对akamaiedge.net,akamai.net,akamaitechnologies.com和cdnjs.cloudflare.com的引用,一切正常。完整的端到端Facebook登录和重定向回到我们的登录页面仍然在强制门户网站内。

我们实际上在Android和任何引用gstatic.com域的内容上发现了同样的问题。 Android使用connectivitycheck.gstatic.com,如果您列出了像maps.gstatic.com或fonts.gstatic.com这样的白名单,那么Android强制网络门户会在您的目标网页加载之前自动关闭。

正如我所说,欣赏它是一个旧线程,但认为这可能对其他人发现自己有帮助。

干杯