簡體   English   中英

OAuth2用於自定義API

[英]OAuth2 for custom API

我正在嘗試將OAuth2用於我正在創建的API,但可以使用一些解釋流程如何工作。 我發現了類似的問題(例如: 使用OAuth保護我的REST API,同時仍然允許通過第三方OAuth提供商進行身份驗證(使用DotNetOpenAuth) )但是他們沒有說明第三方登錄的問題。

我不希望使用OpenID(但是,無論如何),特別是當通過委派進行身份驗證可能正常工作時。 它似乎過於復雜,並沒有很多支持良好的庫。 (我正在使用PHP + Laravel 4)

問題分為4個(ish)實體:

  • 資源所有者 - 最終用戶
  • 客戶端 - 瀏覽器(我的網站),移動應用程序或類似的
  • 授權服務器 - 我的OAuth2服務器
  • 資源服務器 - 我的API。 提供用戶數據。

我想我已經找到了用戶在我的auth服務器上創建帳戶並使用該帳戶登錄時的流程:

  1. 用戶在客戶端填寫用戶名/密碼。
  2. 客戶端使用資源所有者流連接到Auth服務器,對用戶進行身份驗證,並自動授權客戶端。
  3. 用戶將從AUth服務器重定向回客戶端,並使用包含用戶ID的令牌+簽名JWT。
  4. 客戶端將令牌保存在會話中。
  5. 客戶端使用令牌+簽名的JWT用戶ID從資源服務器請求數據。
  6. 資源服務器驗證JWT並根據令牌范圍返回數據。

我還沒有測試過工作流程,但這看起來似乎有效。 但是,第三方登錄已證明更加困難。 這是我到目前為止所得到的:

  1. 用戶點擊Google / Facebook / LinkedIn登錄。
  2. 用戶從客戶端重定向到Google的Auth服務器(不是我的)。
  3. 用戶使用user / pass登錄並授權客戶端獲取某些受保護資源(userinfo.email) - 這通過委派對用戶進行身份驗證。
  4. 用戶被重定向回客戶端,使用包含Google用戶ID的令牌+簽名JWT。
  5. 客戶驗證JWT。
  6. 客戶端使用客戶端憑據流連接到資源服務器。 收到一個新令牌。
  7. 客戶端將令牌保存在會話中。
  8. 客戶端請求將Google用戶ID轉換為應用程序用戶ID。 (此連接是在注冊期間進行的。)
  9. Resource Server返回應用程序用戶標識。 (簽名JWT)
  10. 客戶端使用令牌+簽名的JWT用戶ID從資源服務器請求數據。
  11. 資源服務器驗證JWT並根據令牌范圍返回數據。

這可能有用,但感覺非常復雜。 當然必須有一種方法可以跳過這些步驟中的一些步驟? 我對第8-10步特別感興趣。 據我所知,用戶永遠不必使用第三方登錄與我的Auth服務器進行交互。 問題是如何最好地將Google / Facebook / LinkedIn中成功的id_token(或其他內容)連接到我的API上的“帳戶”資源。

現在,我並不擔心任何其他客戶端連接到API,但它會在未來的某個時間發生。

“據我所知,用戶永遠不必使用第三方登錄與我的Auth服務器進行交互。” 這只是部分正確。 從理論上講,您可以使用第三方登錄的令牌作為您自己的令牌。 因此,正常的資源請求將是:

  1. 客戶端請求資源 - 發送令牌(來自第三方)和登錄類型(facebook / google / etc)
  2. 服務器通過使用第三方授權服務器檢查令牌來驗證請求並返回數據。

不利的一面是,每次發出請求時,您的API服務器都必須與第三方服務器通信(無論是否需要來自它們的數據)。 相反,當您生成自己的令牌時,您可以獲得更多控制權,並且驗證請求更加簡單。

我會堅持你的工作流程。 我做了類似的事情,我的步驟幾乎相同。 在“計算”步驟時,您還必須考慮,對於步驟2-4,您基本上不得不做任何事情,因為Google,Facebook和co已經做得很好;)

對你的問題的后期貢獻。

找到此資源,解釋了在8個步驟中使用OAuth2: OAuth2的過程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM