我正在尝试将LightSAML https://packagist.org/packages/lightsaml/lightsaml安装到Laravel应用程序中,对HTTP POST请求进行一些非常基本的反序列化,但会收到错误:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Conclusion: don't install lightsaml/lightsaml 1.3.6
.....
Installation failed, reverting ./composer.json to its original content.
它看起来有点旧,所以不确定我是否可以让它工作 - 如果没有,是否有人可以建议更简单的反序列化方法和访问SAML请求的各个属性?
我也看过https://github.com/onelogin/php-saml,但它看起来比我需要的更多 - 我不需要使用SAML做实际的auth部分,我只需要接受一个SAML http帖子并使用它我自己定制的身份验证令牌创建的数据。
答案 0 :(得分:1)
如果想法只是解码let MyUnionType myunion =
match myunion with
| MyInt n -> printfn "You gave me an Int (%d)" n
| MyString s -> printfn "You gave me a string (%s)" s
| MyTwoStrings (s1, s2) -> printfn "You gave me two strings (\"%s\", \"%s\")" s1 s2
| MyPoint (Point (x,y)) -> printfn "You gave me a point (%d, %d)" x y
数据SAMLResponse
到您的终端,那么您可以轻松实现这一目标(只要&#39) ; s未加密)。
POST
是base64编码的,因此您只需对其进行解码即可。在您接收数据的控制器方法中,您将执行以下操作:
SAMLResponse
现在,需要解析您刚刚解码的XML数据。鉴于文档很小,使用// Decode the data into the original XML document
$xmlPayload = base64_decode($request->get('SAMLResponse'));
就足够了:
DOMDocument
这将输出如下内容:
// Load the XML document
$doc = new DOMDocument();
$doc->loadXML($xmlPayload);
// Traverse User elements
foreach ($doc->getElementsByTagName('Attribute') as $attribute) {
var_dump($attribute->nodeName.'[@'.$attribute->getAttribute('Name').'] -> '.$attribute->nodeValue);
}
这只是一个示例,因为属性可能会更改(取决于您的Single Sign On IdP的设置方式)。
我使用Okta的有效载荷进行了测试。
答案 1 :(得分:0)
我认为该解决方案存在错误:您的要求无法解析为可安装的软件包集。我猜你的libs必须与LightSaml发生冲突。只是不相容。
也许在/Users/user/.composer或其他阻碍更新的地方都有一个composer.lock文件。
尝试以下步骤:
正如您所写,解决方案可能会添加:
"repositories": [
{
"type": "vcs",
"url": "https://github.com/frostieDE/lightSAML"
}
],
祝你好运
答案 2 :(得分:0)
抱歉,我必须将其添加到作曲家并更新:
"repositories": [
{
"type": "vcs",
"url": "https://github.com/frostieDE/lightSAML"
}
],