2016-05-13 70 views
1

我試圖建立golang多租戶架構,會有不同的服務,如Service-AService-B每個服務將在不同的服務器上運行,我想在認證單點登錄的用戶具有single sign-in解決方案並在所有提供的服務中獲得認證。在golang

就像什麼Amazon AWS or Google確實像它一樣Amazon Cloud FrontAmazon EC2Amazon S3許多不同的服務,所有的服務都是通過一個單一的登錄認證和log out from all connected services從一個服務結果註銷。

我想在golang實現這一點,到目前爲止,我發現Open-id Connectcoreos/dex 但它缺乏文檔,解釋其API和架構。

什麼是設計這種認證系統的最佳體系結構?

我想用JWT token我可以實現它。 Is this architecture will be secure or there any better solution for this

我的做法

      -----------------   
          |    | shared 
          |    | env file 
          |SERVICES A  |---------------|  
      AUTH HEADER |    |    | 
      JWT TOKEN  |    |    | 
     |---------------> -----------------    |      
    ---------   ------------------ shared  | 
    |  |   | SERVICE B | env file  |      
    |Login | -----------|    |----------- |    
    |Browser|   |    |   | | 
    ---------   ------------------   | | 
     | |           | | 
    Login| |"JWT_TOKEN RESPONSE"      | | 
     | |           | | 
    -------------- enviroment file    ------------ 
    |   |----------------------------------|   | 
    | Main Server|         |   | 
    |   |         |JWT_SECRET|  
    --------------         |="secret" |   
                ------------ 
+1

這個問題[太寬](http://stackoverflow.com/help/on-topic)。有太多可能的答案,或者這個格式的答案太長。請添加詳細信息以縮小答案集或隔離幾個段落中可以回答的問題。 – jurgemaister

+0

@jurgemaister我正在編輯和添加細節,這將使您輕鬆回答。 –

+0

@jurgemaister我已編輯,請現在檢查 –

回答

1

當你的解決方案肯定會工作。它可以使您的應用程序的一部分更復雜,編寫瀏覽器/移動/通用前端。可能會更慢。

例如,您可能最終有效地在前端加入數據。您發出一個請求來服務A,然後使用返回的信息向服務B發出附加請求。這對用戶來說是一種糟糕的體驗。

像Netflix和Soundcloud這樣的公司開創的新概念是backend for frontend pattern。哪種服務器端適配器適用於每種類型的前端設備,可以處理身份驗證並將連接聚合到下游服務。