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
Cách thức xác thực người dùng hoạt động
Quy trình xác thực như sau:
- Người dùng đăng nhập vào ứng dụng của bạn.
- 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ợ.
- 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 đó.
- Hệ thống phụ trợ của bạn sẽ trả về mã thông báo đã ký cho trình duyệt.
- Trang web hoặc ứng dụng của bạn chuyển mã thông báo đến Notiondesk Messenger
- Ứ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_SECRETBạ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ả |
|---|---|
type | Loại mã thông báo được yêu cầu bởi Notiondesk |
iat | Thời điểm phát hành mã thông báo |
exp | Thời gian hết hạn của mã thông báo |
user_id | Mã định danh duy nhất cho người dùng trong ứng dụng của bạn |
site_uuid | Mã đị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_TOKENvớ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_idkhông chính xác
- Một
site_uuidkhô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_idtừ 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 chosub
site_uuidkhớ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.
userTokenhoặcdata-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,
});