Как с точки зрения безопасности работает кросс-авторизация между приложениями
Что проверяют
Понимаете ли вы, где в схеме «вошёл в одном приложении, авторизован в другом» проходит граница доверия и что может перехватить чужое приложение на том же устройстве. Следом просят объяснить PKCE и разницу между custom URL scheme и Universal Links.
Как отвечать
Разделите два сценария.
Приложения одного разработчика делят Keychain: keychain-access-groups в entitlements и атрибут kSecAttrAccessGroup. Токен, сохранённый одним приложением, видит другое, но только в пределах одного Team ID. Есть ещё App Groups с общим контейнером, но секретам место в Keychain, а не в файлах.
Приложения разных владельцев или вход через провайдера строятся на OAuth 2.0 и OpenID Connect:
ASWebAuthenticationSession: вход в системном браузерном окне, приложение не видит ни пароль, ни куки. Общие куки дают SSO, если не включёнprefersEphemeralWebBrowserSession;- Authorization Code + PKCE: мобильное приложение это публичный клиент,
client_secretв нём не спрятать. PKCE привязывает код кcode_verifier, который знает только инициатор, и перехваченный код бесполезен; stateиnonce: защита от подмены ответа и повторного использования ID-токена;- Universal Links вместо custom scheme: схему
myapp://может зарегистрировать любое приложение, а Universal Link подтверждается файломapple-app-site-associationна домене; - хранение: токены только в Keychain с подходящей доступностью, например
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly, refresh-токены с ротацией.
Если одно приложение передаёт вход другому напрямую, по ссылке едет не токен, а одноразовый код, который второе приложение само меняет на свои токены у сервера.
Где спотыкаются
Предлагают логин во встроенном WKWebView. Приложение тогда может читать ввод пароля, RFC 8252 требует внешний агент, а часть провайдеров такой вход блокирует.
Переносят веб-защиту: говорят про анти-CSRF и XSS, но молчат про PKCE и перехват редиректа, главные риски мобильного клиента.
Передают access token между приложениями в параметре ссылки. Он оседает в логах и достаётся тому, кто перехватил схему.