При интеграции Facebook Вход в приложение, есть, по существу, 2 (OK, есть больше, чем 2, но на этот вопрос я просто озабочен этими 2) способы, чтобы получить маркер доступа:Как только собственный клиент Facebook заблокирован, если вы никогда не отправляете секрет вашего клиента, чтобы получить токен доступа?
- Имейте FB, чтобы вернуть код в свое приложение, которое вы затем обмениваете на токен доступа на свой сервер, добавив секрет вашего клиента. Клиент делает такой вызов: https://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=REDIRECT_URI&response_type=code, а затем сервер, обрабатывающий URI перенаправления, передает код и клиентский секрет на FB, чтобы получить токен доступа.
- Имейте FB, чтобы вернуть токен аутентификации прямо на свое приложение в URL-адрес переадресации: https://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=REDIRECT_URI&response_type=token. В этом случае токен возвращается непосредственно клиенту в фрагменте URL-адреса.
(Выше информация взяты из https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/v2.2)
Таким образом, мой вопрос заключается в том, как это второй метод, в котором FB возвращает маркер непосредственно в безопасности, когда вы никогда не должны были доказать клиенту, кто он говорит, что он ? Есть ли у токенов, возвращаемых во втором случае, меньше разрешений, чем в первом случае? Я знаю в Интернете, по умолчанию клиенты получают короткое замыкание (например, 2-часовой токен), но если вы используете SDK для Android или iOS, вы получаете долгоживущие токены, даже если вы никогда не передаете секрет клиента. Таким образом, связанный с этим вопрос заключается в том, каким образом Android-и iOS-SDK от Facebook действительно будут уверены, что клиентское приложение - это то, о ком он говорит, что это (клиентское приложение всегда может быть разобрано, а кто-то может украсть любую информацию, которую вы отправляете в приложении)?
Принципиально я пытаюсь понять, как потоки oauth, которые отправляют токен непосредственно клиенту, без необходимости защищать секретную информацию на стороне сервера, могут быть безопасными.
Спасибо! Тем не менее я до сих пор неясно, как это безопасно с неявным грантом: 1. Предположим, что я - Facebook, и я хочу предоставить TrustedAppDeveloper возможность публиковать обновления статуса от имени пользователей. 2. TrustedAppDeveloper приходит и регистрирует свое приложение, и я (как FB) подтверждаю, что они хороши. 3. Что нужно, чтобы BadAppDeveloper не создавал мобильное приложение, которое загружает веб-просмотр для доступа к https://www.fb.com/dialog/oauth?client_id=TrustedAppDevId&redirect_uri=...&response_type=token, а затем публикует спам-сообщения на фид пользователя (и теперь он СМОТРЕТЬ, как спам поступает из TrustedAppDev)? – adevine
предпосылка заключается в том, что пользователь не устанавливает приложение из BadAppDeveloper, потому что либо приложение-хранилище будет фильтровать его, либо сам пользователь распознает его как вредоносное приложение; вы правы, что это слабое место –