SAML — Получение ответа от провайдера идентификации

Я пытаюсь реализовать систему аутентификации SAML с помощью onelogin.com, я использую эту библиотеку 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
(
)

)

Из вывода выше я не могу получить информацию о пользователе, пожалуйста, помогите.

0

Решение

Ваш код:

$response = new \SAML2_Response();

фактически создает новый объект ответа SAML 2.0 вместо анализа того, который был отправлен обратно из IDP. Этот вызов должен использоваться IDP, который хочет создать ответ SAML. Вы должны попытаться выполнить что-то вроде следующего кода в URL-адресе Assertion Consumer (ACS):

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

но я бы очень Настоятельно советуем вам использовать сам simpleSAMLphp (или другую реализацию SAML сторонних производителей) для интеграции SAML в ваше PHP-приложение, поскольку оно имеет дело со всей сложной и чувствительной к безопасности обработкой SAML.

SAML 2.0 библиотека предназначен только для разработчиков, которые хотят использовать SAML для других целей, кроме единого входа в Интернет, или для тех, кто хочет перестроить реализацию SAML, потому что simpleSAMLphp им не подходит. Предполагая, что у вас нет требований, которые не может удовлетворить simpleSAMLphp, вам гораздо лучше (и безопаснее) его использовать. Более того, если у вас есть требование к расширению, я бы создал запрос извлечения для simpleSAMLphp, а не переделывал этот проект с нуля.

0

Другие решения

@HansZ прав. Будьте осторожны при непосредственном использовании SAML-ядра simpleSAMLphp вместо всей платформы.

Я также хотел предложить альтернативу, поскольку вы хотите соединить свое приложение с onelogin.com, почему бы не использовать OneLogin’s PHP SAML Toolkit? https://github.com/onelogin/php-saml

0

По вопросам рекламы [email protected]