Типы авторизации 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. Для этого пользователю необходимо авторизоваться через мобильное приложение.

Авторизация и регистрация через мобильное приложение:

  1. Установите и откройте Sender на телефоне
  2. Войдите с помощью QR кода
  3. Перейдите в свой профиль и нажмите 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.

Для этого необходимо:

  1. В административной панели в разделе "Настройка API" ввести (или изменить) "Секретный ключ".
  2. В код вставки виджета при вызове метода SenderWidget.init(options) в объект options добавить сформированный параметр auth.

Формирование значения параметра auth

Параметр auth формируется из 3-х составляющих:

  1. Информация о пользователе
  2. Время unixtime по UTC
  3. Сигнатура (цифровая подпись)

Эти параметры строки 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"
  });