gpt4 book ai didi

php - 如何在 PHP 中验证非 wsdl soap

转载 作者:可可西里 更新时间:2023-11-01 12:18:23 25 4
gpt4 key购买 nike

我用这种方式从服务器端获取数据到客户端。但我有一个问题验证服务器文件。

我想在授予读取数据权限之前检查用户名和密码。我尝试使用一种额外的方法,但它不起作用。

服务器

class MyService
{
public function add($x, $y)
{
return $x + $y;
}
}

$options = array(
'uri' => 'http://server/namespace',
'location' => 'http://server/location',
);

$server = new SOAPServer(null, $options);
$server->setObject(new MyService());
$server->handle();

客户端

$options = array(
'uri' => 'http://server/namespace',
'location' => 'http://server/location',
);
$client = new SOAPClient(null, $options);
echo $client->add(10, 10);

最佳答案

如果您可以接受硬编码的用户名和密码以及 HTTP 基本身份验证,那么您可以将以下代码放在服务器文件的顶部:

if (! isset($_SERVER['PHP_AUTH_USER']) ||
$_SERVER['PHP_AUTH_USER'] !== 'foo' ||
$_SERVER['PHP_AUTH_PW'] !== 'bar') {
header('WWW-Authenticate: Basic realm="My service"');
header('HTTP/1.1 401 Unauthorized');
echo 'Unauthorized';
exit;
}

这将检查 HTTP 身份验证数据是否存在,如果不存在,将向客户端发送 HTTP 401 错误。如果存在身份验证数据,将根据硬编码的用户名 foo 和密码 bar 对其进行验证。

为了从客户端脚本传递用户名/密码,调整客户端中的$options如下:

$options = array(
'uri' => 'http://server/namespace',
'location' => 'http://server/location',
'login' => 'foo', // username
'password' => 'bar' // password
);
$client = new SOAPClient(null, $options);

请注意,HTTP 基本身份验证是最简单的设置,但用户名和密码将以准纯文本形式传输到服务器。因此,您至少应该为服务端点使用 SSL,以便所有通信都得到加密。

HTTP 摘要式身份验证更安全,因为它只会发送凭据的哈希值,但需要做更多的设置工作。一个好的起点是 the HTTP authentication page in the PHP manual .

为了在服务器端验证接收到的用户名/密码数据,您可能还希望使用具有有效用户名/密码/登录 token 的数据库,而不是示例中的硬编码凭据。

关于php - 如何在 PHP 中验证非 wsdl soap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31751719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com