четверг, 18 сентября 2008 г.

OpenSocial - авторизированные изменения на внешнем сервере

В OpenSocial (по крайней мере версии 0.7) есть возможность хранить пользовательские данные в самом контейнере. Мне необходимо также (или вместо) хранить эти данные на моем сервере.

В версии 0.8 возможно будут какая-то интеграция с OAuth, так как там появляется дополнительные интерфейсы, для работы по принципу REST с внешними серверами. Однако в версии 0.7 такого нет.

Очевидно, надо вывесить какой-то внешний интерфейс, при вызове которого (обязательно методом POST) можно записывать данные. Но надо как-то авторизовывать эти вызовы (подразумевается злоумышленник знает url этого интерфейса). Как-то надо ограничивать вызовы только с моего приложения.

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

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

Также, остается еще возможность перехвата трафика и выуживания оттуда ID - но этот вариант мы не рассматриваем как маловероятный, и решающийся с помощью SSL.

Any ideas or suggestions?

UPDATE: В OpenSocial 0.8 с этим все хорошо, смотрим использование параметра gadgets.io.AuthorizationType.SIGNED. Осталось узнать как с этим в 0.7 (вроде этот параметр есть) и даже если он есть, как с его поддержкой в наших отечественных социальных сетях (вернее, пока единственной сети поддерживающей OpenSocial – МойМир).

Комментариев нет: