Xác định người dùng đã đăng nhập trong Notiondesk Messenger

Xác định người dùng đã được xác thực một cách an toàn trong ứng dụng nhắn tin Notiondesk bằng cách sử dụng mã thông báo người dùng có thời hạn ngắn được tạo bởi hệ thống phụ trợ của bạn.

10 phút đọc

Notiondesk Messenger có thể xác định người dùng đã đăng nhập vào ứng dụng của bạn.

Quá trình xác thực sử dụng mã thông báo người dùng có thời hạn ngắn được tạo bởi máy chủ phụ trợ của bạn. Giao diện người dùng của bạn sẽ chuyển mã thông báo này cho SDK Messenger khi Messenger được khởi tạo.

Điều này giúp ngăn chặn việc lộ thông tin xác thực nhạy cảm trong mã trình duyệt.

Trước khi bạn bắt đầu

Bạn cần:

  • Notiondesk Messenger được cài đặt với gói @notiondesk-so/messenger-js-sdk
  • Xác thực đã được triển khai trong ứng dụng của bạn.
  • Một hệ thống phụ trợ có thể tạo ra mã thông báo người dùng Notiondesk
  • Mã bí mật ứng dụng của bạn Notiondesk
Tuyệt đối không được để lộ mã bí mật ứng dụng Notiondesk của bạn trong mã JavaScript phía giao diện người dùng, các thành phần React, các biến môi trường được gửi đến trình duyệt hoặc các kho lưu trữ công khai.

Cách thức xác thực người dùng hoạt động

Quy trình xác thực như sau:

  1. Người dùng đăng nhập vào ứng dụng của bạn.
  1. Giao diện người dùng của bạn yêu cầu mã thông báo người dùng Notiondesk từ máy chủ phụ trợ.
  1. Hệ thống phụ trợ của bạn sẽ ký một mã thông báo có thời hạn ngắn cho người dùng đã được xác thực đó.
  1. Hệ thống phụ trợ của bạn sẽ trả về mã thông báo đã ký cho trình duyệt.
  1. Trang web hoặc ứng dụng của bạn chuyển mã thông báo đến Notiondesk Messenger
  1. Ứng dụng nhắn tin nhận diện người truy cập là người dùng tương ứng.

Hệ thống máy chủ của bạn nên xác định danh tính người dùng từ phiên ứng dụng đã được xác thực. Không nên tin tưởng vào ID người dùng được cung cấp trực tiếp bởi trình duyệt.

Bước 1: Tạo mã bí mật ứng dụng

Vào Cài đặt → Truy cập trong Notiondesk và tạo Mã bí mật ứng dụng.

Lưu trữ thông tin bí mật trong một biến môi trường phía máy chủ, ví dụ:

NOTIONDESK_APP_SECRET
Mã bí mật ứng dụng chỉ hiển thị một lần khi được tạo. Hãy sao chép và lưu trữ mã này một cách an toàn khi nó xuất hiện.

Bạn có thể quản lý và xoay vòng Bí mật ứng dụng của mình từ Cài đặt → Quyền truy cập .

Tuyệt đối không thêm App Secret vào:

  • JavaScript giao diện người dùng
  • Các thành phần phía máy khách React hoặc Vue
  • Các biến số môi trường công cộng
  • Gói trình duyệt
  • Kho lưu trữ công cộng

Bước 2: Ký mã thông báo người dùng trên máy chủ phụ trợ của bạn

Hãy tạo mã thông báo người dùng từ máy chủ phụ trợ của bạn sau khi ứng dụng đã xác thực người dùng hiện tại.

Mã thông báo người dùng Notiondesk sử dụng HS256 và phải chứa các thông tin sau:

Khẳng định Sự miêu tả
typeLoại mã thông báo được yêu cầu bởi Notiondesk
iatThời điểm phát hành mã thông báo
expThời gian hết hạn của mã thông báo
user_idMã định danh duy nhất cho người dùng trong ứng dụng của bạn
site_uuidMã định danh cho trang web Notiondesk của bạn

Hãy sử dụng user_id làm mã định danh người dùng. Không sử dụng sub thay cho user_id.

Bạn cũng có thể cung cấp thông tin người dùng như:

  • email
  • name

Hãy đặt thời hạn sử dụng token ngắn và chỉ tạo chúng trên máy chủ của bạn.

Notiondesk cung cấp các ví dụ ký token dành riêng cho từng ngôn ngữ trong thiết lập Messenger của bạn, bao gồm Node.js, Python, PHP và Ruby. Hãy sử dụng ví dụ được cung cấp trong bảng điều khiển Notiondesk thay vì ký token trực tiếp trong mã trình duyệt.

Bước 3: Chuyển mã thông báo cho Messenger

Sau khi hệ thống phụ trợ tạo ra mã thông báo, hãy chuyển mã thông báo đó cho ứng dụng Messenger của bạn.

Cài đặt trang web tiêu chuẩn

Nếu bạn đã cài đặt Messenger bằng tập lệnh tiêu chuẩn, hãy cung cấp mã thông báo đã ký với data-user-token:

Thay thế:

<script
  async
  src="https://static.notiondesk.help/messenger/widget.js"
  data-messenger-id="YOUR_MESSENGER_ID"
  data-user-token="YOUR_SIGNED_TOKEN">
</script>
  • __ĐÃ BẢO LƯU_27__ với ID Messenger của bạn
  • YOUR_SIGNED_TOKEN với mã thông báo được tạo bởi hệ thống phụ trợ của bạn cho người dùng hiện tại

Không nên mã hóa cứng mã token của người dùng vào mẫu website tĩnh. Mã token nên được tạo cho người dùng hiện đang được xác thực.

