Как Facebook аутентифицирует/авторизует своих официальных клиентов?

Давайте посмотрим на Facebook в этом примере.

Я предполагаю, что FB использует собственный публичный API (а также внутренние, которые только они могут использовать), и поскольку они используют OAuth 2, было бы безопасно предположить, что у них есть "специальные регистрации клиентов" с разрешением использовать ресурс Credential Credential для владельца ресурса?

Как вы знаете, при входе в Facebook из собственных официальных приложений они не открывают браузер, спрашивая вас, может ли разрешить Facebook использовать Facebook, поэтому , если они сами используют OAuth, как они это делают безопасно?

Мы все читали, что Twitter получил утечку своих потребительских ключей, как Facebook избегает этого?

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

В соответствии с спецификацией OAuth 2 собственные приложения должны не включать секреты клиента, но как это делает вещи лучше? То, как я это вижу, если вы не включаете этот секрет, и ваш идентификатор клиента извлекается и используется для предоставления пароля, единственный способ отменить его - полностью удалить идентификатор клиента с вашего сервера авторизации.

Я пропустил что-то очевидное здесь? Как это делают "большие парни"?

Ответы

Ответ 1

Большая разница в том, что официальное приложение Facebook знает ваше имя пользователя и пароль и поэтому не нужно вызывать браузер, потому что они могут напрямую аутентифицироваться.

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