Подтвердить что ты не робот

Facebook JS SDK не нуждается в приложении для аутентификации: насколько это безопасно?

Когда я использую JS SDK для проверки подлинности своего приложения (используя метод FB.init), все, что мне нужно, это мой идентификатор приложения. Это не требует моего секретного приложения и/или ключа приложения. Однако, когда я использовал PHP SDK, он требовал, чтобы мое приложение было секретным (по крайней мере, пример, который я использовал для изучения, использовал идентификатор приложения и секрет приложения как).

Безопасно ли и рекомендуется использовать JS SDK для аутентификации? Как действительно происходит процесс аутентификации с JS SDK?

Спасибо, Vineet

4b9b3361

Ответ 1

Я изучаю, насколько безопасна и аутентификация. Я думаю, что все изменилось с тех пор, как вы задали этот вопрос q, поэтому, возможно, эта информация была неправильной, когда вы спросили.

В новой версии JS SDK используется OAuth 2.0. Это хорошо документировано. Подробнее см. сайт OAuth 2.0.

Относительно вопроса о том, нуждается ли SDK в приложении, секрет - у меня немного путаница, связанная с этим. На стороне сервера приложений библиотеки показывают, что JS SDK подписывает файлы cookie, используя секрет приложения (см. Функцию get_user_from_cookie в facebook-python sdk) - однако мне совершенно непонятно, как JS SDK может знать секрет приложения. Я предполагаю, что он может получить его динамически из FB, когда он разговаривает с FB непосредственно в процессе аутентификации, но я не уверен.

(Edit: Я думаю, что JS SDK получает cookie, подписанный с тайном приложением непосредственно из FB - JS SDK никогда не знает секрет приложения).

Не полностью отвечающий на ваш q, но, возможно, проливающий немного больше света на то, как это работает.

Ответ 2

Еще одна проблема, о которой нужно опасаться, - не использовать объект пользователя FB, который вы получаете от клиента, для чего-либо на стороне сервера. Это связано с тем, что для кого-то действительно было бы сделать script, который вместо вызова fb.api '/me' отправил бы "поддельный" пользовательский объект JSON с другим идентификатором пользователя в ваше приложение. Если вы выполняете какую-либо обработку на стороне сервера пользователя, тогда вам действительно нужно сделать некоторую аутентификацию на стороне сервера, я думаю.

Ответ 3

Это НЕ безопасно, поэтому у вас есть пункты "Проверить поля" и "Не проверять подпись" в Advanced Регистрация:

Когда вы запрашиваете данные в facebook, мы проверьте поля формы до упаковывая их в signed_request. Это позволяет предположить что все данные являются подлинными и сохраняют вам от необходимости проверять вещи. одна из проблем, которая может возникнуть, - это умный злоумышленник может изменить форму полей и представить их вам, тем самым давая вам непроверенные данные.

Прочтите этот документ для получения дополнительной информации, я также написал tutorial (введение о плагине) и показал, как обращаться атрибут fields, исходящий с клиентской стороны.