2016-03-01 88 views
-1

我正嘗試使用HTML5/Javascript創建多租戶SPA(單頁應用程序)。這個應用程序將調用寧靜的web服務進行數據更新。下面是說明的架構:enter image description here創建一個由靜態web服務支持的multitenant SPA

這是我的挑戰:

  • 身份:一個服務將如何知道,從客戶端來了JS的請求對應於數據庫的特定模式?可能我可以發送「APPID」令牌嗎?但是,最終用戶可以很容易地欺騙這個問題?
  • 連接池:如果Tomcat池依賴於連接池,如何確保使用可以訪問APP1模式的「app1」憑證創建的連接在處理來自App1 JS的請求時返回到Web服務?我可能只需創建一個可訪問所有模式的數據庫帳戶,但這可能會成爲合規性問題。

我應該只部署多個Web服務副本嗎?說,app1 JS查詢services.app1.com和app2 JS查詢services.app2.com?這可能會解決上述兩個問題,但我認爲它不再是多租戶解決方案。

回答

1

這通常是通過驗證令牌來完成的。這通常由標準會話cookie(通過您使用的任何應用程序服務器實現)處理,或者在每次調用時得到驗證的狀態較少(如OAuth bearer token)。這最終是同一個解決方案,一個使用cookie(通過HTTP頭實現),另一個使用Auth http頭。無論如何,基本上會發生的是,每個用戶都會收到一個魔術字符串,該字符串在每次調用中都會被認證爲屬於一組特定的憑證。

它與理論上的「APPID」非常相似,區別在於令牌是不透明的,並且對於它們的長度和複雜性(在宇宙的熱死亡之前)非常可能是不可猜測的,因此是有效的安全。區別在於,您保持令牌與服務器端的「APPID」之間的綁定,而不是客戶端。

+0

感謝羅布,爲您的答案。是否有任何庫實現或容易使用JavaScript/Java組合的Oauth承載令牌? – Jay

+0

如果你想尊重別人的身份驗證(這是通過Facebook或谷歌類型的東西登錄工作)OAuth是非常簡單:http://nat.sakimura.org/2014/12/10/making-a-javascript-openid -connect-client就是一個例子。創建你自己的提供者會更深入一些......你可能想使用OpenAM http://openam.forgerock.org/這樣的包。所有這一切,除非你使用多臺服務器,否則我會真正開始一個普通的舊會話,除非你真的需要複雜性。 –

相關問題