SAML - 从身份提供者处获取响应
SAML - Getting response from the identity provider
我正在尝试使用 onelogin.com 实现 SAML 身份验证系统,我正在使用此 php 库 https://github.com/simplesamlphp/saml2,代码如下
// 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();
实际上创建了一个新的 SAML 2.0 响应对象,而不是解析从 IDP 发回的对象。此调用应由想要创建 SAML 响应的 IDP 使用。您应该希望在断言使用者 (ACS) URL:
上执行类似于以下代码的操作
$b = SAML2_Binding::getCurrentBinding();
$response = $b->receive();
但我 非常 强烈建议您使用 simpleSAMLphp 本身(或另一个第 3 方 SAML 实现)将 SAML 集成到您的 PHP 应用程序中,因为它处理所有复杂且安全敏感的 SAML 处理。
SAML 2.0 库 仅适用于希望将 SAML 用于 Web SSO 以外的其他目的或希望重建 SAML 实现的开发人员,因为 simpleSAMLphp 不适合他们。假设您没有 simpleSAMLphp 无法满足的要求,那么使用它会更好(并且更安全)。此外,如果您有扩展需求,我会为 simpleSAMLphp 创建一个拉取请求,而不是从头开始重做该项目。
@HansZ 是对的。直接使用 simpleSAMLphp 的 SAML 核心而不是整个框架时要小心。
我还想推荐一个替代方案,既然您想将您的应用程序与 onelogin.com 连接,为什么不使用 OneLogin 的 PHP SAML 工具包呢? https://github.com/onelogin/php-saml
我正在尝试使用 onelogin.com 实现 SAML 身份验证系统,我正在使用此 php 库 https://github.com/simplesamlphp/saml2,代码如下
// 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();
实际上创建了一个新的 SAML 2.0 响应对象,而不是解析从 IDP 发回的对象。此调用应由想要创建 SAML 响应的 IDP 使用。您应该希望在断言使用者 (ACS) URL:
上执行类似于以下代码的操作$b = SAML2_Binding::getCurrentBinding();
$response = $b->receive();
但我 非常 强烈建议您使用 simpleSAMLphp 本身(或另一个第 3 方 SAML 实现)将 SAML 集成到您的 PHP 应用程序中,因为它处理所有复杂且安全敏感的 SAML 处理。
SAML 2.0 库 仅适用于希望将 SAML 用于 Web SSO 以外的其他目的或希望重建 SAML 实现的开发人员,因为 simpleSAMLphp 不适合他们。假设您没有 simpleSAMLphp 无法满足的要求,那么使用它会更好(并且更安全)。此外,如果您有扩展需求,我会为 simpleSAMLphp 创建一个拉取请求,而不是从头开始重做该项目。
@HansZ 是对的。直接使用 simpleSAMLphp 的 SAML 核心而不是整个框架时要小心。
我还想推荐一个替代方案,既然您想将您的应用程序与 onelogin.com 连接,为什么不使用 OneLogin 的 PHP SAML 工具包呢? https://github.com/onelogin/php-saml