Notiondesk Messenger может идентифицировать пользователей, вошедших в ваше приложение.
Идентификация использует кратковременный пользовательский токен, сгенерированный вашим бэкэндом. Ваш фронтенд передает этот токен в SDK Messenger при инициализации Messenger.
Это предотвращает раскрытие конфиденциальных учетных данных аутентификации в коде браузера.
Прежде чем начать
Вам потребуется:
- Мессенджер Notiondesk установлен с пакетом
@notiondesk-so/messenger-js-sdk
- Аутентификация уже реализована в вашем приложении.
- Бэкенд, способный генерировать пользовательский токен Notiondesk
- Ваш секрет приложения Notiondesk
Как работает идентификация пользователя
Процесс аутентификации выглядит следующим образом:
- Пользователь входит в ваше приложение.
- Ваш фронтенд запрашивает у бэкенда пользовательский токен Notiondesk.
- Ваша серверная часть подписывает кратковременный токен для аутентифицированного пользователя.
- Ваш бэкэнд возвращает подписанный токен в браузер.
- Ваш веб-сайт или приложение передает токен в мессенджер Notiondesk
- Messenger распознает посетителя как соответствующего пользователя.
Ваша серверная часть должна определять личность пользователя на основе аутентифицированной сессии приложения. Не доверяйте идентификатору пользователя, предоставленному непосредственно браузером.
Шаг 1: Создайте секретный ключ приложения.
Перейдите в Настройки → Доступ в Notiondesk и создайте секретный ключ приложения.
Сохраните секрет в переменной окружения на стороне сервера, например:
NOTIONDESK_APP_SECRETВы можете управлять своими секретными ключами приложений и менять их в разделе «Настройки» → «Доступ» .
Никогда не добавляйте секретный ключ приложения в:
- Фронтенд JavaScript
- Клиентские компоненты React или Vue
- Переменные общественной среды
- Пакеты браузеров
- Общедоступные репозитории
Шаг 2: Подпишите пользовательский токен в вашей административной панели.
После аутентификации текущего пользователя в вашем приложении сгенерируйте токен пользователя в бэкэнде.
Пользовательские токены Notiondesk используют протокол HS256 и должны содержать следующие утверждения:
| Требовать | Описание |
|---|---|
type | Тип токена, необходимый для Notiondesk |
iat | Время выпуска токена |
exp | Время истечения срока действия токена |
user_id | Уникальный идентификатор пользователя в вашем приложении. |
site_uuid | Идентификатор вашего сайта Notiondesk |
Используйте user_id в качестве идентификатора пользователя. Не используйте sub вместо user_id.
Вы также можете предоставлять информацию о пользователе, например:
email
name
Используйте токены с коротким сроком действия и генерируйте их только на своем сервере.
Notiondesk предоставляет примеры подписи для конкретных языков программирования в настройках Messenger для таких языков, как Node.js, Python, PHP и Ruby. Используйте пример, предоставленный на панели управления Notiondesk, вместо подписи токенов в коде браузера.
Шаг 3: Передайте токен в Messenger.
После того, как ваша серверная часть сгенерирует токен, передайте его в вашу установку Messenger.
Стандартная установка веб-сайта
Если вы установили Messenger с помощью стандартного скрипта, укажите подписанный токен с помощью data-user-token:
Заменять:
<script
async
src="https://static.notiondesk.help/messenger/widget.js"
data-messenger-id="YOUR_MESSENGER_ID"
data-user-token="YOUR_SIGNED_TOKEN">
</script>- __СОХРАНЕНО_27__ с вашим ID в Messenger
YOUR_SIGNED_TOKENс токеном, сгенерированным вашей бэкэнд-системой для текущего пользователя
Не следует жестко прописывать токен пользователя в статическом шаблоне веб-сайта. Токен должен генерироваться для текущего аутентифицированного пользователя.
JavaScript / TypeScript SDK
Получите подписанный токен из вашего бэкэнда и передайте его в initNotiondesk:
Примером является конечная точка /api/notiondesk-token. Используйте маршрут бэкэнда, соответствующий вашему приложению.
React и Next.js
Передайте подписанный токен в NotiondeskProvider:
Токен можно получить из вашей серверной части после аутентификации пользователя.
Секретный ключ приложения Notiondesk никогда не должен быть доступен клиентскому компоненту.
Шаг 4: Проверка токена
Перед запуском используйте инструмент проверки токена, доступный в настройках вашего мессенджера Notiondesk.
Вставьте токен, который только что сгенерировал ваш бэкэнд.
Notiondesk проверяет токен на соответствие вашим активным секретам приложения и отображает информацию о пользователе, которую Messenger может из него прочитать.
Токен, используемый для проверки, проверяется, но не сохраняется.
Валидация полезна для обнаружения:
import { initNotiondesk } from "@notiondesk-so/messenger-js-sdk";
const userToken = await fetch("/api/notiondesk-token").then((response) =>
response.ok ? response.text() : null,
);
const notiondesk = await initNotiondesk({
messengerId: "YOUR_MESSENGER_ID",
userToken,
});<NotiondeskProvider
messengerId="YOUR_MESSENGER_ID"
userToken={userToken}
>
{children}
</NotiondeskProvider>- Отсутствуют необходимые заявления
- Неверное
user_id
- Неверное значение
site_uuid
- Истекший срок действия токенов
- Токены подписаны с использованием неверного секретного ключа.
- Недействительные подписи
Обновить пользовательский токен
Срок действия пользовательских токенов должен быть кратковременным.
Если ваше приложение получает обновленный токен, когда Messenger уже инициализирован, обновите конфигурацию Messenger:
Для обновления пользовательского токена не требуется создавать еще один экземпляр Messenger.
Обработка выхода из системы
При выходе пользователя из приложения его учетная запись удаляется.
Вы можете удалить текущий токен:
Или полностью уничтожить экземпляр Messenger:
Перед началом сессии в том же браузере убедитесь, что учетные данные предыдущего пользователя удалены.
Загружать Messenger можно только для авторизованных пользователей.
Идентификация пользователя и решение о том, следует ли предоставлять доступ к Messenger, — это отдельные вопросы.
Если Messenger должен загружаться только для авторизованных пользователей, сохраните проверку разрешений внутри вашего приложения.
Например, с использованием React:
Анонимное использование Messenger может оставаться включенным, если ваша служба поддержки должна быть доступна как посетителям, так и зарегистрированным пользователям.
Передовые методы обеспечения безопасности
При идентификации пользователей в Messenger Notiondesk:
notiondesk.updateConfig({
userToken: refreshedUserToken,
});notiondesk.updateConfig({
userToken: null,
});notiondesk.destroy();<NotiondeskProvider
messengerId="YOUR_MESSENGER_ID"
enabled={currentUser.isAuthenticated}
userToken={userToken}
>
{children}
</NotiondeskProvider>- Храните секретные данные своего приложения на сервере.
- Подписывайте токены только в своей административной панели.
- Используйте HS256
- Включите все необходимые документы.
- Определите значение
user_idиз вашей аутентифицированной сессии на стороне сервера.
- Срок действия токенов должен быть кратковременным.
- Никогда не встраивайте пользовательские токены непосредственно в код фронтенда.
- При необходимости обновляйте токены.
- Удалять текущий токен при выходе пользователя из системы.
- Если вы считаете, что ваш секретный ключ приложения был раскрыт, смените его.
Поиск неисправностей
Messenger не распознает пользователя.
Проверьте это:
- Токен был сгенерирован вашей внутренней системой.
- Срок действия токена не истек.
- Все необходимые документы представлены.
- Вместо
subиспользуетсяuser_id
site_uuidсоответствует правильному сайту Notiondesk
- Токен был подписан с использованием активного секретного ключа приложения.
userTokenилиdata-user-tokenпередается в Messenger
Используйте валидатор токенов в настройках Messenger (Notiondesk), чтобы проверить, что Messenger может прочитать из токена.
Токен отклонен
Убедитесь, что токен подписан с использованием протокола HS256 и содержит:
type
iat
exp
user_id
site_uuid
Также убедитесь, что секретный ключ приложения, использованный для подписи токена, по-прежнему активен.
В Messenger по-прежнему отображается предыдущий пользователь.
Удалять токен пользователя при выходе текущего пользователя из системы:
Если ваше приложение переключается между учетными записями напрямую, вы также можете удалить и повторно инициализировать Messenger.
notiondesk.updateConfig({
userToken: null,
});