Помогите с проблемой генерации хэша Authorization: SAPISIDHASH

Поддержка
  • Приветствую вас, форумчане!
    Столкнулся с такой проблемой. Работаю с одним из сервисов гугла.
    Требуется найти значение заголовок request_headers - Authorization: SAPISIDHASH. Здесь вроде как разобрался, необходимо вычислять хэш с использованием алгоритма SHA-1, который генерируется из sapisid_cookie, URL и текущего времени. В ответ я получаю 160-битный (20 байт) хеш, который состоит из 40 символов. Вот пример: 95f500eec9a7c6f1cc9532712b4f6ab56a5149dр. Этот хэш в течении сессии не меняется. Но проблема в том, что в ходе работы в этой сессии появляется еще один заголовок request_headers - Authorization: SAPISIDHASH, требуемое значение которого выглядит примерно так: 1685631199_1dde5a57e682d18d7f596995c03a3c50ffdb634e. Это значение в ходе сессии меняется для каждого нового запроса. Вместе с нижним подчеркиванием состоит из 51 символа. Ни один алгоритм хэширования не выдает результат в 51 символ. Даже если вычесть из этих символов нижнее подчеркивание, то и 50 символов нельзя сгенерировать. Предполагаю, что искомое значение необходимо делить на 2 части. Первая в 10 символов до нижнего подчеркивания, и вторая в 40 символов за ней. По второй части понятно, можно сгенерировать по варианту описанному в начале поста. Но не понимаю, что за значение в первой части, и как оно генерируется. Сломал уже всю голову. Кто сможет подсказать по этому вопросу? Очень нужна Ваша помощь, или хотя бы подсказку, куда копать! И последний момент, тоже относится к заголовку X-Goog-Api-Key. Подскажите, где его выковырять из запроса?
    Заранее благодарен всем!

  • 1685631199 - Unix Time Stamp
    X-Goog-Api-Key - как правило , статичный заголовок

  • Не получится наобум угадать как генерируется этот хеш. Тут всего 2 варианта:

    1. Он приходит с сервера в более ранних респонсах.
    2. Генерируется на клиенте в js.

    Во втором случае реверсить js придется. Или нет

  • Только что посмотрел их код в гмейле как этот заголовок создается. Ты говорил про хеш, который зависит от куки, урл и времени. Однако в гмейле там немного по-другому, по крайней мере это то что я вижу из кода. Там два заголовка, это так. Правда тот который имеет вид SAPISIDHASH $time_$hash не генерится под каждый новый запрос, а вычисляется один раз на страницу, по крайней мере у меня так в браузере, но это не суть.

    1. Тот заголовок что имеет вид SAPISIDHASH $hash:
      $hash получается хешированием строки "$SAPISID $url". Я хз что там за функция хеширования, мне лень искать псевдокоды и сравнивать алгоритмы, но допустим это SHA-1 как ты и говоришь. Так вот при хешировании этого заголовка время не играет никакой роли, там его нет.
    2. А вот как раз с заголовком SAPISIDHASH $time_$hash - там уже так:
      $hash получается хешированием строки "$time $SAPISID $url", при этом что в заголовке, что при хешировании $time одинаковые.
  • @High-Level , в моем случае, я работаю с временем через $time_msec = intval(microtime(true) * 1000. По поводу Unix Time Stamp похоже на правильный вариант, проверю. Одного не понимаю, в этом случае, что до нижнего подчеркивания, что после, происходит вычисление времени. Как то дико

  • @kavo Вот именно у меня APISIDHASH $time_$hash меняется для каждого запроса. Сейчас опять перепроверил:
    Authorization: SAPISIDHASH 1685681773_7b45633dcb71cbd15849d56ff5ad10dcdbd3fc1b
    Authorization: SAPISIDHASH 1685681774_2a91e055fa4c01a80e9ed39cd65068c6ba9a9314
    Как видишь разница что в $time, что в $hash имеется, и это идущие друг за другом post-запросы. А вот в хэше из 40 символов да, так и есть, он меняется раз в сессию.
    И выше писали, что заголовок X-Goog-Api-Key статичный. Это тоже не так. В каждом запросе он так же разный:
    X-Goog-Api-Key: AIzaSyABqJ85_R2irnKzMtGBL0iHuyFBi6Efk1w
    X-Goog-Api-Key: AIzaSyA7gAruVC1V-GYDhbDF3Szc2YgUTo1-YHM
    По поводу заголовка SAPISIDHASH $hash мне вообще нужно их хеширования время убрать? В итоге, если я все правильно понимаю, то мне нужно из хеширования SAPISIDHASH $hash убрать время, а в $time_$has как раз его добавить. В итоге до нижнего подчеркивания будут хешированные данные времени, а после него хеш sapisid_cookie и URL. Все верно?

  • Ну тебе нужно поэтому было в посте писать на каком ты ресурсе делаешь это, и ты в чем там смотришь? В хроме в панельке Network?.
    Но то что у тебя для каждого запроса оно меняется - ну и че, генерируй так же для каждого запроса.
    Время должно быть в секундах, а не миллисекундах только
    017#gmail_sapisidhash.png
    На картинке хорошо видно че происходит.

    Насчет X-Goog-Api-Key, ты если бы сервис сказал, я бы его нашел. В гмейле есть X-Goog-Auth-User, и он тоже зависит от какой-то ветки. Если она есть - то там будет значение, если нет - то будет 0.

  • @kavo said in Помогите с проблемой генерации хэша Authorization: SAPISIDHASH:

    Время должно быть в секундах, а не миллисекундах только

    Ок, принял, поменяю.

    "если бы сервис сказал" - Вот он

  • @High-Level и @kavo спасибо за подсказки. Вроде справился с Authorization: SAPISIDHASH
    В итоге у меня получается, что Authorization: SAPISIDHASH 5af9ca3bc0ca2fc23021551098dc613235a58742 хэшируется (sha1) из значений $sapisid_cookie и $URL, и оно меняется только при изменений этих данных(параметр $time в него не включен ), а второе Authorization: SAPISIDHASH 1685699777_38dc2bf80f96b8045f3992667f19ecaa894ad53b состоит из $time_$auth_hash, где $auth_hash, это хэш из $time,$sapisid_cookie и $URL. Параметр $time в хеше и в значении до нижнего подчеркивания один и тот же. Соответсвенно, итоговый Authorization: SAPISIDHASH меняется каждый раз в связи с изменением времени. Реализовал получение этих обоих параметров в один код. В результате Authorization: SAPISIDHASH 5af9ca3bc0ca2fc23021551098dc613235a58742 отрабатывается на отлично. SAPISIDHASH 1685699777_38dc2bf80f96b8045f3992667f19ecaa894ad53b еще не проверял, так как с ним в запросе всегда находится X-Goog-Api-Key, который еще не раскурил. Вроде как все ок!

    Единственное, @kavo, посмотри пожалуйста на досуге, про заголовок X-Goog-Api-Key. Линк на сервис выше скинул. Еще раз всем спасибо!

  • Он статичный на все запросы, каким образом он у тебя может меняться?
    69b66828-c603-41b4-ab08-ce72382b9b45-image.png
    Вот он прям в скрипте здесь задан
    d01eeae4-5b9d-44e1-a867-a96ba3911ae0-image.png

    Если просто ПКМ по этому скрипту, скопировать линк и вставить в браузере, то там будет именно этот апи ключ.
    Другое дело, что скрипт не всегда один и тот же, но у меня что в своем гугл хроме, что в антике с другим акком + прокси, эти api key одинаковые.

  • Скорей всего дело в том, что ты не сможешь повторить с обычным аккаунтом gmail все действия, которые у меня осуществляются на аккаунте WS(work space). На обычном аккаунте это выполнить нельзя. Но реально, значение X-Goog-Api-Key, меняется от одного post-запроса к другому в рамках одной сессии. Да даже не сессии, в рамках пару секунд. Но опять же почему то не всегда, но в 90% случаев это именно так. Тем не менее, X-Goog-Api-Key ты же нашел, и я не думаю, что он будет менять место. Как его лучше выцарапать?

  • Хз как будет он в твоем случае собираться, но вообще он находится если девтулсе во вкладке Network нажать Ctrl+F и вбить значение из запроса. В результатах поиска будет скрипт где прям в сорсе этот ключ находится.
    У тебя такое ощущение что каждый раз страница загружается по новой перед следующим твоим пост запросом. Это бы объясняло почему каждый раз время меняется в Auth хедере, да и апи ключ. Либо там вообще в work space скрипты другие, но в обычном акке и апи ключ, и auth header высчитывается только один раз при загрузке страницы

  • @kavo said in Помогите с проблемой генерации хэша Authorization: SAPISIDHASH:

    У тебя такое ощущение что каждый раз страница загружается по новой перед следующим твоим пост запросом

    Нет, но там все работает в iFrame. Может это как то влияет?

  • 1 Votes
    9 Posts
    853 Views
  • 0 Votes
    8 Posts
    946 Views
  • Работа с json

    Поддержка
    0 Votes
    3 Posts
    727 Views
  • 0 Votes
    7 Posts
    1070 Views
  • 0 Votes
    6 Posts
    659 Views