У меня есть две системы, которые должны общаться. Системы настроены как:
System A
, запуск Django (Python 2.5) в Google App Engine (GAE)
System B
, запуск Django (Python 2.6) в Ubuntu / Linux через Lighttpd (возможно, nginx, позже)
Система A будет периодически отправлять запросы («реквизиции») системы B, используя Url Fetch .
Система B имеет настройку приложения Django для прослушивания этих запросов с urls.py
с чем-то вроде:
urlpatterns = patterns('producer.views',
url(r'^requisition$', 'requisition', name='requisition'),
)
И соответствующий views.py
с чем-то вроде:
import json
from django.http import HttpResponse
def requisition(request):
" do something "
response = HttpResponse()
response['Content-type'] = 'application/json'
response.write(json.dumps(...))
return response
Было бы ценным дополнением к безопасности системы, если бы система B отвечала на заявки только из системы A.
Я хотел бы знать, какие параметры доступны для системы B, чтобы проверить, поступили ли запросы от системы A. Я рассмотрел следующее:
- Проверьте, что IP-адрес от GAE (однако я не знаю, IP-адреса GAE, они могут измениться, и они могут быть подделаны)
- Убедитесь, что обратный DNS IP-адреса получен от GAE (однако я не знаю, что такое записи DNS GAE, если они изменятся и могут быть подделаны)
- Используйте клиентский сертификат TLS из системы A, но я не знаю, как это сделать с GAE
- Выполните вызов / ответ, основанный на чем-то общем, например, на соли, с pycrypto
В идеале я хочу закончить с views.py
чем-то подобным:
...
from django.http import HttpResponseForbidden
def requisition(request):
" do something "
if not verify_request_origin():
return HttpResponseForbidden("Denied.")
response = HttpResponse()
...
Где verify_request_origin () возвращает true, когда запрос к System B
был от System A
в GAE.
Спасибо, и я с нетерпением жду ваших мыслей.