2013-01-24 166 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/ –