2015-06-24 71 views
0

Spring Social的社交登錄功能似乎是圍繞獲取可用於向提供商的社交API請求的令牌構建的。我有興趣將它用於OAuth2身份驗證,而不向提供者的API發出請求。 Spring Social是否執行完整的OAuth2身份驗證(適用於OAuth2提供程序)?我的意思是,它是否驗證從提供程序返回的OAuth2請求?春季社交登錄可以用於身份驗證嗎?

因此,例如,調用ConnectionSignUp.execute(Connection<?>)方法時,我們是否知道用戶已成功通過提供程序進行身份驗證?

如果是這樣,源代碼中的哪個位置驗證了驗證?

回答

2

我不確定我是否理解這個問題,但讓我試着回答。

OAuth流程要求用戶在可以授權應用程序之前和應用程序可以接收令牌之前對提供程序進行身份驗證。如果用戶沒有對提供者進行身份驗證,提供者應在提示授權之前對其進行身份驗證。因此,由於流程成功完成並且應用程序接收到訪問令牌,因此可以安全地假定用戶通過提供者進行了身份驗證。

你說你想要認證而不向提供者的API提出請求。不幸的是,這在任何形式的OAuth流程中都是不可能的。身份驗證代碼,隱式和密碼授權都需要與提供者進行交互。 (我猜隱式授予不一定直接處理API,因爲它直接響應授權而接收令牌。)

在任何情況下,Spring Social在授權後執行的第一件事是轉身並獲取用戶詳細信息並使用唯一的用戶標識來執行認證。這在每個提供者實現的API適配器中(例如,FacebookAdapter:https://github.com/spring-projects/spring-social-facebook/blob/master/spring-social-facebook/src/main/java/org/springframework/social/facebook/connect/FacebookAdapter.java)。無需返回提供者並獲取用戶詳細信息,就無法確定所接收的訪問令牌是否有效。

+0

感謝克雷格的解釋。使用[OAuth規範概述](https://tools.ietf.org/html/rfc6749#section-1.2),我們何時可以確保C&D的步驟已完成?另外,我的意思是不向提供者的API提出請求,如果我只用它來進行身份驗證,我們會忽略步驟E&F? –

+0

我想我的問題的核心是,我們可以使用Spring Social來授權用戶連接到授權服務器而不關心資源服務器嗎? (儘管有一個方面我們可能需要至少一個來自資源服務器的電子郵件地址)。 –