Php SAML-从身份提供程序获取响应

Php SAML-从身份提供程序获取响应,php,saml-2.0,Php,Saml 2.0,我正在尝试使用onelogin.com实现SAML身份验证系统,我正在使用这个php库,代码如下 // Set up an AuthnRequest $request = new SAML2_AuthnRequest(); // $request->setId(SAML2_Utils::generateId()); $request->setIssuer('http://localhost:8888/yii2/dw/advanced/frontend/

我正在尝试使用onelogin.com实现SAML身份验证系统,我正在使用这个php库,代码如下

    // 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
    (
    )

 )
从以上输出中,我无法获得用户信息,请提供帮助。

您的代码:

$response = new \SAML2_Response();
实际上创建了一个新的SAML2.0响应对象,而不是解析从IDP发回的对象。希望创建SAML响应的IDP应使用此调用。您应该在断言使用者ACS URL上执行类似以下代码的操作:

$b = SAML2_Binding::getCurrentBinding();
$response = $b->receive();
但我强烈建议您使用simpleSAMLphp本身或另一个第三方SAML实现将SAML集成到PHP应用程序中,因为它处理所有复杂且安全敏感的SAML处理


SAML2.0库仅适用于那些希望将SAML用于Web SSO以外的其他用途的开发人员,或者那些希望重建SAML实现的开发人员,因为simpleSAMLphp不适合他们。假设您没有simpleSAMLphp无法满足的需求,那么使用它会更好、更安全。此外,如果您有扩展需求,我将为simpleSAMLphp创建一个pull请求,而不是从头开始重做该项目。

@HansZ是正确的。当直接使用simpleSAMLphp的SAML核心而不是整个框架时,要小心

我还想提出一个替代方案,既然您希望将应用程序与onelogin.com连接,为什么不使用onelogin的PHP SAML工具包呢