我正在嘗試將Facebook OAuth2身份驗證與自己的OAuth2服務器進行集成。只是要清楚的情況如下:與自己的OAuth2彈簧服務器進行外部OAuth2集成
- 我有一個OAuth2服務器負責認證我們的用戶。我實現了一個自定義的AuthenticationProvider,用於檢查提供的憑據,如果成功則構建一個UserDetails對象。
- 我也有一個rest-api,它也是一個ResourceServer(運行在不同的應用程序中)。所以用戶在通過認證後可以訪問我們的rest-api,從而提供令牌。
令牌信息是使用JDBC共享的。
一切工作正常,但現在我想添加Facebook等外部身份驗證提供程序。
我的問題是:什麼是最好的方法來做到這一點?期望的流量是多少?
- 用戶與Facebook認證
- 的Facebook提供了一個令牌
- 用戶將令牌發送到我們的OAuth2服務器
- 我檢查與Facebook令牌有效期:從我的頭頂像我想象的東西
- 我使用身份驗證提供程序對用戶進行身份驗證
- 服務器通過我的OAuth2服務器發出的新令牌返回給用戶,用戶將從現在開始使用該令牌來請求資源
這是正確的嗎?如果是這樣,我怎樣才能將facebook令牌發送到我的OAuth2服務器?有沒有某種標準?我應該爲此制定新的參數嗎?例如,我將需要一些方法來區分facebook用戶名和密碼。
我想用我自己的AuthenticationProvider來驗證這個Facebook用戶嗎?看起來很奇怪,然後返回一個沒有密碼的UserDetails對象...
另外,如何註冊用戶並自動登錄?我是否必須公開我自己的端點,或者是否有一些OAuth2的魔力?
有什麼想法?
謝謝回答。我的問題是更多關於如何讓我的OAuth2服務器知道Facebook登錄。在客戶端方面與Facebook的互動我明白它是如何工作的。例如,我們的主要Web應用程序不使用OAuth2服務器。我們驗證令牌並登錄客戶端。但是現在我們有一個OAuth2服務器,它一定是不同的。我的問題是如何做到的。 – rpvilao 2015-02-11 16:50:36
您從Facebook獲取令牌,您可以檢查訪問令牌並驗證您的app_id,is_valid,user_id等等,並在用戶表中創建該「用戶」。如果您需要對Facebook做任何事情,請將該令牌存儲在您的數據庫中。一旦檢查到令牌並且它是數據庫中的有效用戶,您將通過OAuth服務器生成一個新令牌並將其鏈接到您的用戶。您將使用您爲API調用生成的此令牌,如果您需要對FB進行任何API調用,請從數據庫中獲取Facebook。您的令牌可以用來確定用戶的權限。 – 2015-02-11 17:22:35
好的。並且app/web/etc與我的auth服務器之間的通信也是對/ oauth/token的調用?如果是,我應該使用什麼參數。這是我現在主要關心的問題。有沒有什麼標準的要求呢,還是應該在服務器上創建一個並處理它?另外,我的AuthenticationProvider期待一些內部結構由spring oauth2提供... – rpvilao 2015-02-11 20:48:59