Bộ công cụ phát triển phần mềm JavaScript / TypeScript

Lấy mã thông báo đã ký từ máy chủ phụ trợ của bạn và chuyển nó cho initNotiondesk:

Điểm cuối /api/notiondesk-token chỉ là một ví dụ. Hãy sử dụng tuyến đường phụ trợ phù hợp với ứng dụng của bạn.

React và Next.js

Chuyển mã thông báo đã ký cho NotiondeskProvider:

Bạn có thể lấy mã thông báo từ hệ thống phụ trợ của mình sau khi người dùng đã xác thực.

Mã bí mật ứng dụng Notiondesk không bao giờ được phép cung cấp cho thành phần máy khách.

Bước 4: Xác thực mã thông báo

Trước khi chính thức hoạt động, hãy sử dụng công cụ xác thực mã thông báo có sẵn trong thiết lập Messenger của bạn.

Dán mã token mà hệ thống phụ trợ của bạn vừa tạo ra.

Notiondesk kiểm tra mã thông báo so với App Secrets đang hoạt động của bạn và hiển thị cho người dùng thông tin mà Messenger có thể đọc được từ đó.

Mã thông báo được sử dụng để xác thực được kiểm tra nhưng không được lưu trữ.

Việc xác thực rất hữu ích để phát hiện:

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>
  • Thiếu các yêu cầu bồi thường cần thiết
  • Một user_id không chính xác
  • Một site_uuid không chính xác
  • Mã thông báo đã hết hạn
  • Các mã thông báo được ký bằng mã bí mật sai
  • Chữ ký không hợp lệ

Làm mới mã thông báo người dùng

Mã thông báo người dùng nên có thời hạn ngắn.

Nếu ứng dụng của bạn nhận được mã thông báo được làm mới trong khi Messenger đã được khởi tạo, hãy cập nhật cấu hình Messenger:

Bạn không cần tạo một phiên bản Messenger khác chỉ để cập nhật mã thông báo người dùng.

Xử lý đăng xuất

Xóa thông tin người dùng đã xác định khi ai đó đăng xuất khỏi ứng dụng của bạn.

Bạn có thể xóa mã thông báo hiện tại:

Hoặc xóa hoàn toàn ứng dụng Messenger:

Hãy đảm bảo rằng thông tin đăng nhập của người dùng trước đó đã được xóa trước khi người dùng khác bắt đầu phiên làm việc trên cùng một trình duyệt.

Chỉ cho phép người dùng đã xác thực tải Messenger.

Việc xác định người dùng và quyết định xem Messenger có nên được cung cấp hay không là hai vấn đề riêng biệt.

Nếu Messenger chỉ nên được tải cho người dùng đã đăng nhập, hãy giữ việc kiểm tra quyền đó bên trong ứng dụng của bạn.

Ví dụ, với React:

Bạn có thể tiếp tục bật tính năng nhắn tin ẩn danh nếu dịch vụ hỗ trợ của bạn dành cho cả khách truy cập và khách hàng đã đăng nhập.

Các biện pháp bảo mật tốt nhất

Khi xác định người dùng trong Notiondesk Messenger:

notiondesk.updateConfig({
  userToken: refreshedUserToken,
});
notiondesk.updateConfig({
  userToken: null,
});
notiondesk.destroy();
<NotiondeskProvider
  messengerId="YOUR_MESSENGER_ID"
  enabled={currentUser.isAuthenticated}
  userToken={userToken}
>
  {children}
</NotiondeskProvider>
  • Giữ bí mật ứng dụng của bạn trên máy chủ.
  • Chỉ ký token ở phía máy chủ của bạn.
  • Sử dụng HS256
  • Bao gồm tất cả các yêu cầu bồi thường cần thiết.
  • Xác định user_id từ phiên xác thực phía máy chủ của bạn.
  • Giữ cho thời gian sử dụng token ngắn.
  • Không bao giờ mã hóa cứng mã thông báo người dùng vào mã giao diện người dùng.
  • Làm mới mã thông báo khi cần thiết.
  • Xóa mã thông báo hiện tại khi người dùng đăng xuất.
  • Hãy thay đổi mật khẩu ứng dụng nếu bạn cho rằng nó đã bị lộ.

Khắc phục sự cố

Ứng dụng Messenger không nhận diện được người dùng.

Hãy kiểm tra điều này:

  • Mã thông báo này được tạo bởi hệ thống phụ trợ của bạn.
  • Mã thông báo chưa hết hạn
  • Tất cả các yêu cầu cần thiết đều đã được đáp ứng.
  • user_id được sử dụng thay cho sub
  • site_uuid khớp với trang web Notiondesk chính xác
  • Mã thông báo được ký bằng App Secret đang hoạt động.
  • userToken hoặc data-user-token được truyền đến Messenger

Sử dụng trình xác thực mã thông báo trong thiết lập Messenger của bạn để kiểm tra xem Messenger có thể đọc được những gì từ mã thông báo.

Mã thông báo bị từ chối

Xác minh rằng mã thông báo đã được ký bằng HS256 và chứa:

  • type
  • iat
  • exp
  • user_id
  • site_uuid

Hãy xác nhận rằng App Secret được sử dụng để ký token vẫn còn hoạt động.

Ứng dụng Messenger vẫn hiển thị người dùng trước đó.

Xóa mã thông báo người dùng khi người dùng hiện tại đăng xuất:

Nếu ứng dụng của bạn chuyển đổi trực tiếp giữa các tài khoản, bạn cũng có thể hủy và khởi tạo lại Messenger.

notiondesk.updateConfig({
  userToken: null,
});
Trang này có hữu ích không?