2015-01-10 38 views
0

我想實現SAML認證系統的響應,我使用這個PHP庫https://github.com/simplesamlphp/saml2與下面的代碼SAML - 使用onelogin.com獲取從身份提供

// Set up an AuthnRequest 
    $request = new SAML2_AuthnRequest(); 
    // $request->setId(SAML2_Utils::generateId()); 
    $request->setIssuer('http://localhost:8888/yii2/dw/advanced/frontend/web/index.php?r=site/auth'); 
    $request->setDestination('https://app.onelogin.com/trust/saml2/http-post/sso/418578'); 

    // Send it off using the HTTP-Redirect binding 
    $binding = new SAML2_HTTPRedirect(); 
    $binding->send($request); 

上面的代碼是成功認證我和回發我到我的成功頁面,但我不知道如何從發佈的數據獲取用戶信息。

我想下面的代碼來獲取用戶數據

$response = new \SAML2_Response(); 
    print_r($response); 

這是給下面的數據

SAML2_Response Object 
(
[assertions:SAML2_Response:private] => Array 
    (
    ) 

[inResponseTo:SAML2_StatusResponse:private] => 
[status:SAML2_StatusResponse:private] => Array 
    (
     [Code] => urn:oasis:names:tc:SAML:2.0:status:Success 
     [SubCode] => 
     [Message] => 
    ) 

[extensions:protected] => 
[tagName:SAML2_Message:private] => Response 
[id:SAML2_Message:private] => _afe4d7fd7add270de7d334231e2eec68d1492363130 
[issueInstant:SAML2_Message:private] => 14340322405 
[destination:SAML2_Message:private] => 
[consent:SAML2_Message:private] => urn:oasis:names:tc:SAML:2.0:consent:unspecified 
[issuer:SAML2_Message:private] => 
[relayState:SAML2_Message:private] => 
[document:protected] => 
[signatureKey:SAML2_Message:private] => 
[messageContainedSignatureUponConstruction:protected] => 
[certificates:SAML2_Message:private] => Array 
    (
    ) 

[validators:SAML2_Message:private] => Array 
    (
    ) 

) 

從上面的輸出,我不能夠獲取用戶信息,請幫助。

回答

0

您的代碼:

$response = new \SAML2_Response(); 

實際創建的,而不是分析是發佈了由IDP後面的一個新的SAML 2.0 Response對象。這個調用應該由想要創建SAML響應的IDP使用。你應該尋找到喜歡的斷言消費者(ACS)URL下面的代碼執行的東西:

$b = SAML2_Binding::getCurrentBinding(); 
$response = $b->receive(); 

但我會非常強烈建議您使用simpleSAMLphp本身(或其他第三方SAML實現)集成因爲SAML處理所有複雜和安全敏感的SAML處理,因此SAML進入您的PHP應用程序。

的SAML 2.0 只是針對誰想要使用SAML用於其他目的,而不是的Web SSO或希望重建一個SAML實現,因爲simpleSAMLphp不適合他們的開發人員。假設你沒有simpleSAMLphp無法滿足的要求,那麼使用它會更好(並且更安全)。此外,如果您有擴展需求,我會爲simpleSAMLphp創建一個pull請求,而不是從頭開始重做該項目。

0

@HansZ是對的。直接使用simpleSAMLphp的SAML核心代替整個框架時要小心。

我也想推薦一個替代方案,因爲您想將您的應用程序與onelogin.com連接,爲什麼不使用OneLogin的PHP SAML工具包? https://github.com/onelogin/php-saml

相關問題