如何判断谁在调用Web服务(Apache上的PHP)

时间:2010-01-11 13:29:11

标签: php apache web-services authorization

我正在使用php的SoapServer内置类创建一个Web服务。我已经运行了一些基本的测试,似乎工作正常,但现在我需要限制谁可以使用该服务。

假设只有同一服务器上的其他脚本试图使用我的服务,并且他们会在服务器端执行此操作(而不是使用AJAX或类似方法),我的服务是否有任何方法可以识别所有者请求者?

我可以将服务限制为仅限来自特定来源的请求,但这似乎非常严格或非常不可靠,具体取决于我是否允许访问目录中的任何脚本而不是特定脚本。

我不清楚我是否可以限制用户在服务器上的访问权限,因为原始请求脚本的用户将是www。

4 个答案:

答案 0 :(得分:1)

以下是您的一些选择:

  1. 正如vivek所提到的,网址中的一个键可以解决这个问题,我已经多次使用过了,它运行良好,并且还允许您监控谁在使用该服务(不同的消费者,不同的密钥)< / p>

  2. 您可以通过IP限制脚本的使用。这就像限制的核心,我已经看到它主要用于在原始服务器之外授予服务的地方,但是VPN会是一种过度杀伤。

  3. 当然,您可能需要完全身份验证,但这在编程和有用性方面都有太多的开销。

  4. 但是,我必须问:

    1. 如果只有同一服务器上的脚本正在使用该服务,为什么要将其作为服务?
    2. 如果你有(不受限制的)页面使用这个(受限制的)服务,那么什么阻止任何人抓取这些页面 - 无论你如何努力保护服务?

答案 1 :(得分:0)

您始终可以针对您选择的数据源实施HTTP身份验证。 Apache有各种各样的选项,可以针对无数来源进行Digest和Basic auth(我们使用mod_auth_mysql来保护php webdav解决方案),但PHP也有很好的文档说明如何在应用程序级别执行此操作。

http://php.net/manual/en/features.http-auth.php

答案 2 :(得分:0)

为什么不在localhost vhost上提供Web服务?

不完全不透水,但实际上却相对简单。

或者在防火墙端口上运行的虚拟主机?

下进行。

答案 3 :(得分:-1)

您可以使用注册密钥作为最着名的API,例如天气错误......

因此,当请求进入时,您可以检查代码并查看用户是否已注册使用您的API。