nuSOAP:服务器端的头部身份验证

时间:2012-04-11 15:58:30

标签: php nusoap

任何人都可以建议如何解析nuSOAP标头并检查以下SOAP请求中的username/password/Signature

<SOAP-ENV:Header>
    <SOAP-ENV:Header xmlns:wsa="http://admin.example.com">
      <Username>testuser</Username>
      <Password>test123456</Password>
      <Signature>5595610031002</Signature>
    </SOAP-ENV:Header>
  </SOAP-ENV:Header>

即:我需要在服务器端解析此标头并验证每个请求的凭据。

1 个答案:

答案 0 :(得分:2)

我不确定,但我找到了使用以下代码跟踪凭据的替代方法。 让我解释一下。

代码$sSoapRequest = file_get_contents('php://input');,它将整个SOAP请求返回给服务器端......

以下两个功能可以帮助我实现价值观。

function doAuthenticate()
{
    $sSoapRequest = file_get_contents('php://input');
    if(isset($sSoapRequest))
    {
        $sUsername = hookTextBetweenTags($sSoapRequest, 'Username');
        $sPassword = hookTextBetweenTags($sSoapRequest, 'Password');
        $sSignature = hookTextBetweenTags($sSoapRequest, 'Signature');
        if($sUsername=='testuser' && $sPassword=='test123456' && $sSignature=='5595610031002')
            return true;
        else
            return false;
    }
}
function hookTextBetweenTags($string, $tagname) {
    $pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
    preg_match($pattern, $string, $matches);
    return $matches[1];
}

并且,对服务器端的每个进程使用doAuthenticate()方法。