Ответ 1
Пояснение: мобильное приложение = родное приложение
Как отмечалось в других комментариях и нескольких источниках в Интернете, неявное выглядит как естественная подгонка для мобильных приложений, однако лучшее решение не всегда четко определено (и фактически неявное не рекомендуется по причинам, обсуждаемым ниже).
Собственное приложение OAuth2 Best Practices
Какой бы подход вы ни выбрали (есть несколько компромиссов, на которые следует обратить внимание), вы должны обратить внимание на лучшие практики, изложенные здесь для собственных приложений, использующих OAuth2: https://tools.ietf.org/html/rfc8252
Рассмотрим следующие варианты
Неявные
Должен ли я использовать неявное?
Цитировать из раздела 8.2 https://tools.ietf.org/html/rfc8252#section-8.2
Поток авторизации неявного предоставления OAuth 2.0 (определенный в Разделе 4.2 OAuth 2.0 [RFC6749]) обычно работает с практикой выполнения запроса авторизации в браузере и получения ответа на авторизацию посредством связи между приложениями на основе URI.
Однако, поскольку неявный поток не может быть защищен PKCE [RFC7636] (что требуется в разделе 8.1), использование неявного потока с собственными приложениями НЕ РЕКОМЕНДУЕТСЯ.Токены доступа, предоставленные неявным потоком, также нельзя обновить без взаимодействия с пользователем, что делает поток предоставления кода авторизации - который может выдавать токены обновления - более практичный вариант для собственных авторизаций приложений, которые требуют обновления токенов доступа.
Код авторизации
Если вы используете код авторизации, то одним из подходов будет прокси через собственный компонент веб-сервера, который обогащает запросы токенов секретом клиента, чтобы избежать его хранения в распределенном приложении на устройствах.
Выдержка из: https://dev.fitbit.com/docs/oauth2/
Поток предоставления кода авторизации рекомендуется для приложений, которые есть веб-сервис. Этот поток требует обмена данными между серверами используя секретный ключ приложения.
Примечание. Никогда не храните секрет клиента в распределенном коде, например в приложениях. загружено через магазин приложений или клиентский JavaScript.
Приложения, которые не имеют веб-службы, должны использовать неявное Грант потока.
Заключение
Окончательное решение должно учитывать как ваш желаемый пользовательский опыт, так и ваш аппетит к риску после надлежащей оценки риска ваших подходов, включенных в короткий список, и лучшего понимания последствий.
Отличное чтение здесь https://auth0.com/blog/oauth-2-best-practices-for-native-apps/
Еще один https://www.oauth.com/oauth2-servers/oauth-native-apps/, который гласит
В настоящее время наилучшей практикой в отрасли является использование потока авторизации. опуская секрет клиента, и использовать внешний пользовательский агент для завершить поток. Внешний пользовательский агент, как правило, устройства собственный браузер (с отдельным доменом безопасности от собственного приложения) так что приложение не может получить доступ к хранилищу файлов cookie или проверить или изменить содержимое страницы в браузере.
Рассмотрение PKCE
Вы также должны рассмотреть PKCE, который описан здесь https://www.oauth.com/oauth2-servers/pkce/
В частности, если вы также внедряете Сервер авторизации, то https://www.oauth.com/oauth2-servers/oauth-native-apps/checklist-server-support-native-apps/ заявляет, что вам следует
- Разрешить клиентам регистрировать собственные схемы URL для своих URL перенаправления.
- Поддержка петлевых IP-адресов перенаправления с произвольными номерами портов для поддержки настольных приложений.
- Не думайте, что нативные приложения могут держать в секрете. Требовать от всех приложений указывать, являются ли они общедоступными или конфиденциальными, и передавать секретные приложения только конфиденциальным приложениям.
- Поддержите расширение PKCE и потребуйте, чтобы его использовали общедоступные клиенты.
- Попытайтесь определить, встроен ли интерфейс авторизации в веб-представление собственных приложений, а не запущен в системном браузере, и отклонить эти запросы.
Рассмотрение веб-просмотров
Существует множество примеров использования Web Views, то есть встроенного агента user-, но такого подхода следует избегать (особенно когда приложение не является стороной first-), и в некоторых случаях может привести к тому, что вам будет запрещено использовать API в качестве выдержка из здесь демонстрирует
Любая попытка встроить страницу аутентификации OAuth 2.0 приведет к Ваше приложение заблокировано в API Fitbit.
В целях безопасности страница авторизации OAuth 2.0 должна быть представлены в специальном браузере. Пользователи Fitbit могут только подтвердить они аутентифицируются на подлинном сайте Fitbit.com, если у них есть инструменты, предоставляемые браузером, такие как адресная строка и транспорт Информация о сертификате безопасности уровня (TLS).
Для нативных приложений это означает, что страница авторизации должна открываться в браузере по умолчанию. Собственные приложения могут использовать собственные схемы URL как URI перенаправления, чтобы перенаправить пользователя обратно из браузера в приложение запрашивает разрешение.
Приложения iOS могут использовать класс SFSafariViewController вместо приложение переключается на Safari. Использование класса WKWebView или UIWebView запрещено.
Приложения Android могут использовать пользовательские вкладки Chrome вместо приложения переключение на браузер по умолчанию. Использование WebView запрещено.
Для дальнейшего уточнения приведем цитату из этого раздела предыдущего варианта ссылки на передовую практику, приведенную выше
. Встроенные user- агенты, обычно реализуемые с веб-представлениями, являются альтернативный метод авторизации нативных приложений. Они однако небезопасно для использования третьими лицами по определению. Они вовлекают пользователя войдите в систему с полными учетными данными, чтобы иметь их понижен до менее мощных учетных данных OAuth.
Даже при использовании доверенными сторонними приложениями first-, встроенные user- агенты нарушать принцип наименьших привилегий, получая более учетные данные, которые им необходимы, потенциально увеличивая поверхность атаки.
В типичных реализациях встроенных агентов user- на основе веб-представления хост-приложение может: регистрировать каждое нажатие клавиши, введенное в форму, в захватывать имена пользователей и пароли; автоматически отправлять формы и обходить user- согласие; копировать куки сессии и использовать их для выполнения Аутентифицированные действия пользователя.
Поощрение пользователей вводить учетные данные во встроенном веб-представлении без обычная адресная строка и другие функции идентификации, которые есть в браузерах делает невозможным для пользователя знать, если они входят в законный сайт, и даже когда они есть, он обучает их, что это нормально вводить учетные данные без предварительной проверки сайта.
Помимо проблем безопасности, веб-просмотры не разделяют состояние аутентификации с другими приложениями или системным браузером, требующее пользователь войти в систему для каждого запроса авторизации и приводит к плохой пользовательский опыт.
В связи с вышеизложенным, использование встроенных агентов user- НЕ РЕКОМЕНДУЕТСЯ, за исключением случаев, когда доверенное приложение стороны first- действует как внешнее user- агент для других приложений или обеспечивает единый вход для нескольких пользователей first- приложения для вечеринок.
Серверы авторизации ДОЛЖНЫ рассмотреть возможность принятия мер для обнаружения и блокировки вход через встроенных user- агентов, которые не являются их собственными, где возможно.
Здесь также поднимаются некоторые интересные моменты: https://security.stackexchange.com/questions/179756/why-are-developers-using-embedded-user-agents-for-3rd-party-auth-what-are-the-a