Веб-служба RESTful - как аутентифицировать запросы от других служб?

Я разрабатываю веб-службу RESTful, к которой должны иметь доступ пользователи, а также другие веб-службы и приложения. Все входящие запросы должны быть аутентифицированы. Все коммуникации происходят по HTTPS. Аутентификация пользователя будет работать на основе токена аутентификации, полученного путем POST-отправки имени пользователя и пароля (через SSL-соединение) в ресурс / session , предоставляемый службой.

В случае веб-службы. клиентов, за клиентской службой нет конечных пользователей . Запросы инициируются запланированными задачами, событиями или некоторыми другими компьютерными операциями. Список подключаемых услуг известен заранее (очевидно, догадываюсь). Как мне аутентифицировать эти запросы, поступающие от других (веб) сервисов? Я хочу, чтобы процесс аутентификации был максимально простым для реализации для этих сервисов, но не за счет безопасности. Каковы были бы стандартные и передовые методы для такого сценария?

Варианты, которые я могу придумать (или были предложены мне):

  1. Прибегают ли клиентские службы к использованию «поддельных» имени пользователя и пароля, и аутентифицировать их так же, как и пользователей. Мне не нравится этот вариант - он просто кажется неправильным.

  2. Назначьте постоянный идентификатор приложения для клиентской службы, возможно, также ключ приложения. Насколько я понял, это то же самое, что и имя пользователя + пароль. С помощью этого идентификатора и ключа я могу либо аутентифицировать каждый запрос, либо создать токен аутентификации для аутентификации дальнейших запросов. В любом случае, мне не нравится этот вариант, потому что любой, кто может получить идентификатор приложения и ключ, может выдать себя за клиента.

  3. Я мог бы добавить проверку IP-адреса к предыдущему варианту. Это затруднит выполнение поддельных запросов.

  4. Сертификаты клиентов. Настроить собственный центр сертификации, создать корневой сертификат и создать клиентские сертификаты для клиентских служб. Однако на ум приходит пара вопросов: а) как мне разрешить пользователям аутентифицироваться без сертификатов и б) насколько сложен этот сценарий для реализации с точки зрения клиентского сервиса?

  5. Что-то еще - должно быть другие решения?

Моя служба могла бы работать на Java, но я намеренно упустил информацию о том, на какой конкретной платформе она будет построена, потому что меня больше интересуют основные принципы, а не детали реализации -Я предполагаю, что лучшее решение для этого будет возможно реализовать независимо от базовой структуры. Однако я немного не разбираюсь в этом предмете, поэтому конкретные советы и примеры по фактической реализации (такие как полезные сторонние библиотеки, статьи и т. Д.) Также будут очень признательны.

115
задан Tommi 31 May 2011 в 05:36
поделиться