【问题标题】:SOAP authentication with PHP使用 PHP 进行 SOAP 身份验证
【发布时间】:2011-04-25 11:31:07
【问题描述】:

我需要连接到需要纯文本用户名和密码形式的身份验证凭据的 Web 服务。

我对 SOAP 有基本的了解,并设法使用 NuSOAP 连接到不需要用户名或密码的其他开放式 Web 服务。

以下内容已发送给我:

<?php

// Set up security options
$security_options = array("useUsernameToken" => TRUE);
$policy = new WSPolicy(array("security" => $security_options));

$security_token = new WSSecurityToken(array(
    "user" => "xxx",
    "password" => "xxx",
    "passwordType" => "basic"));

// Create client with options
$client = new WSClient(array("wsdl" => "https://xxx.asmx?wsdl",
    "action" => "http://xxx",
    "to" => "https://xxx",
    "useWSA" => 'submission',
    "CACert" => "cert.pem",
    "useSOAP" => 1.1,
    "policy" => $policy,
    "securityToken" => $security_token));

// Send request and capture response
$proxy = $client->getProxy();

$input_array = array("From" => "2010-01-01 00:00:00",
    "To" => "2010-01-31 00:00:00");

$resMessage = $proxy->xxx($input_array);
?>

经过一番研究,我了解到上述实现使用 wso2。我需要能够在不使用 wso2 的情况下做到这一点。

我已尽力寻找有关上述内容的资源(Google、论坛等),但一无所获。我已经阅读了一些关于 SOAP 的教程,并且能够使用 PHP 设置 SOAP 客户端,但无法理解所有的身份验证和“策略”。

非常感谢您解释如何实现这一点,并可能提供一些进一步阅读的链接,因为我正在撕扯我的头发!理想情况下,我想要一些资源链接,供 SOAP 身份验证的绝对初学者使用。

谢谢。 P.S 出于隐私考虑,上面的一些链接/凭据可能已被 xxx 删除。

【问题讨论】:

    标签: php authentication soap nusoap wso2


    【解决方案1】:

    【讨论】:

    • 问题是关于 PHP,而不是 Python。
    【解决方案2】:

    如果您在 php 中启用了 SOAP 扩展(php 版本 >= 5.0.1),您可以使用 SoapClient 类来处理您的请求。要进行身份验证,您可以将用户名和密码传递给具有目标 URL 的类:

    $soapURL = "https://www.example.com/soapapi.asmx?wsdl" ;
    $soapParameters = Array('login' => "myusername", 'password' => "mypassword") ;
    $soapFunction = "someFunction" ;
    $soapFunctionParameters = Array('param1' => 42, 'param2' => "Search") ;
    
    $soapClient = new SoapClient($soapURL, $soapParameters);
    
    $soapResult = $soapClient->__soapCall($soapFunction, $soapFunctionParameters) ;
    
    if(is_array($soapResult) && isset($soapResult['someFunctionResult'])) {
        // Process result.
    } else {
        // Unexpected result
        if(function_exists("debug_message")) {
            debug_message("Unexpected soapResult for {$soapFunction}: ".print_r($soapResult, TRUE)) ;
        }
    }
    

    如果您不确定可以调用的函数,您可以在浏览器中查看目标 URL(例如以“.asmx?wsdl”结尾)。您应该得到一个 XML 响应,告诉您可以调用的可用 SOAP 函数,以及这些函数的预期参数。

    【讨论】:

    • 我尝试了上述方法,并将原始代码中的额外参数包含在 $soapFunctionParameters 中,但我收到异常“需要最终收件人的操作,但消息中不存在”。您认为功能 WSPolicy 和 WSSecurity 令牌有什么作用?再说一次,我真的是一个完全的初学者。
    • 仅供参考 - $soapResult = ...soapCall() 中的 $soapFunctionParameters 拼写错误。我在搜索此信息时遇到了这个问题,并正在使用您的代码进行测试。可能无关紧要,因为这是从 2010 年开始的。
    • @gusssoap 服务器如何验证通过$soapParameters 数组传递给soapclient 的登录数据?在我的 PHP soap 服务器脚本中,$_SERVER['PHP_AUTH_USER'] 没有设置,那么我应该如何验证?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2018-06-30
    • 2011-11-12
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多