2013-01-24 126 views
0

我正在使用spring-security-facebook:0.10.4在我们的Grails应用程序中集成SSO的Facebook身份验证。我们的要求之一是允许用户打开或关闭SSO(通过我们的应用程序的一些控制)。如果它已打开,那么我们希望使用spring-security-facebook筛选器进行身份验证。如果我们的应用程序关闭了SSO,我们希望使用默认的Spring安全筛选器进行身份验证(无论是否存在Facebook cookie /身份验证令牌)。Grails spring-security-facebook插件 - 自定义客户端身份验证

我不确定如何配置spring-security-facebook插件以允许此用例。现在,我有基于透明cookie的授权(FacebookAuthCookieTransparentFilter)工作,并且效果很好。问题在于它会尝试通过Facebook在每个页面上进行身份验证。我看不到一种可以控制此功能的方式,因此我可以检查用户是否在我们的应用中打开了SSO,并且只有在启用了SSO的情况下才使用Facebook身份验证过滤器。

我在想我必须使用基于手动Cookie的授权(FacebookAuthCookieDirectFilter),但我不知道如何配置它。文档(位于... http://splix.github.com/grails-spring-security-facebook/guide/3%20Usage.html#3.4%20Client%20Side%20Authorization)说...“与FacebookAuthCookieTransparentFilter相同,它解析Facebook cookie,但仅用于指定的URL。像来自spring-security-core或类似的用户名/密码过滤器。成功授权后,它可以重定向用户指定的网址。“

是基于手动cookie的授权是否符合我的要求?如何将其配置为仅适用于在我们的应用中打开SSO的用户?如何将其配置为“...将用户重定向到指定的网址”?

回答

0

FacebookAuthCookieDirectFilter仅将基于cookie的授权应用于指定的URL。这个URL被配置在grails.plugins.springsecurity.facebook.filter.processUrl,默认情况下它是/j_spring_security_facebook_check

首先,你应该配置插件使用facebookAuthCookieDirectFilter,加入到Config.groovy

grails.plugins.springsecurity.facebook.filter.type='cookieDirect'

然后使用Facebook的Javascript SDK,登录用户在客户端。在授权重定向用户/j_spring_security_facebook_check,如:

<facebookAuth:init> 
    FB.Event.subscribe('auth.login', function() { 
     window.location.href = '/j_spring_security_facebook_check' 
    }); 
</facebookAuth:init> 

<g:javascript> 
    $('#fbloginbutton').click(function() { 
     FB.login(); 
    }); 
</g:javascript> 
+0

好,我得到它的工作。谢谢伊戈尔! – aschune

+0

这对第一次从我的应用程序登录Facebook非常有用。但是,如果我已经在另一个选项卡上登录到Facebook,然后转到我的应用程序,然后单击facebookAuth:connect按钮... Facebook身份验证窗口闪烁,但我的应用程序不执行任何操作。在这种情况下(?)看起来auth.login事件没有被触发。你见过这个问题吗?我不知道这是一个Facebook的错误,或者我需要在我的JavaScript代码。 – aschune

+0

是的,有时会发生。您也可以点击FB.getLoginStatus类,请参阅https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/ –