Предотвращение использования моих REST API из-за пределов моего собственного клиентского JS-приложения

Я создал приложение AngularJS, вызывающее некоторые REST API, принадлежащие моему собственному бэкэнду (используя Play! 2.2).

Я использую клиент Facebook OAuth для аутентификации своих пользователей.
Так как это приложение JavaScript, мой токен приложения Facebook не может быть "скрытым".

Таким образом, любой, кто получил токен приложения Facebook, просто прочитав код Javascript, мог получить токен доступа пользователя «легальным» способом и, следовательно, использовать мой REST API.

Как я могу предотвратить это?
Как лучше всего?

Я думаю, что одним из способов было бы использование механизма Facebook OAuth на стороне сервера, а не Facebook Javascript SDK.
В этом случае секрет приложения Facebook будет храниться на моем сервере и недоступен извне.

Но, будучи одностраничным приложением на стороне клиента, я действительно хочу избежать перенаправления страниц и воспользоваться функцией «всплывающее окно», которая поставляется с Facebook Javascript SDK.


person Mik378    schedule 02.04.2014    source источник
comment
Одним из способов может быть настройка авторизованного домена в настройках приложения facebook (myDomain.com), чтобы сделать этот домен исключительной аутентификацией. Будет ли это достаточно безопасно?   -  person Mik378    schedule 02.04.2014
comment
один интересный пост, который действительно может быть ответом :) stackoverflow. ком/вопросы/21253272/. Объяснение в данном ответе.   -  person Mik378    schedule 02.04.2014


Ответы (1)


Есть несколько вещей, которые вы можете сделать.

Использование потока OAuth на стороне сервера («кода») для аутентификации в Facebook намного безопаснее. Вы по-прежнему можете избежать перенаправления, открыв свое собственное всплывающее окно, чтобы инициировать последовательность входа в систему, аналогичную тому, что делает Facebook JS (только сначала он идет на ваш сервер).

Включение HTTPS в вашем приложении обычно является хорошей практикой...

И если вы беспокоитесь о межсайтовых подделках, вы можете реализовать что-то вроде токена состояния защиты от подделки. См. http://blog.codinghorror.com/preventing-csrf-and-xsrf-attacks/, а также инструкции Google здесь https://developers.google.com/accounts/docs/OAuth2Login#createxsrftoken .

person Rotem Hermon    schedule 06.04.2014
comment
Кажется, что даже с Facebook Javascript SDK мы можем обеспечить довольно надежную защиту, разрешив правильное происхождение токена (домен) в настройках приложения и проверяя токен доступа с помощью Debug tool перед каждым использованием. developers.facebook.com/docs/facebook-login/security - person Mik378; 06.04.2014
comment
Верно, но если ваше приложение не использует HTTPS, я бы не рекомендовал передавать пользовательские токены. - person Rotem Hermon; 06.04.2014