Zidentyfikuj zalogowanych użytkowników w Notiondesk Messenger

Bezpieczna identyfikacja uwierzytelnionych użytkowników w programie Notiondesk Messenger przy użyciu krótkotrwałych tokenów użytkownika generowanych przez zaplecze.

5 min czytania

Notiondesk Messenger może identyfikować użytkowników zalogowanych do Twojej aplikacji.

Identyfikacja wykorzystuje krótkotrwały token użytkownika generowany przez Twój back-end. Twój front-end przekazuje ten token do Notiondesk Messenger SDK podczas inicjalizacji Messengera.

Zapobiega to ujawnieniu poufnych danych uwierzytelniających w kodzie przeglądarki.

Zanim zaczniesz

Potrzebujesz:

  • Notiondesk Messenger zainstalowany z pakietem @notiondesk-so/messenger-js-sdk
  • Uwierzytelnianie jest już zaimplementowane w Twojej aplikacji
  • Zaplecze, które może wygenerować token użytkownika Notiondesk
  • Twój sekret aplikacji Notiondesk
Nigdy nie ujawniaj swojego sekretu aplikacji Notiondesk w interfejsie JavaScript, komponentach React, zmiennych środowiskowych przesyłanych do przeglądarki ani publicznych repozytoriach.

Jak działa identyfikacja użytkownika

Przepływ uwierzytelniania jest następujący:

  1. Użytkownik loguje się do Twojej aplikacji
  1. Twój front-end żąda od swojego zaplecza tokenu użytkownika Notiondesk
  1. Twój back-end podpisuje krótkotrwały token dla tego uwierzytelnionego użytkownika
  1. Twój back-end zwraca podpisany token do przeglądarki
  1. Twoja witryna lub aplikacja przekazuje token do Notiondesk Messenger
  1. Messenger rozpoznaje odwiedzającego jako odpowiedniego użytkownika

Twój system zaplecza powinien określić tożsamość użytkownika na podstawie uwierzytelnionej sesji aplikacji. Nie ufaj identyfikatorowi użytkownika dostarczonemu bezpośrednio przez przeglądarkę.

Krok 1: Utwórz tajny klucz aplikacji

Przejdź do Ustawień → Dostęp w Notiondesk i utwórz tajny klucz aplikacji.

Zapisz sekret w zmiennej środowiskowej po stronie serwera, na przykład:

NOTIONDESK_APP_SECRET
Tajny klucz aplikacji jest wyświetlany tylko raz podczas tworzenia. Skopiuj go i bezpiecznie przechowuj, gdy się pojawi.

Możesz zarządzać swoimi sekretami aplikacji i zmieniać je w Ustawieniach → Dostęp .

Nigdy nie dodawaj tajnego klucza aplikacji do:

  • JavaScript front-end
  • Komponenty klienckie React lub Vue
  • Publiczne zmienne środowiskowe
  • Pakiety przeglądarek
  • Publiczne repozytoria

Krok 2: Podpisz token użytkownika w swoim zapleczu

Wygeneruj token użytkownika z zaplecza po uwierzytelnieniu bieżącego użytkownika przez aplikację.

Tokeny użytkownika Notiondesk korzystają z protokołu HS256 i muszą zawierać następujące oświadczenia:

Prawo Opis
typeTyp tokena wymagany przez Notiondesk
iatCzas wydania tokena
expCzas wygaśnięcia tokena
user_idUnikalny identyfikator użytkownika w Twojej aplikacji
site_uuidIdentyfikator Twojej witryny Notiondesk

Użyj user_id jako identyfikatora użytkownika. Nie używaj sub zamiast user_id.

Możesz również podać informacje o użytkowniku, takie jak:

  • email
  • name

Zadbaj o to, aby tokeny miały krótki okres ważności i generuj je tylko na swoim serwerze.

Notiondesk zawiera przykłady podpisywania dla konkretnych języków w konfiguracji Messengera, dla takich języków jak Node.js, Python, PHP i Ruby. Zamiast podpisywać tokeny w kodzie przeglądarki, skorzystaj z przykładu podanego w panelu Notiondesk.

Krok 3: Przekaż token do Messengera

Gdy zaplecze wygeneruje token, przekaż go do instalacji Messengera.

Standardowa instalacja witryny internetowej

Jeżeli zainstalowałeś Messengera za pomocą standardowego skryptu, podaj podpisany token za pomocą data-user-token:

Zastępować:

<script
  async
  src="https://static.notiondesk.help/messenger/widget.js"
  data-messenger-id="YOUR_MESSENGER_ID"
  data-user-token="YOUR_SIGNED_TOKEN">
</script>
  • YOUR_MESSENGER_ID z Twoim identyfikatorem Messenger
  • YOUR_SIGNED_TOKEN z tokenem wygenerowanym przez zaplecze dla bieżącego użytkownika

Nie koduj na stałe tokena użytkownika w statycznym szablonie witryny. Token powinien zostać wygenerowany dla aktualnie uwierzytelnionego użytkownika.

Zestaw SDK JavaScript/TypeScript

