2013-05-15 145 views
2

我是SAML 2的新手,我正在開發一款需要SSO的工具,但我對如何解決這個問題毫無頭緒。這裏的流速:處理SAML響應

1)用戶訪問主網站並選擇登錄 2)用戶輸入登錄信息並提交 3)系統驗證憑證,生成一個SAML響應,並與沿着重定向用戶到新的工具SAML響應作爲POST變量。 4)新工具分析響應,存儲/更新數據庫中的信息併爲用戶創建活動會話。

1,2和3已經在主網站上創建。我的工作內容是4.主要開發人員向我們提供了SAML響應和證書示例。我有2個問題/問題:

1)使用測試服務器上的SSO表單,我在我的服務器上輸入了一個php文件的返回URL並提交了表單。它將我登錄並重定向到我的服務器上的頁面。頁面的代碼如下,輸出爲下文進一步:

<?php 
    var_dump($_POST); 
?> 

輸出:

array(0) { } 

我這樣做是正確的?我使用Firefox上的Firebug進行了檢查,並且可以在某處找到samlresponse,但我不確定如何將其帶入頁面。任何幫助?

2)使用樣本SAML響應,我們能夠編寫一個小腳本來分析樣本並在其中打印2-3個屬性。這是否是正確的方式呢,還是有更好的開源解決方案?

我嘗試閱讀SimpleSAMLPHP,OneLogin和其他一些這樣的包,但它們看起來太複雜了,但我覺得我必須在這裏實現的方法/解決方案可以更簡單地完成。此外,捆綁包似乎具有提供SAML的所有功能,而我只是接收和解析響應。

感謝您的幫助! 乾杯

+0

你確定它的設置使用POST綁定?另一個常見選項是使用重定向綁定,在這種情況下,您應該在$ _SESSION而不是$ _POST中找到響應。 –

回答

0

說實話,解析和驗證SAML響應並不是微不足道的。 SP需要知道IdP的EntityDescriptor(s),並且IdP需要知道SP的EntityDescriptor(s)。還有幾個綁定/配置文件。響應/斷言可以被加密/簽名,這意味着您必須解密和/或驗證數字簽名。 SAML是一個相當複雜的協議,沒有簡單的方法來解析/驗證。

+0

謝謝你的回覆。我知道這很難,但我正在尋找某人來幫助我,或者指向我一個教程或其他東西。例如,我擁有簽名響應的證書。我在哪裏以及如何安裝此證書?在我的服務器上? – salmanhijazi

0

您可以使用lightsaml php SAML數據模型庫來解析/序列化SAML消息。如果你使用Symfony2框架,你也可以考慮使用SamlSPBundle。 只使用lightsaml接收SAML迴應並解析它會是這個樣子:

$request = new Request(); 
$request->setQueryString($_SERVER['QUERY_STRING']); 
$request->setGet($_GET); 
$request->setPost($_POST); 
$request->setRequestMethod($_SERVER['REQUEST_METHOD']); 

$bindingDetector = new BindingDetector(); 
$bindingType = $bindingDetector->getBinding($request); 
$binding = $bidingDetector->instantiate($bindingType); 
$samlResponse = $binding->receive($request);