2013-11-09 120 views
1

我有一個應用程序的工作流程是這樣SAML和後端REST服務認證

(A)用戶代理(瀏覽器)< ----->(B)應用服務器< ------ >(C)REST服務

假設應用服務器(B)是SAML服務提供商,並且用戶@域使用Web瀏覽器SSO配置文件從瀏覽器(A)嚮應用服務器(B)進行認證。

運行於(B)上的應用程序如何以REST服務(C)身份驗證爲[email protected]? (假設B和C都是同一個IdP上的SAML SP)。

如果瀏覽器只是對B和C進行AJAX調用,那將很簡單。但是如果REST服務是直接從應用程序調用的,你會怎麼做?

我掙扎什麼:如果應用程序本身不是SAML SP,但集成一個(比方說,使用Shibboleth的SP和REMOTE_USER頭)您的應用程序可能永遠不會看到一個SAML斷言。您知道用戶已登錄並通過IdP進行身份驗證,但無法獲得SAML斷言以切換到後端服務。

有沒有解決方法或我運氣不好?

回答

1

是的,沒有受到什麼阻礙你的應用服務器(B)既充當服務提供商接受來自傳入的斷言和充當身份提供商,發行了自己的SAML票證轉發給C.

如果您無法訪問原始斷言,則必須在B中發佈新斷言。如果您確實可以訪問原始斷言,則可以將其轉發給C,如果將C配置爲忽略受限制的受衆限制斷言只爲B.

+0

我不認爲有可能驗證兩次針對單個IdP的相同SAML斷言 –

+0

爲什麼不能?一旦收到斷言,您就不會聯繫Idp進行驗證。驗證過程完全由SP完成,通過檢查加密簽名和響應和斷言的id:s。 –

+0

so - 如果您有權訪問原始斷言,則可以將其轉發給C_意味着斷言已轉發到C而不在B上驗證? –

0

是有效的,因爲你說的App Server 和REST服務ç都SAML的SP與同SAML的IdP,您必須已經有一個適當的機制,允許Web客戶端通過SAML Web Browser SSO ProfileÇ直接(獨立)的認證,對不對?當此「登錄工作流程」完成時,API客戶端具有auth令牌,表示「[email protected]已通過IdP X進行身份驗證以使用SP C」的事實,並且可用於驗證呼叫C一段時間(直到認證令牌到期)。

但是BC是單獨的服務。而如果它們具有相同的IdP X註冊不同的SAML服務提供商entityIDs,那麼的IdP X將認爲這些陳述是等價的:

  1. [email protected]通過的IdP X以使用認證SP C
  2. user @ domain。COM是通過的IdP X驗證才能使用SP

所以應該會有沒有服務使用較上面的語句2的身份驗證令牌的方式(它可以從自己的SAML SSO得到登錄工作流程)來獲取代表上述語句1的身份驗證令牌(其只能來自SAML SSO登錄工作流程,用於C)。服務B也不可能「通過」API客戶端到服務C SAML SSO登錄工作流程,而不會失去對工作流程的控制。

在另一方面,如果Ç具有相同的SAML服務提供商ENTITYID與的IdP註冊,則聲明1的上方是邏輯上和安全明智等效於上面的語句2。在這種情況下,最直接的解決方案是服務BC使用相同的認證令牌系統。這實在是唯一的,這可能無論如何的工作方式,因爲如果ç具有相同的SAML SP ENTITYID那麼的IdP將只有一個ACS URL配置爲同時Ç,這意味着就IdP而言,他們確實是同一個SAML SP。