我使用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的用户?如何将其配置为“...将用户重定向到指定的网址。”?
答案 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>