Grails spring-security-facebook插件 - 自定义客户端身份验证

时间:2013-01-24 17:33:53

标签: facebook grails spring-security grails-plugin

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

我不确定如何配置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或类似的用户名/密码过滤器。成功后授权它可以将用户重定向到指定的URL。“

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

1 个答案:

答案 0 :(得分:0)

FacebookAuthCookieDirectFilter仅将基于cookie的授权应用于指定的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>