簡體   English   中英

OAuth 2:分離資源服務器和授權服務器

[英]OAuth 2: separating resource server and authorization server

OAuth 2 規范讓我相信“資源服務器”和“授權服務器”不一定是同一個應用程序,但我正在努力弄清楚這在實踐中是如何實際實現的。

例如,假設存在以下應用程序:

  • 資源服務器
  • 授權服務器
  • 網絡前端
  • 第三方客戶端應用程序

場景 #1:登錄到 Web 前端

  • 用戶提交登錄表單
  • Web 應用程序將憑據發布到身份驗證服務器(grant_type=password)並接收一個 access_token
  • Web 應用程序將 access_token 存儲在會話中
  • 在每次后續請求時:
    • 從資源服務器獲取資源(在 Authorization 標頭中帶有 access_token)並將其呈現在 Web 前端
    • 如果我們得到 401 然后注銷用戶(從會話中刪除 access_token)

場景#2:授權第三方應用

  • 用戶從身份驗證服務請求授權
  • 顯示允許/拒絕表單
  • 用戶被重定向回客戶端應用程序,並提供授權代碼
  • 客戶端應用程序將代碼發布到身份驗證服務 (grant_type=authorization_code) 並接收一個 access_token
  • 客戶端從傳遞的資源服務器獲取資源(帶有 Auth 標頭)

我無法理解的部分是如何在場景 #2 中顯示允許/拒絕表單之前對用戶進行身份驗證。 用戶可能已登錄到主 Web 應用程序,但身份驗證服務對此一無所知,因此需要以某種方式再次對用戶進行身份驗證。 身份驗證服務是否也需要支持登錄/會話?

我想知道 Web 應用程序負責顯示允許/拒絕表單是否更有意義,原因有兩個:

  1. 它將所有 UI 保留在一個應用程序中
  2. 如果用戶已經登錄到 Web 應用程序,則不會強制用戶重新提交他或她的憑據

這是場景 #2 的一種可能替代方案:

  • 用戶從 Web 應用請求授權
  • 顯示允許/拒絕表單
  • Web 應用程序 POST 到身份驗證服務器以創建新授權,返回授權代碼
  • Web 應用程序重定向到存在授權代碼的客戶端應用程序
  • 客戶端應用程序將代碼發布到身份驗證服務並接收 access_token

處理這個問題的最佳方法是什么? 任何一般性評論、建議等都會很棒!

謝謝

OAauth2 框架文檔: https ://tools.ietf.org/html/rfc6749

(A) 客戶端通過與授權服務器進行身份驗證並提供授權許可來請求訪問令牌。

(B) 授權服務器對客戶端進行身份驗證並驗證授權授權,如果有效,則頒發訪問令牌和刷新令牌。

(C) 客戶端通過提供訪問令牌向資源服務器發出受保護的資源請求。

(D) 資源服務器驗證訪問令牌,如果有效,則為請求提供服務。

(E) 重復步驟 (C) 和 (D),直到訪問令牌過期。 如果客戶端知道訪問令牌已過期,則跳到步驟(G); 否則,它會發出另一個受保護的資源請求。

(F) 由於訪問令牌無效,資源服務器返回無效令牌錯誤。

(G) 客戶端通過與授權服務器進行身份驗證並提供刷新令牌來請求新的訪問令牌。 客戶端身份驗證要求基於客戶端類型和授權服務器策略。

(H) 授權服務器對客戶端進行身份驗證並驗證刷新令牌,如果有效,則頒發新的訪問令牌(以及可選的新刷新令牌)。

你的替代方案可能是你想要的:如果你真的想把你的流分開,你可以嘗試這樣的事情:

  1. 用戶使用 grant_type=code 代表服務向 auth 服務請求授權
  2. auth 服務實現用戶未登錄:使用請求參數重定向到 Web 應用程序,要求 Web 服務器將用戶發回。
  3. Web 應用程序存儲請求參數,然后要求輸入用戶名/密碼
  4. Web 應用程序將憑據發布到身份驗證服務器(grant_type=password)並接收一個 access_token。
  5. Web 應用程序將 access_token 存儲在會話中
  6. Web 應用程序生成一個簽名令牌,捕獲用戶 ID,並使用簽名令牌作為請求參數重定向回身份驗證服務
  7. 身份驗證服務解析簽名令牌,提取用戶 ID,顯示允許/拒絕表單
  8. 用戶被重定向回客戶端應用程序,並提供授權代碼
  9. 客戶端應用程序將代碼發布到身份驗證服務 (grant_type=authorization_code) 並接收一個 access_token
  10. 客戶端從傳遞的資源服務器獲取資源(帶有 Auth 標頭)

[http://alexbilbie.com/guide-to-oauth-2-grants/][1] 也嘗試訪問此內容以獲得更清晰的信息。

正如之前的作者所說,只有當您屬於 [SPA] 或移動應用程序屬於第一方時才使用密碼授權,例如直接登錄到 gmail。 GMAIL 是谷歌頁面/應用程序的一部分,

ii) 從授權服務器獲取令牌的代碼 [granttype=code] 應該從后端而不是從瀏覽器后端通道通信發生]

查看 OAUTH2 IN ACTION 書 - Manning 出版物,迄今為止關於 oauth2 的最佳文章之一

暫無
暫無

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

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