Facebook OAuth и URI перенаправления

Глядя на подключение Google OpenId и вход в Facebook, я заметил, что Facebook всегда использует «URI перенаправления» из браузера. Чтобы объяснить немного больше - когда пользователь переходит по ссылке формы

https://www.facebook.com/dialog/oauth?client_id={app-id}&redirect_uri={redirect-uri}

Он/она всегда перенаправляется на URL-адрес, указанный {redirect-uri}. Затем этот URL-адрес содержит «код», который можно обменять на токен доступа.

У Google аналогичный подход, но при использовании «серверного потока» {redirect-uri} «поражается» серверами Google. Таким образом, код, который необходимо обменять на токен доступа, никогда не будет показан пользователю.

Похоже, что подход FB менее безопасен, поскольку код доступа может оказаться в руках злоумышленника.

  1. Есть ли способ, чтобы FB отправлял код на URI перенаправления, но не перенаправлял клиента? Что-то вроде того, что делает Google.
  2. Есть ли у кого-нибудь хорошее объяснение, почему FB не имеет поведения, подобного «серверному потоку», а только «неявный поток»?

person markovuksanovic    schedule 24.08.2014    source источник
comment
«поскольку код доступа действительно может оказаться в руках злоумышленника» — и где это может быть, где злоумышленник будет вмешиваться в процесс? А чтобы обменять код на токен, нужен еще и секрет приложения — откуда его может взять злоумышленник? Если какая-то часть вашего ответа содержит «ну, он каким-то образом взломал мой сервер/мой код на стороне сервера» — тогда другой подход, когда скрипт на вашем сервере «ударяется» сервером Google, никоим образом не является «безопаснее».   -  person CBroe    schedule 24.08.2014
comment
Ну, это было более гипотетически. Теоретически злоумышленник может сфотографировать экран жертвы, и, если экран достаточно большой, код будет там. Если злоумышленник является частью какой-либо команды разработчиков, он может быть частью команды разработчиков и иметь доступ к секретному ключу. Маловероятно, но я видел подобную атаку (правда, не с FB, а с каким-то другим сервисом).   -  person markovuksanovic    schedule 24.08.2014
comment
После того, как ваше приложение обменяло код на токен, его нельзя будет использовать во второй раз… так что вашему злоумышленнику не только потребуются те более чем экстраординарные обстоятельства, которые вы описали, он также должен будет действовать очень быстро… крайне маловероятно . Я думаю, что шансы на то, что ваш пользователь просто будет вынужден отказаться от своих учетных данных под дулом пистолета, будут более вероятными, чем это.   -  person CBroe    schedule 24.08.2014


Ответы (1)


Вы должны получить код с сервера, а затем использовать его вместе с секретом вашего приложения для обмена токеном доступа на Facebook. Неважно, увидит ли это клиент, потому что без секрета приложения этот код бесполезен. И секрет приложения хранится на вашем сервере, он никогда не раскрывается клиенту.

person kevin    schedule 24.08.2014