我一直在网站上使用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 App中集成了phonegap-facebook-plugin。
我可以在设备中成功登录Facebook,但我无法在移动端检索signedRequest。
正如这个帖子暗示JS SDK getLoginStatus doesn't return userID nor signedRequest,在这种情况下可能无法获得signedRequest。
但是,我在移动端有userId和access_token,这是我需要(我认为)获取用户信息的全部内容。 我可以在spring-security-facebook grails插件中使用此信息对用户进行身份验证吗? (FacebookAuthRedirectFilter使用我没有的'代码')
这里有另一个调整,因为如果用户通过公共网站连接并且用户从移动设备连接,则access_token是不同的。该插件存储一个,我不确定它可能带来什么影响。
非常感谢!
答案 0 :(得分:1)
我认为您应该进行身份验证(我相信Android可以做到这一点)并向服务器提供身份验证令牌(AJAX调用)。
但是这个插件并没有真正支持它的问题。插件为此目的具有FacebookAuthDirectFilter
过滤器(但未经过测试且未记录)。
此过滤器目前仅接受Signed Request作为名为signedRequest
的参数。顺便说一下,下一个版本它将支持Access Token作为参数。