обеспечение доступа к сервису ядра приложения - PullRequest
1 голос
/ 02 марта 2012

У меня есть Java-сервис GAE со следующими точками доступа:

getCost (ID)

setCost (идентификатор, newCost)

на домене: myService.appspot.com

У меня также есть внешнее php-приложение на: frontend.different-domain.com

, который должен быть в состоянии получить доступ к этим двум конечным точкам. getCost может быть публично доступен любому, но мне было интересно, как я могу защитить конечную точку setCost (), чтобы ограничить ее только запросами, поступающими с frontend.different-domain.com

Я бы хотел, чтобы случайные люди не звонили через setCost и не меняли цену.

спасибо

Ответы [ 2 ]

0 голосов
/ 23 апреля 2014

Еще более простой метод будет использовать заголовок X-Appengine-Inbound-Appid: https://developers.google.com/appengine/docs/java/appidentity/#Java_Asserting_identity_to_other_App_Engine_apps

0 голосов
/ 02 марта 2012

Самое простое из возможных решений в вашем случае - сгенерировать подпись на PHP-интерфейсе и включить ее в данные запроса вместе с другими параметрами.Затем ваш сервис AppEngine самостоятельно вычисляет подпись, и если вычисленная подпись совпадает с подписью, отправленной вами в запросе, запрос считается подлинным.

Вы генерируете подпись, используя какой-то секретный ключ, который известен только вашему php-интерфейсуи бэкэнд App Engine.Я программист Python, поэтому я не могу сказать вам, как это будет выглядеть в Java или php, но вам нужно выполнить следующие шаги:

В приложении php:

  1. Конкатенацияваш секрет с данными запроса, например, SECRET_KEYid5newCost537
  2. Рассчитать подпись как хэш MD5 из приведенной выше строки.
  3. Включить эту подпись в запрос.

В App Engineapp:

  1. Извлечение signature, id и newCost из данных запроса.
  2. Вычисление signature1 с использованием того же алгоритма, что и в приложении php (то есть хэш MD5секретный ключ плюс данные, извлеченные из запроса).
  3. Сравните signature и signature1.Если они равны, запрос является подлинным.
  4. Создайте собственную логику на основе результата сравнения.

Этот метод несколько похож на то, как работает подписание запросов в oAuth.Обратитесь к документации oAuth для получения дополнительной информации.

Также, если ваш вариант использования более сложный, чем указано в вашем вопросе, вы можете рассмотреть возможность использования oAuth с вашим Java-приложением .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...