2013-02-12 109 views
4

我在我的api中使用了spring framework和REST architecutre。目前,我通過在每次通話時發送用戶名和密碼來驗證我的REST通話。用戶存儲在我的數據庫中。使用Facebook登錄並使用oauth 2.0進行REST API調用認證

現在我打算使用oauth 2.0訪問我的受保護資源,並且計劃使用Facebook登錄作爲身份驗證機制。

我已閱讀關於spring-security-oauth2並已在一個小例子中實現它工作正常。

我已閱讀關於春季社交,也已實施它,並可以訪問Facebook的API。

現在我想知道的是我如何登錄Facebook,然後使用oauth 2.0來保護我的 資源。

任何幫助將深表謝意。

+0

你有什麼麻煩 – smk 2013-02-12 18:26:17

+0

@SajitKunnumkal使用Facebook API給我Facebook訪問令牌,而使用oauth 2.0進行身份驗證需要使用oauth 2.0生成的令牌。現在我很困惑我該如何使用Facebook訪問令牌來驗證對我的api受保護資源的請求。 – khobab 2013-02-13 08:02:45

回答

3

您不想使用Facebook發佈的訪問令牌來保護自己的資源。 Facebook令牌代表您的應用程序,Facebook和您的用戶之間的三方協議。如果您想使用OAuth來保護您自己的資源,那麼這些資源的使用者,您的服務器以及在您的服務器上擁有這些資源的用戶之間的協議完全不同。您可以這樣想:當您使用Facebook的API時,您的應用程序(A)是消費者,Facebook(FB)是提供商,並且有一個共同用戶(U1)將這些加入到一起。但是當某人在服務器上消耗資源時,則應用程序(A)扮演提供者的角色,其他應用程序(X)是消費者,並且有一個共同用戶(U2)將這些用戶聯合在一起。它可能是同一個人(例如U1 == U2),它們都同意這兩種情況下的安排,但提供者和消費者的角色已經發生了變化。

我想可能有辦法讓OAuth的Spring Security發佈Facebook發佈的相同訪問令牌,但這不是一個好主意。

+0

所以我想登錄到我的oauth通過Facebook登錄保護API,我怎麼能實現呢? – khobab 2013-02-13 15:09:28

+2

這裏通常做的是你的用戶通過Facebook向你的應用程序的面向人類的HTML前端進行身份驗證。這將導致Facebook發佈一個訪問令牌,用於對用戶進行身份驗證。 Spring Social的ProviderSignInController或SocialAuthenticationFilter可以在那裏幫助。一旦對您的應用程序進行身份驗證,他們就會授權您的API的某個客戶端代表他們訪問API。這會導致S2OAuth向客戶端發出訪問令牌。 – 2013-02-14 16:50:08

+1

這種方法的一個常見例子(不一定使用Spring Social或S2OAuth)是Foursquare。您可以通過Facebook登錄Foursquare。而且您可以授權其他一些客戶代表您訪問Foursquare。但那些是2個不同的授權和2個差異。正在達成協議。使用Spring的這種方法的另一個例子是Greenhouse(https://github.com/SpringSource/greenhouse)。 – 2013-02-14 16:54:02