auth

Передача User ID (в защищенном режиме).

carrotquest.auth('5231', '49672bf861335d68040fedb25c90a580dd33c6748dc82d8fe76d508ebcef2b4b');
Аргумент Описание
userId Обязательный. User ID
hash Обязательный. Хеш

Если вы используете auth, то вызов identify должен идти после auth.

Если на вашем сайте есть регистрация/авторизация, то мы настоятельно рекомендуем передавать нам User ID. Мы используем User ID для объединения пользователей, зашедших с разных устройств.

Второй аргумент — хеш, вычисленный по алгоритму HMAC SHA 256. Текстом для хеширования является User ID, ключом - User Auth Key, его можно узнать в панели администратора. Проверить правильность генерации хеша можно в этом онлайн-генераторе. Важно понимать, что безопасность держится на секретности этого ключа (система с разделяемым секретом), поэтому этот ключ ни в коем случае нельзя использовать на стороне браузера (JavaScript), генерация хеша должна происходить только на стороне сервера. Если ключ перестанет быть секретом, то недобросовестные пользователи смогут читать чужие сообщения или совершать события от имени другого пользователя. Хэш нужно передавать в UTF-8.

Пример

Пример генерации хеша на языке PHP: HMAC - PHP

В браузере это будет выглядеть следующим образом: HMAC - Browser

Таким образом, ваш пользователь не видит секретный ключ, и ему будет присвоен User ID = 2.

Этот метод можно вызывать только один раз после авторизации (актуально для Single Page App), либо он может вызываться многократно (если вы вставляете код средствами backend на каждую страницу, когда пользователь авторизован, т.е. например через PHP) - это тоже ОК.

Как выбрать правильный User ID?

Существует два правила:

  • User ID должен быть уникальным для каждого пользователя
  • User ID не может меняться в течение жизни пользователя. Например, если пользователь может изменить свой email, то email не может являться User ID

User ID не обязательно должен быть числом, допускаются строки длиной не более 255 символов. Рекомендуется использовать числовой идентификатор.

Для чего нужны эти сложности с HMAC?

Давайте на примере. Если вы пишете backend на PHP (например), и вы бы просто писали carrotquest.auth(<?php echo $userID ?>); то в браузере это бы выглядело как-то так carrotquest.auth(1234); Злоумышленник видит, что вы отправляете UserID=1234, он может открыть консоль и начать перебирать варианты (набрать carrotquest.auth(1235), например, так он выдаст себя за пользователя с UserID=1235). Таким образом, он легко выдаст себя за любого другого человека, сможет читать его сообщения и совершать события от его имени.

В случае если добавляется хэш, секретный ключ, с помощью которого вычислен хеш, знает только ваш backend (исходный код которого злоумышленнику неизвестен) и Carrot quest. При вызове метода auth, Carrot quest, зная UserID и зная секретный ключ, вычисляет хеш самостоятельно. Затем проверяет, совпадает ли этот вычисленный хеш с тем, что был прислан. Если не совпадает, то запрос отвергается и объединения не происходит.