【问题标题】:Grails spring-security-facebook plugin - Customizing client-side authenticationGrails spring-security-facebook 插件 - 自定义客户端身份验证
【发布时间】:2013-01-08 13:26:32
【问题描述】:

我正在使用 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。”?

【问题讨论】:

    标签: facebook grails spring-security grails-plugin


    【解决方案1】:

    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>
    

    【讨论】:

    • 这非常适合第一次从我的应用程序登录 Facebook。但是,如果我已经在另一个选项卡上登录 Facebook,然后转到我的应用程序并单击 facebookAuth:connect 按钮... Facebook auth 窗口闪烁,但我的应用程序没有执行任何操作。在这种情况下,似乎没有触发 auth.login 事件(?)。你见过这个问题吗?我不知道这是 Facebook 的错误,还是我需要在我的 javascript 中编写代码。
    • 是的,有时会发生。您还可以在点击时对 FB.getLoginStatus 进行分类,请参阅developers.facebook.com/docs/reference/javascript/…
    猜你喜欢
    • 1970-01-01
    • 2013-11-13
    • 2014-04-20
    • 2014-12-13
    • 2013-12-16
    • 2011-12-17
    • 2016-08-05
    • 2020-12-05
    • 2015-04-27
    相关资源
    最近更新 更多