【发布时间】: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