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

1 authentication facebook ios captivenetwork

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

我在 iOS 设备上遇到此流程的问题。iOS 设备在连接到 ssid 时会显示没有 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(文档.location.href);

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

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

有什么建议可以尝试吗?我在云中使用 Meraki AP,并将所有可能的 facebook 域放在围墙花园条目中。我试过谷歌搜索这个场景,但无济于事。任何帮助或建议尝试将不胜感激。

小智 5

我意识到这是一个旧线程,但我们只是遇到了可能相同的问题。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 强制门户会在您的登录页面加载之前自动关闭。

正如我所说,感谢这是一个旧线程,但认为这可能对其他人在这里找到自己有所帮助。

干杯