簡體   English   中英

驗證 PHP SOAP SERVER 中的 WS-security 密碼摘要

[英]Verify WS-security password digest in PHP SOAP SERVER

我需要在 PHP-Soap webservice 上實現 WS-Security 密碼摘要。 我到處尋找如何做到這一點,但我一無所獲。 through trial and error I've found out that PHP Soap server will call a "Secutity" function implemented in Service class where verification will be performed. 現在我的 function 看起來像這樣:

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");
    }

}

問題是,我的摘要與測試客戶端(SoapUI)提供的密碼不同

日志 output 如下所示:

$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 本身中。

或者您使用一個框架來處理引擎蓋下的安全性。 例如(但我不確定)symfony 應該自動為您執行此操作 - 請在https://symfony.com/doc/current/controller/soap_web_service.ZFC35FDC70D5FCC69D2569883A822E閱讀更多內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM