Основная причина использования внешнего пользовательского агента заключается в том, что он не позволяет приложению иметь доступ к учетным данным пользователя. Если приложение отображает поля «имя пользователя» и «пароль» на своем экране, злоумышленник может украсть эти учетные данные.
В случае Facebook / Twitter и подобных им пользователь не использует свои учетные данные для аутентификации в сторонней системе, а проверяющая сторона и аутентифицирующая сторона совпадают.
Это означает, что, например, Facebook больше не получает доступа к данным пользователя, если они украли учетные данные пользователя, поскольку данные находятся на его серверах. Предположительно они также доверяют своим собственным процессам разработки, чтобы гарантировать, что мошеннический код не был внедрен в приложение.
С точки зрения пользователя, они также доверяют приложению (при условии, что они установили его из надежного источника, такого как App Store) и ожидают, что смогут войти в приложение. Быть вытолкнутым в веб-браузер не будет лучшим пользовательским опытом.
Действительно, вполне вероятно, что приложения Facebook et c даже не используют поток OAuth; им не нужно для своих собственных пользователей.
Для потока OAuth, в котором приложение не создается стороной, проводящей аутентификацию, должен использоваться внешний пользовательский агент; пользователь не должен доверять приложению свои учетные данные.
Для веб-протокола OAuth на iOS Apple рекомендует использовать SFSafariViewController
для представления процесса входа в приложение; это исключает «выпрыгивание» пользователя из приложения в системный браузер, а затем обратно в приложение, гарантируя, что код приложения не будет иметь никакого доступа к действиям пользователя в веб-сеансе.