Pobierz podpisany token ze swojego zaplecza i przekaż go do initNotiondesk:

Punkt końcowy /api/notiondesk-token jest przykładem. Użyj trasy zaplecza, która pasuje do Twojej aplikacji.

React i Next.js

Przekaż podpisany token do NotiondeskProvider:

Token można pobrać z zaplecza po uwierzytelnieniu użytkownika.

Klucz aplikacji Notiondesk nie może być nigdy dostępny dla komponentu klienta.

Krok 4: Zweryfikuj token

Przed uruchomieniem należy skorzystać z narzędzia do weryfikacji tokenów dostępnego w konfiguracji Notiondesk Messenger.

Wklej token, który właśnie wygenerował Twój serwer.

Notiondesk sprawdza, czy token jest zgodny z aktywnymi sekretami aplikacji i wyświetla informacje o użytkowniku, które aplikacja Messenger może z niego odczytać.

Token używany do walidacji jest sprawdzany, ale nie przechowywany.

Walidacja jest przydatna do wykrywania:

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>
  • Brak wymaganych roszczeń
  • Nieprawidłowy user_id
  • Nieprawidłowy site_uuid
  • Wygasłe tokeny
  • Tokeny podpisane niewłaściwym kluczem tajnym
  • Nieprawidłowe podpisy

Odśwież token użytkownika

Tokeny użytkownika powinny mieć krótki okres ważności.

Jeśli Twoja aplikacja otrzyma odświeżony token, gdy Messenger jest już zainicjowany, zaktualizuj konfigurację Messenger:

Nie musisz tworzyć kolejnej instancji Messengera, aby zaktualizować token użytkownika.

Obsługa wylogowania

Wyczyść zidentyfikowanego użytkownika, gdy ktoś wyloguje się z Twojej aplikacji.

Możesz usunąć bieżący token:

Lub całkowicie zniszcz instancję Messengera:

Przed rozpoczęciem sesji w tej samej przeglądarce przez innego użytkownika należy upewnić się, że tożsamość poprzedniego użytkownika została wyczyszczona.

Załaduj Messenger tylko dla uwierzytelnionych użytkowników

Identyfikacja użytkownika i decyzja o dostępności Messengera to odrębne kwestie.

Jeśli aplikacja Messenger ma być ładowana tylko dla zalogowanych użytkowników, zaznacz odpowiednie uprawnienia w swojej aplikacji.

Na przykład z React:

Możesz nadal korzystać z anonimowego komunikatora Messenger, jeśli chcesz, aby pomoc techniczna była dostępna zarówno dla odwiedzających, jak i zalogowanych klientów.

Najlepsze praktyki bezpieczeństwa

Podczas identyfikacji użytkowników w Notiondesk Messenger:

notiondesk.updateConfig({
  userToken: refreshedUserToken,
});
notiondesk.updateConfig({
  userToken: null,
});
notiondesk.destroy();
<NotiondeskProvider
  messengerId="YOUR_MESSENGER_ID"
  enabled={currentUser.isAuthenticated}
  userToken={userToken}
>
  {children}
</NotiondeskProvider>
  • Zachowaj tajność swojej aplikacji na serwerze
  • Podpisuj tokeny tylko na swoim zapleczu
  • Użyj HS256
  • Uwzględnij wszystkie wymagane roszczenia
  • Określ user_id na podstawie uwierzytelnionej sesji po stronie serwera
  • Utrzymuj tokeny o krótkim okresie ważności
  • Nigdy nie koduj na stałe tokenów użytkownika w kodzie front-end
  • Odśwież tokeny w razie potrzeby
  • Wyczyść bieżący token, gdy użytkownik się wyloguje
  • Obróć swój sekret aplikacji, jeśli uważasz, że został ujawniony

Rozwiązywanie problemów

Messenger nie rozpoznaje użytkownika

Sprawdź, czy:

  • Token został wygenerowany przez Twój back-end
  • Token nie wygasł
  • Wszystkie wymagane roszczenia są obecne
  • Zamiast sub stosuje się user_id
  • site_uuid pasuje do prawidłowej lokalizacji Notiondesk
  • Token został podpisany przy użyciu aktywnego klucza tajnego aplikacji
  • userToken lub data-user-token jest przekazywane do Messengera

Użyj walidatora tokenów w konfiguracji Notiondesk Messenger, aby sprawdzić, co Messenger może odczytać z tokena.

Token został odrzucony

Sprawdź, czy token został podpisany przy użyciu protokołu HS256 i zawiera:

  • type
  • iat
  • exp
  • user_id
  • site_uuid

Sprawdź również, czy tajny klucz aplikacji użyty do podpisania tokena jest nadal aktywny.

Messenger nadal pokazuje poprzedniego użytkownika

Wyczyść token użytkownika, gdy bieżący użytkownik się wyloguje:

Jeśli Twoja aplikacja przełącza się bezpośrednio między kontami, możesz także zniszczyć i ponownie zainicjować Messengera.

notiondesk.updateConfig({
  userToken: null,
});
Czy ta strona była pomocna?