Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vk_api.exceptions.AuthError: Unknown error (AUTH; no sid) #3

Closed
kaiyga opened this issue Jan 26, 2025 · 7 comments
Closed

vk_api.exceptions.AuthError: Unknown error (AUTH; no sid) #3

kaiyga opened this issue Jan 26, 2025 · 7 comments

Comments

@kaiyga
Copy link
Owner

kaiyga commented Jan 26, 2025

Короткое описание

VK сменили форму авторизации, так что попытка входа возвращающая новую форму входа ломает бота.

Как я предполагаю, раньше новая форма была на проде ввиде канарейки и собирала какой-то малочисленный трафик, сейчас они повысили процент авторизации по этой форме, так что большинтсво попыток входа провальны.

Это значит, что есть попытки при которых всё-ещё можно войти, но это пока старая форма находится в обороте. Вскоре её вытеснят

Подробнее можно ознакомится из этого issue
python273/vk_api#519

На данный момент рассматриваю два варианта.

  • Либо определить и задокументировать новое поведение страницы ВК и попробовать наладить авторизацию
  • Перейти на токенную систему и определить переменные под это в конфиге

Вотаковота

@kaiyga
Copy link
Owner Author

kaiyga commented Jan 26, 2025

Был сделан переход на токенную систему.

Вопрос с логином по паролю не был решён.

Кто-то перетыкался во все точки и так и не понял откуда берётся auth_token для дальнейшей авторизации в login.vk.com/?act=connect_authorize

Его первое появление связано с api.vk.com/method/statEvents.addVKIDAnonymously
Но в поле request. Откуда он взялся, мне лично проследить сложно. вотаковота

@kyzima-spb
Copy link

Его первое появление связано с api.vk.com/method/statEvents.addVKIDAnonymously
Но в поле request. Откуда он взялся, мне лично проследить сложно. вотаковота

На скорую руку удалось понять, что auth_token - это access_token, который можно получить из запроса id.vk.com/auth?response_type=silent_token&uuid=vyhghb&v=1.0.2&sdk_type=vkid&app_id=7497650&redirect_uri=https%3A%2F%2Fid.vk.com%2Faccount%3Fflow_service%3Dvkid_landing_%2Fid

Запрос возвращает ответ без параметров uuid и redirect_uri

В ответ приходит html, в head которого есть тег script, а в нем объект, присваиваемый переменной window.init

Дальше пока не копался, но qr код запрашивает с этим токеном

@kaiyga
Copy link
Owner Author

kaiyga commented Jan 28, 2025

Вчерашнее копание также меня привело к этому же выводу.

Один любезный господин подтвердил теорию того, что токен может приходить в составе фронта. На момент описания своих рассуждений, я отлавливал лишь xhr запросы, спешно.

Тэг script window.init.auth, если точнее.
Но только пришёл, он на соверщенно иного типа запрос

https://id.vk.com/auth?
  isRedesigned=1&
  action=eyJuYW1lIjoibm9fcGFzc3....(Какой-то токен)&
  scheme=dark&
  is_redesigned=1&
  initial_stats_info=eyJzb3VyY...(Очередной токен)3D%3D&
  uuid=mxqqyo&
  response_type=silent_token&
  v=1.3.0&sdk_type=vkid&
  app_id=7913379&
  redirect_uri=https%3A%2F%2Fvk.com%2Fjoin

Возможно, они равнозначны для авторизации

Вчера меня это натолкнуло на то, что нужно искать action и initial_stats - токены в дампе har, как видно уже не нужно.

По вашему варианту. Он прекрасно сработал в браузере.
Вопрос теперь в том, как сэмулировать то-же окружение для его работы.

Благодарю за наводку.

UPD: Чтобы получить access_token хватило этого. Но пока не проверял получение самой токенной пары для сессии
Очень срочненько дребежжу, о заметных успехах

import requests
from requests.cookies import RequestsCookieJar

