0

我一直在网站中使用 spring-security-facebook grails 插件,它就像一个魅力。

事实上,它运行得非常好,我不必深入研究它是如何工作的,这可能就是我现在陷入困境的原因。

我有一个公开 json REST API 的 webapp。可以使用用户/密码或使用 facebook 凭据来完成身份验证,为此我一直在使用这个插件。我只需要身份验证和用户的电子邮件。为此,我一直在使用重定向过滤器(FacebookAuthRedirectFilter)。它在这种情况下完美运行。

现在我正在尝试使用 phonegap 构建一个移动应用程序,所以我的移动应用程序纯粹是 html、js 和 css,并且希望使用 AJAX 请求与同一个 webapp 进行交互。

问题出现了,因为在移动应用程序上下文中,html 文件是本地的(并且它们需要这样),因为它们与应用程序捆绑在一起。

我的问题是在这种情况下如何验证用户身份?

如果我保持原样,在成功登录后,移动应用程序将被重定向到 webapp 的域,并且将停止获取本地 html 文件,这不是我想要的。

我想我需要某种客户端身份验证,然后向我的 webapp 发送一个 AJAX 请求,以某种方式添加 facebook cookie,因此对 webapp 的后续 AJAX 请求已经过身份验证。

但我可能完全错了,应该以不同的方式完成。

任何帮助都会非常感激。

(如果不清楚,我可以详细说明或添加任何说明,请问)。

编辑

经过 Igor 的建议后,我对插件进行了一些更改,以使用 FacebookAuthDirectFilter 来测试 signedRequest 方法,并且我还在我的 phonegap 应用程序中集成了 phonegap-facebook-plugin。

我可以在设备中成功登录 facebook,但无法在移动端检索已签名的请求。

由于该线程建议JS SDK getLoginStatus 不返回 userID 或 signedRequest,因此在这种情况下可能无法获取 signedRequest。

但是,我在移动端有 userId 和 access_token,这是我所需要的(我认为)来获取用户信息。我可以在 spring-security-facebook grails 插件中使用此信息对用户进行身份验证吗?(FacebookAuthRedirectFilter 使用我没有的“代码”)

这里还有另一个调整,因为如果用户通过公共网站连接,如果用户通过手机连接,access_token 是不同的。该插件存储一个,我不确定它可能有什么影响。

多谢!

4

1 回答 1

1

我认为你应该在你身边进行身份验证(我相信 Android 可以做到这一点)并向服务器提供身份验证令牌(AJAX 调用)。

但问题是插件目前并不真正支持它。插件FacebookAuthDirectFilter为此目的有过滤器(但它没有经过测试,也没有记录)。

此过滤器当前仅接受签名请求作为名为 的参数signedRequest。顺便说一句,下一个版本将支持访问令牌作为参数。

于 2013-01-25T05:08:17.820 回答