Идентификация авторизованных пользователей в мессенджере Notiondesk

Надежно идентифицируйте авторизованных пользователей в мессенджере Notiondesk с помощью кратковременных пользовательских токенов, генерируемых вашей серверной частью.

1 мин чтения

Notiondesk Messenger может идентифицировать пользователей, вошедших в ваше приложение.

Идентификация использует кратковременный пользовательский токен, сгенерированный вашим бэкэндом. Ваш фронтенд передает этот токен в SDK Messenger при инициализации Messenger.

Это предотвращает раскрытие конфиденциальных учетных данных аутентификации в коде браузера.

Прежде чем начать

Вам потребуется:

  • Мессенджер Notiondesk установлен с пакетом @notiondesk-so/messenger-js-sdk
  • Аутентификация уже реализована в вашем приложении.
  • Бэкенд, способный генерировать пользовательский токен Notiondesk
  • Ваш секрет приложения Notiondesk
Никогда не раскрывайте свой секретный ключ приложения Notiondesk во фронтенд-JavaScript, компонентах React, переменных окружения, передаваемых в браузер, или общедоступных репозиториях.

Как работает идентификация пользователя

Процесс аутентификации выглядит следующим образом:

  1. Пользователь входит в ваше приложение.
  1. Ваш фронтенд запрашивает у бэкенда пользовательский токен Notiondesk.
  1. Ваша серверная часть подписывает кратковременный токен для аутентифицированного пользователя.
  1. Ваш бэкэнд возвращает подписанный токен в браузер.
  1. Ваш веб-сайт или приложение передает токен в мессенджер Notiondesk
  1. 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,
});
Эта страница была полезной?