Обработка ответа 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, в то время как я просто должен получить и проанализировать ответ.
Спасибо за вашу помощь в дальнейшем! Приветствия
4 answers
Если вы хотите выполнить ручной анализ и обработку сообщений SAML, возможно, подойдет OpenSAML. Это библиотека очень низкого уровня, и в ней задействовано много ручного труда.
Вот веб-страница OpenSAML
Вам нужно будет изучить спецификацию SAML
Моя книга, Руководство по OpenSAML, дает хорошее введение и пошаговое описание SAML и библиотеки OpenSAML.
Также в моем блоге есть несколько примеров на этот. http://blog.samlsecurity.com/search/label/OpenSAML http://blog.samlsecurity.com/search/label/SAML
Честно говоря, анализ и проверка ответа SAML не являются тривиальными. SP должен знать EntityDescriptor(ы) IDP, а IDP должен знать EntityDescriptor(ы) SP. И есть несколько привязок/профилей. И ответ/Утверждение может быть зашифрован/подписан, что означает, что вам нужно расшифровать и/или проверить цифровые подписи. SAML - довольно сложный протокол, простого способа анализа/проверки не существует.
Вы можете попробовать закодировать и декодировать свои ответы SAML по ссылке ниже:
Https://rnd.feide.no/simplesaml/module.php/saml2debug/debug.php
Вы пытаетесь автоматизировать эти шаги и проанализировать их.
Вы можете использовать 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);