Описание единого входа

ChatBro позволяет настроить авторизацию в чате так, чтобы можно было использовать информацию сайта о пользователе, такую как псевдоним, аватар, путь к профиля. Для этого вам необходимо передать дополнительные параметры в ChatbroLoader.

ChatbroLoader({
encodedChatId: 'Ваш id чата', // Или вы можете использовать другие идентификаторы, такие как chatPath или chatAlias
siteDomain: 'Ваш домен',
siteUserExternalId: 'Идентификатор пользователя на вашем сайте',
siteUserFullName: 'Имя или никнейм',
siteUserAvatarUrl: 'Аватар пользователя',
siteUserProfileUrl: 'Путь до профиля пользователя'
});

Пример:

ChatbroLoader({
encodedChatId: '9czk',
siteDomain: 'sso.chatbro.com',
siteUserExternalId: '652',
siteUserFullName: 'Brad Pitt',
siteUserAvatarUrl: '//sso.chatbro.com/images/brad_pitt.jpg',
siteUserProfileUrl: '//sso.chatbro.com/profile/652'
});

Минимальный набор параметров для аутентификации пользователя состоит из siteDomain, siteUserExternalId, siteUserFullName. Параметры siteUserAvatarUrl, siteUserProfileUrl являются опциональными.

Настройка авторизации

В редакторе чата вы можете комбинировать различные методы авторизации или отключить все, оставив только авторизацию через сайт. Попробуйте написать что-нибудь в чате ниже.

Кроме того, вы можете отключить тип входа, который использует передачу параметров авторизации. Это рекомендуется сделать, если вы не используете авторизацию через через сайт.  В приведенном ниже примере, параметры siteDomain, siteUserExternalId и siteUserFullName передаются в ChatbroLoader, но Единый вход отключен. Попробуйте отправить сообщение.

Защита от спуфинга

Спуфинг атака - это ситуация, когда человек или программа успешно маскируются под другого, фальсифицируя данные, чтобы получить незаконное преимущество. Другими словами, злоумышленник может заменить свои параметры авторизации и писать в чат, используя данные другого человека. Чтобы этого избежать, вам необходимо включить защиту от спуфинга.

После включения защиты, чтобы отправить сообщение, вам необходимо передать дополнительный параметр -  signature.

Signature рассчитывается на стороне сервера на основе переданных параметров. Порядок параметров при расчете очень важен.

signatureDataParts = siteDomain

+ siteUserExternalId
+ siteUserFullName
+ siteUserAvatarUrl
+ siteUserProfileUrl
+ permissions.join('')
+ secretKey;

md5(signatureDataParts);

Вы можете найти свой секретный ключ в конструкторе чата, просто включив защиту от спуфинга. Параметры siteDomain и secretKey необходимы всегда. Другие могут игнорироваться, если вы не используете их в ChabroLoader.

Пользователя можно сделать модератором. Для этого пользователю необходимо добавить параметр, называемый permissions в ChatbroLoader. Permissions - это массив разрешенных методов модерации. Используется только в сочетании с параметром signature. Возможные значения: ban (возможность запрета пользователей), delete (возможность удаления сообщений). Важно отметить, что добавив модератора таким образом, пользователь не будет в сообщениях указываться как модератор , хотя у него будет возможность модерировать.
Пример: permissions: ['ban', 'delete']

Если параметр signature не передается или передается, но неправильно рассчитан при этом, сообщение не будет отправлено. В чате, в этом случае, будет показано соответствующее уведомление.

Если вы не хотите, чтобы чат был установлен на других сайтах, отключите ползунок "Показывать чат в случае ошибки сигнатуры".

Примеры правильно переданной signature

Передается полный набор параметров для авторизации пользователя

ChatbroLoader({
encodedChatId: '12UNE',
siteDomain: 'sso.chatbro.com',
siteUserExternalId: '652',
siteUserFullName: 'Brad Pitt',
siteUserAvatarUrl: '//sso.chatbro.com/images/brad_pitt.jpg',
siteUserProfileUrl: '//sso.chatbro.com/profile/652',
// md5('sso.chatbro.com652Brad Pitt//sso.chatbro.com/images/brad_pitt.jpg//sso.chatbro.com/profile/65240657820-0ba1-4e1d-b2f6-b2a40fd09263');
signature: '6351ca5d1e3307180afd3d0b3488f898'
});

Передается минимальный набор параметров для авторизации пользователя

ChatbroLoader({
encodedChatId: '12UNE',
siteDomain: 'sso.chatbro.com',
siteUserExternalId: '652',
siteUserFullName: 'Brad Pitt',
// md5('sso.chatbro.com652Brad Pitt40657820-0ba1-4e1d-b2f6-b2a40fd09263');
signature: '7dc8c6ba760f96c23f948a55eb1c20c0'
});

Защита от спуфинга включена и возможна авторизация через социальную сеть или в качестве гостя

ChatbroLoader({
encodedChatId: '52UNe',
siteDomain: 'sso.chatbro.com',
// md5('sso.chatbro.com67565da2-d138-4991-89bd-1f280b2234dc');
signature: '2f0ecd707c82de71bd1d3f62bb86253c'
});

Пользователю предоставляется возможность удалять сообщения в чате

ChatbroLoader({
encodedChatId: '12UNE',
siteDomain: 'sso.chatbro.com',
siteUserExternalId: '652',
siteUserFullName: 'Brad Pitt',
permissions: ['delete'],
// md5('sso.chatbro.com652Brad Pittdelete40657820-0ba1-4e1d-b2f6-b2a40fd09263');
signature: '083dacb1bbed7616f8ae1fd4faa6df9b'
});

Пример автоматизации передачи данных авторизации в ChatbroLoader

Пример носит условный характер. Не копируйте его.
Написан на Node.JS. Используется веб фреймворк Express и шаблонизатор Pug.

sso_example.js

const domain = 'sso.chatbro.com';
const secretKey = 'b442e18f-0134-42dc-a74a-9eac53dff3bd';

app.get('/page'function(req, res) {
let userName = req.query.userName; 
let resParams = {}; 
let signatureDataParts = ''

// don't do like this
let isLogged = !!userName;

resParams.isLogged = isLogged;
resParams.domain = domain;

if (isLogged) {
resParams.userId = Math.floor((Math.random() 100) 1);
resParams.userName = userName;
signatureDataParts += resParams.userId;
signatureDataParts += resParams.userName;
}

resParams.hash = crypto.createHash('md5').update(domain signatureDataParts secretKey).digest('hex');
res.render('page.pug', resParams);
});

page.pug

script
| var chatParams = {
| encodedChatId: '32UNn',
| siteDomain: '#{domain}',
| signature: '#{hash}'
| };

-if (isLogged) {
| chatParams.siteUserExternalId = '#{userId}';
| chatParams.siteUserFullName = '#{userName}';
-}

| ChatbroLoader(chatParams);