2016-06-28 59 views
3

我們有三種微服務:microA,microB & microC。如何構建Microservice和OpenID連接?

  • 毫安&微型B正在推動產品1
  • 毫安&的MicroC正在推動產品2.

顯然,我們需要一個安全層,在我們的情況下實施的「ID連接」供應商符合業務需求。我們將OpenID提供程序添加到堆棧中。

用戶/權限管理是很容易&自然:我們每個微服務的用戶的OpenID標識符對權利的一個子集相關聯:

例如在服務毫安,我們存儲用戶的OpenID XXX可以做到這一點。它在微服務級別被隔離。尊重我們語境的界限。精細。

當用戶在product1上使用OpenID登錄時,我們向用戶授予訪問令牌+ Id令牌。

當product1公開第三方使用的API時,情況就變得更加複雜。

現在,假設我的用戶來到第三方webapp並提示登錄&允許第三方獲得有關product1 API的一些權利。

如果我理解正確的OpenID連接,所有關於OAuth2的身份驗證,但我們如何處理經典的OAuth2範圍管理呢?

我發現,最好的情況是:

  1. 使整個ID連接到具有認證信息

  2. ,然後再拍全的OAuth2過程到另一個授權服務器要求用戶向第三方授予一些範圍?

這意味着在第三方:

  • 用戶將被提示登錄的OpenID提供
  • 然後重定向並提示是否接受範圍請求

這是正確的嗎?如果是,則OAuth2服務器流類似於對最終用戶的4個HTTP請求,因此執行兩次就像執行八個請求以完成Authentication + Authorization流。看起來太龐大了。

回答

1

我已經有這個問題。我會在你的情況下做的是:

  • 使用這個新的OpenId微服務來驗證用戶並創建訪問令牌。此訪問令牌可以是具有簽名權限,user_id和時間戳的字符串,也可以將此信息存儲在數據庫中。

  • 然後,每次調用(以產品1或產品2):

    • 我將迫使客戶端發送的訪問令牌上的標頭。
    • 然後,當微服務接收到一個調用(讓我們說product1)時,我會向OpenId Microservice發送一個簽名請求,詢問用戶是否被允許執行該操作。

這樣一來,就在的OpenID微服務知道如何驗證工作。因此,如果在幾個星期內你想改變認證的工作方式,你只需要在OpenId微服務中改變它。

我真的不明白第三方有什麼問題。他們將獲得該令牌,並且他們將能夠在Access-token頭部上執行傳遞呼叫。

+0

感謝您的反饋。 對於第三方來說,全部是關於請求特定範圍。 在你的例子中,OpenId微服務應該知道product1,product2(etc)的所有特定範圍。 因爲在登錄(請求訪問令牌)時,第三方可能需要某個產品的特定「正確」。 – ludofleury