0

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

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

我想我必须改用基于 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 的用户?如何将其配置为“……将用户重定向到指定的 url。”?

4

1 回答 1

0

FacebookAuthCookieDirectFilter 仅对指定的 URL 应用基于 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>
于 2013-01-26T05:33:38.550 回答