2017-02-17 56 views
1

我們目前正在爲客戶開發一個應用程序。該項目有限制,我們只提供可部署的WAR文件。客戶提供的基礎設施,並不會有太大的偏差。Spring-Security + SAML:授權多個應用程序充當單個服務提供商

該應用程序是用Spring Boot,Spring Security和SAML開發的。當前版本是一個單一的單片WAR文件。

目前,由於多種原因(可維護性,部署,代碼質量等),我們正在將單個應用程序拆分爲單獨的應用程序。不幸的是,我們還不知道如何實現授權使用這些給出的限制:


基礎設施的制約:

  • 應用程序將被部署在JBoss EAP 7.0
  • 提供自定義身份提供由客戶執行
  • 與IdP的通信必須使用SAML 2.0實施

自定義的IdP具有以下限制:

  • 驗證是通過代理,這意味着只有通過驗證的用戶在可以提供
  • 只有一個SP的元數據文件的應用程序來完成,因爲它鏈接到用戶數據庫。我們希望爲所有應用程序共享相同的用戶數據庫。
  • 的SP元數據文件可以僅提供一個AssertionConsumerService地點
  • 的AssertionConsumerService-位置是在元數據文件靜態定義的,並且不能在一個AuthnRequest

問題描述被重寫:

每個應用程序必須使用IdP授權才能接收角色和斷言。在當前(單片)部署中,這不成問題,因爲我們只需要一個AssertionConsumerService。使用新架構,每個應用程序都可以重定向到IdP,但IdP只能重定向到靜態配置的ACS。當只有一個ACS可能時,每個應用程序如何接收AuthnResponse?

任何想法?

回答

0

從SAML標準的角度來看,這可以通過SAML IdP代理實現。充當ServiceProviders的您的應用程序僅與IdP代理的IdP部分進行通信。實際的IdP只與IdP Proxy的SP通信(因此只有一個ACS網址)。

+0

是的,這聽起來像一個可能的解決方案。但是實施自己的IdP聽起來像很多工作。你知道任何現有的庫已經這樣做嗎? – Dave

+0

我不知道有一個實現IdP代理的庫,但有一些項目/產品提供此功能。儘管如此,它還是一些額外的基礎設施組件,需要進行部署,維護和運行,但它是唯一基於標準的方法,我知道工作正常 –

+0

我在調查同樣的問題時遇到了這個問題 - 我沒有嘗試過,但https: //github.com/OpenConext/OpenConext-idensys似乎是一個基於Java的SAML代理,可能會提供一種前進的方式。 –

相關問題