2010-01-11 2 views
2

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

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

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

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

ответ

-1

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

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

+0

Я устанавливаю его как переменную GET для фактического обслуживания? Пользователь будет вызывать службу как 'mywebservice.php? Key = 1234'? И тогда я бы посмотрел на ключ в самом сервисе? – Anthony

+0

@ Энтони, спасибо за проголосовать. Насколько мне известно, многие публичные API веб-сервисов (Yahoo, Weather Bug) требуют, чтобы разработчик зарегистрировался после этого, им будет предоставлен ключ, который при запросе на услугу должны пройти в качестве аргумента. В .net метод 'called' называется веб-методом (если вы являетесь .net devpr, простите меня) , и поэтому, когда метод вызывается на веб-сервере, он kindful проверяет меня как resgitered пользователя API. То, что я имел в виду не "mywebservice.php? Key = 1234?" Но через XML –

+0

@Vivek: здесь нет голоса. Я недостаточно разбираюсь в этой теме, чтобы хорошо разбираться в плохом, или я не буду спрашивать (или задавать вопросы). Извините, что кто-то еще почувствовал, что он выключен. Но Нир дает вашему методу сильное одобрение. – Anthony

0

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

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

+0

Я читаю информацию по вышеуказанной ссылке, но мое первоначальное впечатление от их примера заключается в том, что это для аутентификации конечных пользователей. Я хочу проверить подлинность доступа к серверу на стороне сервера, а это означает, что пользователь должен произойти на странице, которая пыталась использовать эту услугу, и владелец страницы не зарегистрировался, пользователь увидит только общий «отказ в доступе», ошибка, возвращаемая службой, а не приглашение для учетных данных и т. д. Мое главное колебание с использованием метода проверки подлинности (по крайней мере, на данном этапе) заключается в том, что если использование службы ограничено сервером, я не уверен ... – Anthony

+0

что мне понадобится разработчик для запроса пароля. Мне просто нужно знать, что владелец скрипта, делающего вызов, находится в зарегистрированном списке. Или я делаю дыру в безопасности с такими простыми критериями? – Anthony

+0

Чтобы сделать проблему намного проще, я бы хотел, чтобы на этом этапе была возможность использовать файл .htaccess для ограничения доступа, но я не уверен, к чему именно я ограничиваю доступ, поскольку я не уверен что служба видит в терминах «пользователь». Наверное, мне нужно больше узнать об аутентификации HTTP. – Anthony

1

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

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

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

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

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

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

Это сервис, потому что он будет иметь доступ к элементам на других серверах. Честно говоря, я не совсем понимаю, почему мой клиент говорит, что он должен быть веб-службой, но я знаю, что у службы есть доступ к информации, которая в противном случае ограничивается администратором, выполняющим свои учетные данные. С точки зрения того, почему его услуга, хотя она ограничена одним и тем же сервером: это очень большой сервер с большим количеством разработчиков, и цель состоит в том, чтобы ограничить информацию, предоставляемую разработчикам, которые регистрируются для этой услуги (и таким образом устанавливают законная потребность). – Anthony

+0

Что касается пункта 2: я не уверен, что вы подразумеваете под неограниченными страницами. Служба будет использоваться в одном из двух сценариев: 1) для конечных пользователей вход в систему, для серверных запросов для запросов конечных пользователей и их возврата (так что единственное, что было сделано, - это регистрация конечным пользователем, чтобы получить их собственная информация); 2) агент регистрируется на очень ограниченной странице и выполняет запросы о различных конечных пользователях, которые возвращаются службой. Таким образом, ни один сценарий не является общедоступным, но не подразумевает ограничения для сценария/разработчика, использующего эту службу. В лучшем случае он ограничен зарегистрированным пользователем. – Anthony

+0

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

0

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

Не полностью водонепроницаемый, по общему признанию, но относительно прост в применении.

Или на vhost работает на межсетевом экране?

C.

Смежные вопросы