【问题标题】:Verify WS-security password digest in PHP SOAP SERVER在 PHP SOAP SERVER 中验证 WS-security 密码摘要
【发布时间】:2020-06-24 07:38:34
【问题描述】:

我需要在 PHP-Soap 网络服务上实现 WS-Security 密码摘要。我到处寻找如何做到这一点,但我一无所获。通过反复试验,我发现 PHP Soap 服务器将调用在 Service 类中实现的“安全”函数,将在其中执行验证。 现在我的函数看起来像这样:

public function Security($UsernameToken)
{

    $this->log($UsernameToken);
    $loggHelper = [];
    $loggHelper['nonce'] = unpack('H*', base64_decode($UsernameToken->Nonce))[1];
    $loggHelper['created'] = pack('a*', $UsernameToken->Created);
    $loggHelper['password'] = pack('a*', 'test');
    $loggHelper['passhash1'] = base64_encode(pack('H*',sha1($loggHelper['nonce'].$UsernameToken->Created.$loggHelper['password'])));
    $this->log($loggHelper);
    if($UsernameToken->Password==$loggHelper['passhash1'])
        return true;
    else
    {
        return new SoapFault("401", "Prohibited");
    }

}

问题是,我的 Digest 与测试客户端 (SoapUI) 提供的密码不同

日志输出如下:

$UsernameToken = {"Username":"test","Password":"HMxOK\/pg3mOq71N2F5Znb7xDdcw=","Nonce":"BgbT8vrQb\/afX7OC3KPb0Q==","Created":"2020-06-24T07:31:11.731Z"}

$loggerHelper = {"nonce":"0606d3f2fad06ff69f5fb382dca3dbd1","created":"2020-06-24T07:31:11.731Z","password":"test","passhash1":"gJGXpD3yYDmLY6qMhRtKYWr33IA="}

【问题讨论】:

    标签: php soap ws-security soapserver


    【解决方案1】:

    先说几句:

    我建议使用

    用于加密,它包含在 PHP 本身中。

    或者您使用在后台处理安全性的框架。举个例子(但我不确定)symfony 应该自动为你做这件事 - 请阅读更多 https://symfony.com/doc/current/controller/soap_web_service.html

    【讨论】:

    • 感谢您的回答,它为我指明了正确的方向。澄清一下,我只是为了调试目的而记录这些东西,SHA1 是 WS-Security 标准中的必需算法,所以不管它是多星期,你都必须使用它。对于将来会搜索此内容的人,这里是帮助我的页面的链接:[link[(symfony.com/doc/current/security/…).再次感谢您的回答和您的时间。
    • 很高兴听到您解决了问题。如果此答案是解决方案/原因,请将其标记为accepted answer
    猜你喜欢
    • 1970-01-01
    • 2020-12-16
    • 2013-01-22
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2015-10-20
    • 2010-12-08
    相关资源
    最近更新 更多