session = requests.Session()
cookie = RequestsCookieJar()

url = "https://id.vk.com/auth?response_type=silent_token&uuid=vyhghb&v=1.0.2&sdk_type=vkid&app_id=7497650&redirect_uri=https%3A%2F%2Fid.vk.com%2Faccount%3Fflow_service%3Dvkid_landing_%2Fid"

resp = session.get(
    url=url
    , cookies=cookie
    , headers={
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:134.0) Gecko/20100101 Firefox/134.0"
    }
)

print(resp.headers,resp.cookies,resp.content.decode())

@kyzima-spb
Copy link

Мне мало access_token, мне нужна кука remixsid =)

Запрос возвращает ответ без параметров uuid и redirect_uri
Как оказалось нужны, их на последнем шаге передают для авторизации

Мои успехи за сегодня: в принципе удалось сэмулировать шаги новой формы, пока на коленке, без проверки ошибок. Понятно, зачем нужны два токена: access_token и anonymous_token и похоже они одноразовые, пытался кешировать, но получал ошибку. Вытащил из js код генерации device_id. Кодом пока делиться стыдно, там трешачок =)

В планах поискать, может есть код и для генерации uuid, обработать ошибки и переписать весь этот говнокод =) Не уверен, что получится интегрировать в библиотеку и сделать PR, мне кажется слишком много всего изменилось

Не могу проверить нововведение "вход без пароля", когда нужно ввести код из смс, потому что ВК явно меня приблочил, не присылает смс-ки =) До этого уже капчей начал спамить, но ее я на скорую руку вводил. Жду, когда отблочит =) Основной аккаунт использовать не хочу, может создать еще один, благо симки есть =)

@kaiyga
Copy link
Owner Author

kaiyga commented Jan 28, 2025

код и для генерации uuid,

Если мне не кажется, то uuid является абсолютно рандомная строка размером в 6 символов

Пройдясь по дампу, находится он в том-же window.init похоже, что в window.init.data

Понятно, зачем нужны два токена: access_token и anonymous_token и похоже они одноразовые

Мне лично не понятно, зачем нужен анонимный токен. И device_id
Ведь анонимный токен не используется в форме логина, а device_id в примере просто напросто генерируется.
Хотя возможно, я просто глубоко заблуждаюсь

Лично моя цель, на данный момент SID, ибо остальное вполне достаётся, без лишних движений и буду надеятся, что "Игра ВКантакте" закончится. Но это слишком оптимистично, при моих ресурсах времени;p

@kyzima-spb
Copy link

Если мне не кажется, то uuid является абсолютно рандомная строка размером в 6 символов

Мне тоже так кажется, потому что оно сработало без проблем =)

device_id в примере просто напросто генерируется.

Вот в примеры я как раз не посмотрел =) В auth.js он генерится из очень странной строки useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict =)

Мне лично не понятно, зачем нужен анонимный токен

Из того, что я нашел и что нужно (по крайней мере вряд ли это можно пропустить) в процессе логина в новой форме:

  • отправка смс
  • проверка одноразового пароля (код из смс/приложения)
  • (не нужно), но запрос доступных методов верификации

"Игра ВКантакте" закончится

Я приложеньку себе для Kodi делаю и +- сделал на уровне говнокода, но рабочего =) вчера поставил на "телике" и бац, новая форма....

@kyzima-spb
Copy link

kyzima-spb commented Jan 31, 2025

Пока что мои успехи такие =)
https://github.com/kyzima-spb/vk_api/

Нужно все перепроверить и может быть что-то улучшить, т.к. не всем я до конца доволен, но работает =) Надеюсь когда PR буду делать, то одобрят =)

Если будет желание затестировать, то буду рад, т.к. 100% уверенности в том, что ВК всегда все выдает у меня нет, хотя должен выдавать =)

@kaiyga kaiyga closed this as completed Feb 15, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants