从SOAP服务器获取PHP的SOAP头用户名和密码

4

我需要创建PHP,SOAP API。我需要对来自SOAP服务器的SOAP客户端进行身份验证。

以下是SOAP客户端的代码:

 $client = new SoapClient("cust.wsdl",array(
"trace"      => 1,
"exceptions" => 0,
"user" => 'username',
"pass" => 'password'));

$result = $client->getDetails($value1);

我需要从服务器(SOAP SERVER)端获取并验证这些用户名和密码。以下是我的SOAP服务器代码:
class getDb {
//return DATA 
}

$server = new SoapServer("cust.wsdl");
$server->setClass("getDb");
$server->handle();

我需要从SOAP服务器验证客户端的用户名和密码。

如果有人知道如何从SOAPSERVER捕获SOAP用户名和密码(“user”=> 'username',“pass”=> 'password'),请提供帮助。

4个回答

4

可以如下方式捕获身份验证详细信息。

    if(($_SERVER['PHP_AUTH_PW']!= $pass || $_SERVER['PHP_AUTH_USER'] != $login)|| !$_SERVER['PHP_AUTH_USER'])
{
    header('WWW-Authenticate: Basic realm="Test auth"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Auth failed';
    exit;
}

任何输出都可以生成用于 header('HTTP/1.0 401 Unauthorized');

2
$client = new SoapClient("cust.wsdl",array(
    "trace"      => 1,
    "exceptions" => 0,
    **"user" => 'username',
    "pass" => 'password'));**

上述两个项目通常是http auth用户名和密码。如果您需要验证它们,那么可以在apache基本身份验证级别上进行验证。如果您需要在php级别上执行此操作,则需要编写基于http auth的会话处理程序,以要求安全性才能显示资源。这里有一个例子:http://php.net/manual/en/features.http-auth.php 大多数开发人员只使用与LDAP或其他服务绑定的apache基本身份验证来处理身份验证请求,并让soap服务处理实际工作。

非常感谢您的回答。我能通过 $_GET[''] 或者 $_POST[''] 捕获用户和密码吗? - Sathiska

1

我使用了以下方法,并成功从HTTP身份验证方法中获取了SOAP PHP身份验证响应。

我的SOAP客户端语句如下所示

$client = new SoapClient("name.wsdl",array(
"trace"      => 1,
"exceptions" => 0,
"login" => 'xxx',
"password" => 'xxx'));

我使用了这个PHP语句来验证PHP Auth头。
    if(($_SERVER['PHP_AUTH_PW']!= $pass
 || $_SERVER['PHP_AUTH_USER'] != $login)
 || !$_SERVER['PHP_AUTH_USER'])
    {
        header('WWW-Authenticate: Basic realm="Test auth"');
        header('HTTP/1.0 401 Unauthorized');
        // OR ANY THING
}

在您的SOAP服务器中,您可以使用php://input来获取信封的原始XML,然后提取头部部分并进行验证。这样做的好处是您可以发送SOAP异常、自定义错误响应或任何您想要报告给SOAP客户端的内容。 - a77icu5

0

您可以使用PHP输入流来获取请求的原始XML,然后提取头部部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接