Как 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)