2

我正在使用Facebook C#SDK在Facebook Connect和我的ASP.NET MVC 3網站之間實現單點登錄。Facebook連接(C#SDK) - 如何查看用戶是否已通過身份驗證,但不強制?

現在,在單點登錄的部分是:

如果用戶被驗證的Facebook,而不是我的網站,看看他們是否連接在我的系統,如果是,進行單點登錄(使用Forms Auth)。

現在,我不知道如何「看看用戶是否通過身份驗證」。我使用OAuth進行服務器端身份驗證,因此我不想強制他們通過登錄頁面進行登錄,只是進行無聲檢查。如果他們沒有通過身份驗證,我不會做任何事情 - 我只是等待他們點擊「連接Facebook」按鈕。

我們可以使用JavaScript API做到這一點 - 我們可以做到這一點的服務器端?

我基本上需要通過圖形API的等效FB.getLoginStatus

當然必須有辦法服務器端 - 至少如果不是通過圖形API,老REST API或FQL?

+0

這是有點hackish的,但你可以記錄JS API請求,並使用'HttpWebRequest'僞造它。 – PiZzL3 2011-04-01 01:39:11

+0

@ PizZL3 - 你不能,因爲你需要在項目中包含JS庫,這正是我試圖避免的。 – RPM1984 2011-04-01 02:17:01

+0

@Nathan Totten - 如果你在那裏,我會非常感謝你對這個問題的建議/想法 - 因爲沒有它,單一登錄是不可能的。 – RPM1984 2011-04-04 05:49:42

回答

0

描述後四處撒網,包括圖形API狩獵的日子裏,老REST API,FQL等 - 似乎JavaScript SDK是唯一一個在事先沒有訪問令牌的情況下允許此信息的人。

所以,我不得不使用JavaScript SDK:

<div id="fb-root"></div> 
<script type="text/javascript"> 
    window.fbAsyncInit = function() { 
     FB.init({ appId: 'xxxxxxx', status: true, cookie: false, xfbml: false 
     }); 
     FB.getLoginStatus(function (response) { 
      if (response.session) 
       window.location = '/Facebook/LogOn' 
     }); 
    }; 
    (function() { 
     var e = document.createElement('script'); 
     e.async = true; 
     e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
     document.getElementById('fb-root').appendChild(e); 
    }()); 
</script> 

基本上,我首先加載JS API aysynchonrously以避免阻塞。

我再查看,如果用戶擁有Facebook會話。如果他們這樣做,我重定向到我的FacebookController,OAuth重定向(它會直接返回與令牌 - 因爲他們已經auth'ed),然後設置我自己的cookie。

我的全球行動,過濾器,然後踢,看到有一個cookie,並記錄在尼斯的用戶。

注意:我怎麼有cookie: false - 這是因爲我跟蹤我自己的cookies爲OAuth令牌和FB ID。

+0

如果事先得到令牌,您可以分享使用什麼方法嗎?我似乎無法資助適當的文件。謝謝 – Basic 2011-11-09 01:26:40

+0

@Basiclife - 當他們第一次向FB(通過OAuth)進行身份驗證時,我將訪問令牌存儲在一個cookie中(該令牌的到期時間到期)。然後我在每個頁面的ViewBag中設置它,如果我需要訪問它。至於看到他們是否有* facebook *會話,我使用'FB.getLoginStatus',如上所述。這在每個頁面加載上運行。但在我重定向到Facebook之前,我確保用戶沒有被認證到我的網站。有很多不同的場景,但基本上就是這樣。 – RPM1984 2011-11-09 02:32:48

+0

感謝您的快速回復,我希望找到一個服務器端解決方案,但它似乎依賴於iframe來查看用戶是否有Cookie - 我無法複製。 – Basic 2011-11-09 02:55:48

相關問題