Как узнать, кто вызывает веб-сервис (PHP на Apache) - PullRequest
2 голосов
/ 11 января 2010

Я создаю веб-сервис, используя встроенный класс php SoapServer.Я выполнил некоторые базовые тесты, и, похоже, все работает нормально, но теперь мне нужно ограничить число тех, кто может использовать сервис.

Предполагая, что только другие скрипты на том же сервере пытаются использовать мой сервис, и чтоони будут делать это на стороне сервера (в отличие от AJAX или аналогичных средств), имеет ли моя служба какие-либо средства для идентификации владельца запрашивающей стороны?

Я мог бы ограничить доступ к службе только запросами, поступающими отконкретное происхождение, но это кажется либо очень строгим, либо очень ненадежным, в зависимости от того, разрешу ли я доступ к любому сценарию в каталоге, а не только к конкретным сценариям.

Мне просто не ясно, могу ли я ограничить доступ с помощьюпользователь на сервере, так как пользователь, для которого исходный запрашивающий скрипт будет www.

Ответы [ 4 ]

1 голос
/ 11 января 2010

вот некоторые из ваших вариантов:

  1. , как упомянул Вивек, ключ в URL-адресе мог бы сработать, я использовал это много раз, и он прекрасно работает, а также позволяет отслеживать, кто потребляет услугу (разные потребители, разные ключи)

  2. вы можете ограничить использование скриптов по IP. это похоже на нюансы ограничений, я видел, что он используется в основном в местах, где обслуживание предоставляется за пределами исходного сервера, но где VPN будет излишним.

  3. конечно, вам может потребоваться полная аутентификация, но это требует слишком много накладных расходов, как с точки зрения программирования, так и с точки зрения полезности.

однако я должен спросить:

  1. если только сценарии на одном и том же сервере потребляют службу, зачем вообще делать ее службой?
  2. если у вас есть (неограниченные) страницы, которые используют эту (ограниченную) услугу, что мешает кому-либо удалить эти страницы - независимо от того, насколько сильно вы защищаете службу?
0 голосов
/ 13 января 2010

Почему бы просто не сделать веб-сервис доступным на локальном хосте vhost?

Не совсем водонепроницаемо, правда, но относительно просто в реализации.

Или на виртуальном хосте, работающем в брандмауэре?

C.

0 голосов
/ 11 января 2010

Вы всегда можете реализовать HTTP-аутентификацию на выбранном вами источнике данных. В Apache есть различные варианты выполнения Digest и Basic auth для множества источников (мы используем mod_auth_mysql для защиты решения php webdav), но PHP также имеет хорошую документацию о том, как это сделать на уровне приложения.

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

0 голосов
/ 11 января 2010

Вы можете использовать регистрационный ключ, как это делают большинство известных API, например, ошибка погоды ....

поэтому при поступлении запроса вы можете проверить код и посмотреть, зарегистрировался ли пользователь для использования вашего API.

...