处理SAML响应

时间:2013-05-15 23:32:58

标签: php saml saml-2.0

我是SAML 2的新手,我正在研究一种需要SSO的工具,但我对如何解决这个问题毫无头绪。这是流程:

1)用户访问主网站并选择登录。 2)用户输入登录信息并提交 3)系统验证凭据,生成SAML响应并将用户重定向到新工具以及SAML响应作为POST变量。 4)新工具解析响应,在数据库中存储/更新信息,并为用户创建活动会话。

1,2和3已在主网站上创建。我正在做的是4.主要的开发人员为我们提供了样本SAML响应和证书。我有2个问题/问题:

1)在测试服务器上使用SSO表单,我在我的服务器上输入了一个php文件的返回URL并提交了表单。它登录并将我重定向到我服务器上的页面。页面的代码如下,输出结果如下:

<?php
    var_dump($_POST);
?>

输出:

array(0) { }

我做的是对的吗?我在Firefox上使用Firebug进行了检查,我可以在某处找到samlresponse,但我不确定如何将它带入页面。有什么帮助吗?

2)使用示例SAML响应,我们能够编写一个小脚本来解析样本并在其中打印2-3个属性。这是正确的方法,还是有更好的开源解决方案?

我尝试阅读SimpleSAMLPHP,OneLogin和其他几个这样的捆绑包,但它们看起来太复杂了,而我觉得我必须在这里实现的方法/解决方案更简单。此外,捆绑包似乎具有提供SAML的所有功能,而我只是接收和解析响应。

感谢您的高级帮助! 干杯

4 个答案:

答案 0 :(得分:1)

如果您想手动解析和处理SAML消息,OpenSAML可能就是您的选择。这是一个非常低级别的图书馆,涉及大量的手工劳动。

以下是OpenSAML webpage

您需要查看SAML spec

我的书A Guide to OpenSAML为SAML和OpenSAML库提供了一个很好的介绍和步骤。

此外,我的博客上有几个例子。 http://blog.samlsecurity.com/search/label/OpenSAML http://blog.samlsecurity.com/search/label/SAML

答案 1 :(得分:0)

说实话,解析和验证SAML响应并非易事。 SP需要知道IdP的EntityDescriptor,而IdP需要知道SP的EntityDescriptor。并且有几个绑定/配置文件。响应/断言可以加密/签名,这意味着您必须解密和/或验证数字签名。 SAML是一个非常复杂的协议,没有简单的解析/验证方法。

答案 2 :(得分:0)

您可以尝试使用以下链接对SAMLReponses进行编码和解码:

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

您尝试自动执行这些步骤并进行解析。

答案 3 :(得分:0)

您可以使用lightsaml php SAML数据模型库来解析/序列化SAML消息。如果您使用的是Symfony2框架,您也可以考虑使用SamlSPBundle。 使用只接受SAML响应的lightsaml并解析它看起来像这样:

$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);