使用PHP验证.NET Web服务

时间:2014-04-23 11:15:07

标签: php asp.net web-services authentication soap

我正在使用.net服务器解决方案,该解决方案提供身份验证Web服务以及其他几个服务URL。访问过程涉及对身份验证服务URL的初始调用,以及使用“Authenticate”soap调用,该调用应该返回访问令牌。然后,此令牌用于调用其他服务URL以从服务器检索数据。

我遇到的问题是我为身份验证过程提供了用户名和密码,但没有说明如何将凭据发送到服务器。另外,我正在尝试使用PHP访问Web服务(基于.net)。

到目前为止,我已设法使用wsdl2php为身份验证服务URL生成类,但这些类并未提供有关如何发送用户名和密码的任何指示。

我尝试将凭据添加为soap标头:

$headerContent = "<o:UserName xmlns:o=\"$namespace\">
                    <o:UserName>$uname</o:UserName>
                    <o:Password>$pword</o:Password>
                  </o:UserName>";
$headerVar = new SoapVar($headerContent, XSD_ANYXML, null, null, null);
$header = new SoapHeader($namespace, 'o:ClientCredentials', $headerVar);
$this->__setSoapHeaders(array($header));


try {
    return $this->__soapCall('Authenticate', array());
} catch (Exception $e) {
    throw new Exception( 'Not allowed.', 0, $e);
}

...但我收到了“拒绝访问”消息。是否有正确的方法将凭据传递给服务以便成功进行身份验证?

1 个答案:

答案 0 :(得分:0)

有许多不同的身份验证风格 - 表单,基本,oauth。如果你有办法通过浏览器登录,我建议运行Fiddler来查看消息流量。 Fiddler是一个位于浏览器和服务器之间的中间件工具。它会为您提供数据包标题 - 因此您可以看到加密,字段格式和内容类型。然后你应该模仿请求。