2015-05-20 100 views
4

我們的應用程序的租戶有其自己的子域,例如, customer1.domain.com,儘管它是一個代碼庫。一些租戶希望SP使用SAML啓動SSO。在多租戶應用程序中使用SimpleSAMLphp

實現此目的的最佳方法是什麼?

  1. SimpleSAMLphp在靜態共享子域上,例如, sso.domain.com/saml/
  2. SimpleSAMLphp作爲租戶的一部分,例如, customer1.domain.com/saml/

如果我們選擇1,我們將如何知道傳入SAML請求的租戶是什麼?

如果我們去選擇2,你會如何建議配置SimpleSAMLphp的元數據/ authsources,因爲它似乎只支持硬編碼的文件。

感謝

回答

0

在我的前僱主之一,我們也有類似的選項2的設置和它的工作很適合我們。作爲域名的唯一區別是爲每個客戶獨特的,他們張貼的SAML到的index.php

客戶端1

client1.com/index.php

客戶端2

client2.com /index.php

我們爲每個客戶端使用一個偵聽器來觸發SAML有效負載的處理。

我們必須在每個客戶端的authsources.php中配置密鑰和源名稱(源名稱對每個客戶端都是唯一的)。我們還爲每個客戶端使用了不同的密鑰,您也可以爲所有客戶端使用一個密鑰對,但它不太安全

我們還必須在每個客戶端的saml20-idp-remote.php中配置指紋。

0

我們最終選擇了2,它運行良好。 SimpleSAMLphp上安裝的形式的多租戶應用程式:customer1.domain.com/saml/

在SimpleSAMLphp,authsources.php被配置爲按照以下:

$_SERVER['HTTP_HOST'] => array(
    'saml:SP', 
    'entityID' => 'https://'.$_SERVER['HTTP_HOST'], 
    ...etc 

這意味着有一個獨特ENTITYID對於每個租戶都以我們的域名形式,例如https://customer1.domain.com

在進行SP發起的SSO,我們指定的IdP專用於此的租戶,否則他們會看到發現頁面和其他租戶所有的IdP的列表:

if (!$as->isAuthenticated()) { 
    $params = array(
     'saml:idp' => $samlEntityID 
    ); 
    $as->login($params); 
} 

到目前爲止,它的工作存儲在數據庫中的元數據非常流暢。