如何在 php 中反序列化 SAML 请求 - 无法安装 LightSAML

How to deserialize SAML request in php - Can't install LightSAML

我正在尝试将 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 进行实际的身份验证部分,我只需要接受 SAML http post 并将该数据用于我自己的定制身份验证令牌创建。

我认为解决方案是错误的:无法将您的要求解析为一组可安装的软件包。我猜你的库中一定与 LightSaml 有冲突。只是不兼容。

可能 /Users/user/.composer 或其他地方有 composer.lock 文件阻碍了更新。

尝试以下步骤:

  1. 进入全局作曲家文件夹 (C:\Users\your_name\AppData\Roaming\Composer)
  2. 编辑了 composer.json(添加到要求:"your_package":"number.*")
  3. 在命令行中:composer global update。

如您所写,解决方案可能是添加:

"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/frostieDE/lightSAML"
    }
],

祝你好运

抱歉,我必须将其添加到作曲家并更新:

"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/frostieDE/lightSAML"
    }
],

如果只是想解码 POST 发送到您端点的 SAMLResponse 数据,那么您可以轻松实现(只要它未加密)。

SAMLResponse是base64编码的,所以你只需要解码它。在您接收数据的控制器方法中,您将执行如下操作:

// Decode the data into the original XML document
$xmlPayload = base64_decode($request->get('SAMLResponse'));

现在,您刚刚解码的 XML 数据需要进行解析。鉴于文档很小,使用 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);
}

这将输出如下内容:

string(34) "saml2:Attribute[@firstName] -> Ray"
string(37) "saml2:Attribute[@lastName] -> Charles"
string(48) "saml2:Attribute[@email] -> ray.charles@music.com"
string(48) "saml2:Attribute[@login] -> ray.charles@music.com"
string(44) "saml2:Attribute[@id] -> 11uboeg2g0bKNxyk01z7"

这只是一个示例,因为属性可能会发生变化(取决于您的单点登录 IdP 的设置方式)。

我使用 Okta 的有效载荷进行了测试。