Обработка ответа SAML


Я новичок в SAML 2 и работаю над инструментом, для которого требуется единый вход, но я не знаю, как это сделать. Вот поток:

1) Пользователь получает доступ к основному веб-сайту и решает войти в систему. 2) Пользователь вводит регистрационную информацию и отправляет 3) Система проверяет учетные данные, генерирует ответ SAML и перенаправляет пользователя на новый инструмент вместе с ответом SAML в качестве переменной POST. 4) Новый инструмент анализирует ответ, сохраняет/обновляет информацию в базе данных и создает активный сеанс для пользователя.

1,2 и 3 уже созданы на главном веб-сайте. То, над чем я работаю, - это 4. Основные разработчики предоставили нам образец ответа SAML и сертификат. У меня есть 2 проблемы/вопроса:

1) Используя форму единого входа на тестовом сервере, я ввел URL-адрес возврата в php-файл на своем сервере и отправил форму. Он зарегистрировал меня и перенаправил на страницу на моем сервере. Код страницы приведен ниже, а вывод - далее ниже:

<?php
    var_dump($_POST);
?>

Вывод:

array(0) { }

Правильно ли я поступаю? Я проверил использование Firebug в Firefox и смог где-то найти samlresponse, но я не уверен, как именно его перенести на страницу. Есть какая-нибудь помощь?

2) Используя пример ответа SAML, мы смогли написать небольшой скрипт, который анализирует образец и печатает 2-3 атрибута внутри. Это правильный способ сделать это, или есть лучшие решения с открытым исходным кодом, доступные там?

Я попытался почитать о SimpleSAMLphp, OneLogin и пара других подобных пакетов, но они кажутся слишком сложными, в то время как я чувствую, что то, чего я должен достичь здесь, можно сделать с помощью методов/решений намного проще. Кроме того, пакеты, похоже, обладают всеми функциями предложения SAML, в то время как я просто должен получить и проанализировать ответ.

Спасибо за вашу помощь в дальнейшем! Приветствия

Author: salmanhijazi, 2013-05-16

4 answers

Если вы хотите выполнить ручной анализ и обработку сообщений SAML, возможно, подойдет OpenSAML. Это библиотека очень низкого уровня, и в ней задействовано много ручного труда.

Вот веб-страница OpenSAML

Вам нужно будет изучить спецификацию SAML

Моя книга, Руководство по OpenSAML, дает хорошее введение и пошаговое описание SAML и библиотеки OpenSAML.

Также в моем блоге есть несколько примеров на этот. http://blog.samlsecurity.com/search/label/OpenSAML http://blog.samlsecurity.com/search/label/SAML

 1
Author: Stefan Rasmusson, 2018-04-14 20:49:00

Честно говоря, анализ и проверка ответа SAML не являются тривиальными. SP должен знать EntityDescriptor(ы) IDP, а IDP должен знать EntityDescriptor(ы) SP. И есть несколько привязок/профилей. И ответ/Утверждение может быть зашифрован/подписан, что означает, что вам нужно расшифровать и/или проверить цифровые подписи. SAML - довольно сложный протокол, простого способа анализа/проверки не существует.

 0
Author: Hui, 2013-05-23 06:07:15

Вы можете попробовать закодировать и декодировать свои ответы SAML по ссылке ниже:

Https://rnd.feide.no/simplesaml/module.php/saml2debug/debug.php

Вы пытаетесь автоматизировать эти шаги и проанализировать их.

 0
Author: Ramjee Anna, 2013-07-17 08:40:04

Вы можете использовать lightsaml библиотеку моделей данных php SAML для анализа/сериализации сообщений SAML. Если вы используете платформу Symfony2, вы также можете рассмотреть возможность использования samlspbundle. Используя только lightsaml, получая ответ SAML и анализируя его, это выглядело бы примерно так:

$request = new Request();
$request->setQueryString($_SERVER['QUERY_STRING']);
$request->setGet($_GET);
$request->setPost($_POST);
$request->setRequestMethod($_SERVER['REQUEST_METHOD']);

$bindingDetector = new BindingDetector();
$bindingType = $bindingDetector->getBinding($request);
$binding = $bidingDetector->instantiate($bindingType);
$samlResponse = $binding->receive($request);
 0
Author: Milos Tomic, 2014-06-01 15:31:03