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

0

Я пытаюсь внедрить систему аутентификации 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
    (
    )

 )

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

Теги:
saml-2.0

2 ответа

0
Лучший ответ

Ваш код:

$response = new \SAML2_Response();

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

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

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

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

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню