Подтвердить что ты не робот

Как выполнить проверку подлинности с помощью XMPP-серверов Chrome?

Мне нужно получить открытые вкладки пользователя Google Chrome в моем приложении Java (а не на том же компьютере). Синхронизация Chrome включена, поэтому текущие вкладки синхронизируются с серверами Google.

Согласно документации синхронизации Chrome, это делается через XMPP. Поэтому я предполагаю, что можно подключиться к серверу XMPP Google (xmpp.google.com), например. через Smack (библиотека Java для XMPP), аутентифицировать и прослушивать сообщения protobuf, которые указывают на изменение сеанса вкладки. Конечно, доступны учетные данные пользователя или "client_id", используемые для идентификации клиентов Chrome.

Но мне сложно сменять метод аутентификации, который используется для подключения к серверу XMPP - я не могу понять, как это делается в исходном коде Chromium и нет документации, кроме комментариев с низким уровнем кода в коде. Библиотека libjingle, которую Google использует для своих служб на основе XMPP, доступна только для С++ и не поддерживается/документирована.

Итак, есть ли кто-нибудь, кто раньше сделал что-то подобное, и кто может дать какие-либо советы/подсказки о том, как работает процесс аутентификации?

4b9b3361

Ответ 1

Я не уверен, что chrome sync использует xmpp, по крайней мере, на уровне, когда он должен обмениваться информацией с клиентом. Он использует технологию Google буферов протоколов. Протокол предоставляется с использованием файлов описания протокола .proto, и вы можете преобразовать его в свои языковые объекты с помощью специального компилятора. Кажется, что сервер синхронизации находится на https://clients4.google.com/chrome-sync, и клиент отправляет POST-запросы с двоичным телом, где размещено сообщение ClientToServerMessage. Здесь вывод с момента первого подключения к серверу синхронизации. Первый выходной объект Python - это отпечаток переменной WSGI среды, где также размещены заголовки HTTP. Второй объект (после "====" ) является фактическим сообщением протокола.

{'CONTENT_LENGTH': '54',
 'CONTENT_TYPE': 'application/octet-stream',
 'GATEWAY_INTERFACE': 'CGI/1.1',
 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
 'HTTP_ACCEPT_ENCODING': 'gzip,deflate,sdch',
 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8',
 'HTTP_AUTHORIZATION': 'GoogleLogin auth=MKhiqZsdz2RV4WrUJzPltxc2smTMcRnlfPALTOpf-Xdy9vsp6yUpS5cGuND0awqrYVUK4lhOJlh6OMsg093eBRghGGIgvWUTzU8PUvquy_c8Xn4sRiz_3tVJcke5eXi3q4qFDa6iVuEbT_0QhyPOjIQyeDOKRpZzMR3rpHsAs0ptFiTtUeTHsoIeUFT9nZPYzkET4-yHbDAp45_dxWdb-U6DPg24',
 'HTTP_CONNECTION': 'keep-alive',
 'HTTP_HOST': 'localhost:8080',
 'HTTP_USER_AGENT': 'Chrome MAC 0.4.21.6 (130497)-devel',
 'PATH_INFO': '/chrome-sync/dev/command/',
 'QUERY_STRING': 'client_id=SOME_SPECIAL_STRING',
 'REMOTE_ADDR': '127.0.0.1',
 'REMOTE_PORT': '59031',
 'REQUEST_METHOD': 'POST',
 'SCRIPT_NAME': '',
 'SERVER_NAME': 'vian-bizon.local',
 'SERVER_PORT': '8080',
 'SERVER_PROTOCOL': 'HTTP/1.0',
 'SERVER_SOFTWARE': 'gevent/1.0 Python/2.6',
 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x100416140>,
 'wsgi.input': <gevent.pywsgi.Input object at 0x102a04250>,
 'wsgi.multiprocess': False,
 'wsgi.multithread': False,
 'wsgi.run_once': False,
 'wsgi.url_scheme': 'https',
 'wsgi.version': (1, 0)}
'==================================='
share: "[email protected]"
protocol_version: 30
message_contents: GET_UPDATES
get_updates {
  caller_info {
    source: NEW_CLIENT
    notifications_enabled: false
  }
  fetch_folders: true
  from_progress_marker {
    data_type_id: 47745
    token: ""
    notification_hint: ""
  }
}
debug_info {
  events {
    type: INITIALIZATION_COMPLETE
  }
  events_dropped: false
}

Это происходит для аутентификации на основе OAuth. Вы можете видеть токен OAuth в поле HTTP_AUTHORIZATION. Ток OAuth предоставляется вам при взаимодействии с диалоговым окном HTML "Вход в учетную запись Google". Я не уверен, но похоже, что API для получения токена доступа для сервисов Google доступен публично.

Если вы ищете вместо XMPP auth, см. описание механизма авторизации X-GOOGLE-TOKEN здесь: Аутентификация в Google Talk (XMPP, Smack) с помощью authToken

Для авторизации X-OAUTH2 вы можете получить доступ к информации здесь: https://developers.google.com/talk/jep_extensions/oauth

И образец здесь: http://pits.googlecode.com/svn/trunk/xmpp.c

Обратите внимание, что вы можете добавить поток потока XMPP в файлы журнала Chrome, заполненные при каждом запуске браузера - chrome_debug.log. Чтобы включить это, запустите Chrome со следующими параметрами: --enable-logging --v = 2