Типы авторизации Sender
Есть три типа авторизации пользователей в Sender:
- анонимный
- SSO авторизация
- полная авторизация.
Ниже приведена матрица характеристик трех типов пользователей.
Характеристика | Анонимный | SSO | Полная авторизация |
---|---|---|---|
Пользователь может вести р2р диалоги | - | - | + |
Компания может идентифицировать пользователя и написать ему | - | + | + |
Клиент может написать компании | + | + | + |
Отправлять (forms, сообщения), вызывать actions (в Corezoid) | - | - +* | + |
Синхронизация контактов | - | -** | + |
Пользователь может быть оператором на мобильном приложении | - | - | + |
Пользователь не получает спам от других компаний | + | + | - |
Авторизация | reg | sso | Через каналы Sender (client-server) и server-server |
+* - может отправлять формы/сообщения и вызывать actions (в Corezoid). Для этого необходимо получить временный идентификатор анонимного пользователя через SSO id (специальный процесс в Corezoid).
-** - может быть доступно для мобильных.
Полная авторизация пользователя client-server
Для взаимодействия и обмена данными между веб-приложением и клиентом (AOS, iOS) необходимо пройти процесс авторизации через сервер Sender. Для этого пользователю необходимо авторизоваться через мобильное приложение.
Авторизация и регистрация через мобильное приложение:
- Установите и откройте Sender на телефоне
- Войдите с помощью QR кода
- Перейдите в свой профиль и нажмите QR
После полной авторизации пользователь может пользоваться как мобильным приложением, так и веб-версией.
Полная авторизация пользователя server-server
Для взаимодействия и обмена данными между веб-приложением и клиентом (AOS, iOS) необходимо реализовать процесс авторизации через сервер Sender.
Для этого необходимо реализовать два API:
- client-server компании для передачи token авторизации;
- server компании - server Sender для передачи информации для авторизации пользователя.
- Клиент (AOS, iOS, Web) шлет GET/POST запрос на URL сервера компании.
- В ответ сервер компании отправляет token (session_id) в любом удобном формате (например - json).
- Полученный token клиент использует для запросов авторизации на сервер Sender по https.
- Сервер Sender шлет GET запрос на URL с token на сервер компании.
Пример запроса:
{{url}}?authToken={{token}}
https://company_name.ua/mobapp-test/company_name/Login?authToken=aassddffgggghhjjkkll
После сбора всей необходимой для авторизации информации сервер компании передает ответ на сервер Sender.
Если в ответе параметр
"st":"ok"
, то авторизация считается успешной и клиенту уходит подтверждение. В базу на сервере Sender сохраняется номер телефона (phone
) и имя клиента (first_name
) из ответа.
Пример ответа:
{
"st": "ok",
"phone": "380123456789",
"first_name": "Иван",
"last_name": "Иванов"
}
Параметр | Тип | Пример |
---|---|---|
st* | string | ok |
phone | string | 380123456789 |
first_name | string | Иван |
last_name | string | Иванов |
SSO авторизация
Технология единого входа (SSO) Sender позволяет передавать в чат информацию о пользователе. Это означает, что авторизированные пользователи сайта могут общаться в чате от своего имени. Кроме этого, в случае обращения клиента в чат, оператор может увидеть авторизационную информацию о клиенте.
Также, при построении процессов в Сorezoid, есть возможность получать переданную информацию о клиенте.
Информация о клиенте бывает двух типов: доступная и недоступная операторам. Эти настройки необходимо делать в процессе в Corezoid.
Для этого необходимо:
- В административной панели в разделе "Настройка API" ввести (или изменить) "Секретный ключ".
- В код вставки виджета при вызове метода
SenderWidget.init(options)
в объектoptions
добавить сформированный параметрauth
.
Формирование значения параметра auth
Параметр auth
формируется из 3-х составляющих:
- Информация о пользователе
- Время unixtime по UTC
- Сигнатура (цифровая подпись)
Эти параметры строки auth должны быть разделены "_".
Итоговая строка должна иметь вид: eyJpZCI6IjEyMyIsIm5pY2siOiJEaW1hIn0=_1373454609_0a76ca05a51ee9da5053b5fe //"USERINFO_TIME_SIGNATURE"
Формирование массива данных о пользователе (USERINFO)
Для того чтобы передать в чат данные о клиенте необходимо сформировать JSON
{
"id": "18",
"name": "Oleg",
"photo": "https://s.sender.mobi/l/u/auth_cdabb8f8-a65a-4319-998b-095e67e0eac1/1473780962_X2t.png",
"data": [
{
"key": "phone",
"val": "380995462626",
"title": "Номер мобильного",
"show": true
}
]
}
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
id | string | + | Уникальный идентификатор клиента на вашем сайте. Используется для аутентификации клиента и хранения истории переписки с этим клиентом. |
name | string | - | Имя клиента, используется для отображения в чате |
photo | string | - | Фото клиента, используется для отображения в чате |
data | array | - | Массив объектов для передачи дополнительных параметров. Каждый объект должен содержать поля key и val . |
show | string | - | Этот параметр отвечает, за то, что эта информация будет доступна оператору при обращении клиента в чат |
Далее необходимо кодировать эту JSON строку используя алгоритм Base64.
base64_encode($json)
Формирование сигнатуры (SIGNATURE)
Сигнатура формируется как md5 хэш от сформированной строки "Секретный ключ"+"Информация о пользователе"+"Время":
md5(SECRETKEY+USERINFO+TIME)
Пример формирования значения параметра auth
на PHP
Формирование строки auth
:
$json = [id => '...']; // передаваемые данные
$time = time();
$secret = "SECRETKEY"; // Секретный ключ, который Вы ввели в административной панели сайта.
$user_base64 = base64_encode( json_encode($json) );
$sign = md5($secret . $user_base64 . $time);
$auth = $user_base64 . "_" . $time . "_" . $sign;
Добавить в объект options значение параметра auth
в метод SenderWidget.init(options)
в коде вставки виджета:
SenderWidget.init({
auth: auth,
companyId: "COMPANY_ID"
});
Если вы открываете чат по ссылке то параметр auth
можно передать в виде GET параметра.
Пример формирования значения параметра auth на Node.js
Формирование строки auth:
var crypto = require('crypto');
var jsonData = { id: '...' }; // передаваемые данные
var time = Math.floor(new Date().getTime() / 1000);
var secret = 'SECRETKEY'; // Секретный ключ, который Вы ввели в административной панели сайта.
var userBase64 = new Buffer(JSON.stringify(jsonData)).toString('base64');
var sign = crypto.createHash('md5')
.update(secret + userBase64 + time)
.digest('hex');
var auth = userBase64 + '_' + time + '_' + sign; // строка, которую нужно подставить в параметр auth
Добавить в объект options значение параметра auth
в метод SenderWidget.init(options)
в коде вставки виджета:
SenderWidget.init({
auth: auth,
companyId: "COMPANY_ID"
});