MUZLOOMUZLOO

Блог · VK API / Security

OAuth ВКонтакте в стороннем плеере: как MUZLOO логинит тебя безопасно

VK API / Security9 мин чтения

«А вы не украдёте мой пароль от ВК?» - вопрос, который прилетает в поддержку каждую неделю. Понимаем тревогу: качать приложение от незнакомых разработчиков и вводить туда пароль от аккаунта с личной перепиской - звучит стрёмно. Хорошая новость: мы физически не можем увидеть твой пароль, даже если захотим. Объясняем, почему.

OAuth 2.0 - протокол, где пароль никогда не доходит до приложения

Когда ты жмёшь «Войти через ВК», MUZLOO открываетWebView с URL вида:

https://oauth.vk.com/authorize?
  client_id=4831307&
  scope=audio,offline&
  redirect_uri=vk4831307://auth&
  response_type=token

Этот URL ведёт на настоящий сервер vk.com, не на наш. Ты вводишь логин и пароль там, в браузерной странице ВКонтакте. MUZLOO в этот момент наблюдает только за URL-баром - ждёт, когда ВК сделает редирект с токеном (если вход прошёл) или с ошибкой (если не прошёл).

Пароль вводится в поле формы на vk.com. Поле принадлежит домену oauth.vk.com, защищённому TLS-сертификатом ВКонтакте. MUZLOO никак не может его прочитать - у WebView есть строгая изоляция: приложение не видит DOM чужого домена в режиме OAuth-авторизации.

Что мы реально получаем - токен, не пароль

После успешного логина ВК делает редирект на специальный URL (нашredirect_uri), куда в hash-части URL закодирован токен доступа:

vk4831307://auth#access_token=abc123def456...
  &expires_in=0
  &user_id=123456789

Вот этот access_token - всё, что попадает в MUZLOO. Он даёт только те права, которые мы запросили (scope=audio - доступ к музыке, offline - возможность использовать токен без регулярного обновления). Прочитать переписку, писать посты на стене или подглядывать в друзей этим токеном физически невозможно - ВК выдаёт разрешения гранулярно.

Токен хранится локально на устройстве в зашифрованномEncryptedSharedPreferences (Android Keystore). На наш сервер он не уезжает - у нас нет backend'а, который хранил бы токены пользователей. Это проверяется на уровне манифеста приложения и сетевых логов.

Почему авторизация иногда «слетает»

Токен может перестать работать по нескольким причинам:

  • Смена пароля на vk.com. ВК инвалидирует все существующие токены пользователя - это безопасный дефолт.
  • Выход со всех устройств. В ВК есть кнопка «Завершить все сеансы» в настройках безопасности. После этого все токены всех сторонних приложений пересохраняются с нуля.
  • Антифрод VK. Если с твоего аккаунта заметили подозрительную активность (заходы из разных стран, много запросов к API), ВК может временно заблокировать токен до прохождения капчи.
  • VPN с другой страной. IP в США или Европе часто триггерит антифрод, особенно если до этого ты заходил только из России. Плюс на некоторых VPN-серверах API ВК отвечает медленно или с ошибкой CORS.
  • Включили двухфакторку. Существующий токен остаётся валидным, но следующий логин потребует подтверждения через SMS/VK Notify.

Дополнительный вход - зачем он в MUZLOO

Иногда стандартный OAuth через WebView ломается по причинам, не зависящим от нас: пользователь поставил экзотический браузер по умолчанию, Android 14 сломал deep-link обработку на своей прошивке, ВК временно отключил OAuth для региона. На этот случай в MUZLOO есть «Дополнительный вход» - альтернативный метод через официальный VK SDK для Android.

VK SDK использует системный компонент Android вместо WebView, умеет общаться с установленным официальным приложением ВК напрямую (если оно есть на устройстве), и обходит часть проблем с браузером и deep-link'ами. По факту он работает в 9 случаях из 10, где основной OAuth падает.

Если видишь красное «Ошибка авторизации» на экране логина - просто нажми «Дополнительный вход» под основной кнопкой. Никаких дополнительных прав приложение не запрашивает - это тот же OAuth, но через другой механизм передачи токена.

Что делать, если ничего не работает

Порядок действий по степени «ядерности»:

  1. Выключить VPN. Всегда. Это главная причина в 60% случаев.
  2. Открыть vk.com в браузере с того же телефона, залогиниться, убедиться что всё ок.
  3. Попробовать «Дополнительный вход» в MUZLOO.
  4. Очистить данные приложения (Настройки Android → Приложения → MUZLOO → Хранилище → «Очистить данные»). Старый токен сгорит, можно логиниться заново.
  5. Проверить дату и время на телефоне - автоматические должны стоять. OAuth завязан на корректном timestamp в запросе, смещение даже на час ломает проверку подписи.
  6. Если всё мимо - открой раздел «Авторизация» в FAQ или пиши в поддержку, вместе разберёмся.

А как же взломы других приложений?

Периодически всплывают новости, что какой-то сторонний клиент ВК «слил пароли». В 100% таких случаев это приложения, которые просили логин и пароль в своей форме, а не через OAuth. Это называется credential harvesting - их авторы собственноручно нарушили базовый принцип OAuth, попросив пользователя ввести пароль у себя.

MUZLOO так не делает - у нас физически нет формы ввода пароля. Экран авторизации - это iframe-обёртка над vk.com, и ты вводишь пароль ровно там же, где ввёл бы его на сайте ВК в браузере. Если на экране логина ты видишь кастомную форму с логотипом MUZLOO - это значит, кто-то собрал поддельный APK (не с нашего сайта и не из Google Play), и его надо удалить.

Скачать на Android