Уточнение: мобильное приложение = собственное приложение
Как указано в других комментариях и нескольких источниках в Интернете, неявный вид кажется естественным подходом для мобильных приложений, однако лучшее решение не всегда однозначно (и на самом деле неявный не рекомендуется по причинам, обсуждаемым ниже).
Рекомендации по OAuth2 для собственных приложений
Какой бы подход вы ни выбрали (есть несколько компромиссов, которые следует учитывать), вам следует обратить внимание на передовые практики, изложенные здесь для собственных приложений с использованием 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-адресов перенаправления.
- Поддержка петлевых URL-адресов перенаправления IP с произвольными номерами портов для поддержки настольных приложений.
- Не думайте, что нативные приложения могут хранить секреты. Требовать, чтобы все приложения объявляли, являются ли они общедоступными или конфиденциальными, и выдают секреты клиента только конфиденциальным приложениям.
- Поддерживайте расширение PKCE и требуйте, чтобы его использовали общедоступные клиенты.
- Попытка определить, когда интерфейс авторизации встроен в веб-представление собственного приложения, а не запущен в системном браузере, и отклонить эти запросы.
Рассмотрение веб-просмотров
Существует множество примеров использования веб-представлений, то есть встроенного пользовательского агента, но этого подхода следует избегать (особенно, когда приложение не является основным), и в некоторых случаях может привести к тому, что вам запретят использовать API в качестве выдержки. ниже отсюда демонстрирует
Любая попытка встроить страницу аутентификации OAuth 2.0 приведет к блокировке вашего приложения в Fitbit API.
В целях безопасности страница авторизации OAuth 2.0 должна быть представлена в специальном представлении браузера. Пользователи Fitbit могут подтвердить, что они проходят аутентификацию на подлинном сайте Fitbit.com, только если у них есть инструменты, предоставляемые браузером, такие как URL-адрес и информация о сертификате безопасности транспортного уровня (TLS).
Для собственных приложений это означает, что страница авторизации должна открываться в браузере по умолчанию. Собственные приложения могут использовать настраиваемые схемы URL-адресов в качестве URI перенаправления для перенаправления пользователя обратно из браузера в приложение, запрашивающее разрешение.
Приложения iOS могут использовать класс SFSafariViewController вместо переключения приложения на Safari. Использование классов WKWebView или UIWebView запрещено.
Приложения Android могут использовать пользовательские вкладки Chrome вместо переключения приложений на браузер по умолчанию. Использование WebView запрещено.
Для дальнейшего пояснения, вот цитата из этого раздела предыдущего проекта ссылки на передовой опыт, представленной выше.
Встроенные пользовательские агенты, обычно реализуемые с помощью веб-представлений, являются альтернативным методом авторизации собственных приложений. Однако они по определению небезопасны для использования третьими сторонами. Они вовлекают пользователя, входящего в систему со своими полными учетными данными, только для того, чтобы они были переведены на менее мощные учетные данные OAuth.
Даже когда они используются доверенными сторонними приложениями, встроенные пользовательские агенты нарушают принцип наименьших привилегий, получая более мощные учетные данные, чем им нужно, потенциально увеличивая поверхность атаки.
В типичных реализациях встроенных пользовательских агентов на основе веб-представления хост-приложение может: регистрировать каждое нажатие клавиши, введенное в форму, для захвата имен пользователей и паролей; автоматически отправлять формы и обходить пользовательское согласие; копировать файлы cookie сеанса и использовать их для выполнения аутентифицированных действий в качестве пользователя.
Поощрение пользователей вводить учетные данные во встроенном веб-представлении без обычной адресной строки и других функций идентификации, которые есть в браузерах, лишает пользователя возможности узнать, входят ли они на законный сайт, и даже когда они это делают, он их обучает что можно вводить учетные данные без предварительной проверки сайта.
Помимо проблем безопасности, веб-представления не разделяют состояние аутентификации с другими приложениями или системным браузером, требуя от пользователя входа в систему для каждого запроса авторизации и что приводит к ухудшению взаимодействия с пользователем.
В связи с вышеизложенным использование встроенных пользовательских агентов НЕ РЕКОМЕНДУЕТСЯ, за исключением случаев, когда доверенное основное приложение действует как внешний пользовательский агент для других приложений или обеспечивает единый вход для нескольких основных приложений.
Серверам авторизации СЛЕДУЕТ принять меры по обнаружению и блокировке входа через встроенные пользовательские агенты, которые не являются их собственными, где это возможно.
Здесь также поднимаются некоторые интересные моменты: /security/179756/why-are-developers-using-embedded-user-agents-for-3rd-party-auth-what-are-the- а