Wstęp
W zależności od tego, czy zdecydują się zalogować do dodatku ASAP, czy nie, użytkownicy końcowi mogą zostać sklasyfikowani jako użytkownicy gości i użytkownicy uwierzytelnieni. Ci, którzy zdecydują się nie logować, nazywani są użytkownikami gośćmi, a ci, którzy zdecydują się zalogować, nazywani są użytkownikami uwierzytelnionymi. W dodatku ASAP możesz zdefiniować, który komponent i zawartość będą widoczne dla każdego typu użytkownika.
Użytkownicy-goście mogą uzyskać dostęp do bazy wiedzy, przesłać zgłoszenie, przeglądać posty w społeczności użytkowników i rozmawiać z agentem obsługi klienta.
Z drugiej strony uwierzytelnieni użytkownicy mogą uzyskać dostęp do bazy wiedzy, przesłać zgłoszenie, przeglądać przesłane zgłoszenia, rozmawiać z agentem obsługi klienta i aktywnie uczestniczyć w społeczności użytkowników (z prawami do wykonywania działań, takich jak śledzenie tematu , dodawanie tematu i dodawanie komentarzy do istniejących postów).
Dlaczego potrzebny jest token JWT?
Dodatek ASAP, choć dostarczany przez Zoho, nie jest samodzielną aplikacją; działa w połączeniu z główną aplikacją, zapewniając jej funkcjonalność centrum pomocy. Gdy użytkownicy końcowi logują się do Twojej aplikacji, chcą uzyskać dostęp do wszystkich powiązanych funkcji, w tym do centrum pomocy, za pomocą jednego logowania. Konieczność zalogowania się do aplikacji za pomocą jednego zestawu danych uwierzytelniających i konieczność zalogowania się do centrum pomocy za pomocą innego zestawu danych uwierzytelniających — ponieważ usługi mogą korzystać z różnych metod uwierzytelniania — niedogodności dla użytkowników końcowych. W tym miejscu do gry wchodzi token sieciowy JSON (JWT).
- Uwierzytelnianie użytkowników oparte na JWT jest możliwe tylko wtedy, gdy w portalu Zoho Desk jest włączone jednokrotne logowanie (SSO). SSO zapewnia, że użytkownicy końcowi nie muszą używać różnych danych logowania, aby uzyskać dostęp do różnych systemów wsparcia, które posiadasz. Jeśli logowanie jednokrotne nie jest włączone, użytkownicy końcowi mogą uzyskiwać dostęp do dodatku ASAP tylko jako użytkownicy-goście.
- Upewnij się, że logowanie jednokrotne jest włączone w domyślnym centrum pomocy, a nie w jednym z wielomarkowych centrów pomocy w Twoim portalu.
Co to jest token JWT?
Internet Engineering Task Force, ciało, które stworzyło standard JWT, definiuje JWT jako „kompaktowy, bezpieczny dla adresów URL sposób przedstawiania roszczeń, które mają być przesyłane między dwiema stronami”.
W kontekście dodatku ASAP JWT jest mechanizmem, który weryfikuje autentyczność użytkownika głównej aplikacji i daje mu uprawnienia do korzystania z centrum pomocy opartego na ASAP z tymi samymi danymi uwierzytelniającymi.
Figure 1: JWT Implementation in the ASAP Add-On
Warunki wstępne włączenia JWT
Następujące dwa składniki są niezbędne do uwierzytelniania opartego na tokenach JWT:
- Punkt końcowy tokena JWT
- Sekret JWT
Punkt końcowy tokena JWT: Jest to punkt końcowy serwera, który należy skonfigurować przed skonfigurowaniem uwierzytelniania JWT dla dodatku ASAP. Ten punkt końcowy musi zawierać kod generujący token JWT i do tego punktu końcowego serwer IAM wysyła żądanie GET zawierające token użytkownika. Podczas konfigurowania dodatku w Zoho Desk należy podać poprawny adres URL punktu końcowego JWT.
Punkt końcowy JWT musi również stale uruchamiać następujący program z kluczem tajnym JWT wygenerowanym dla Twojego dodatku.
import io.jsonwebtoken.SignatureAlgorithm;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import java.io.UnsupportedEncodingException;
public static String generateJwt(String userToken) throws UnsupportedEncodingException{
String secretKey = ""; //This value will be given once add-on is created. Then replace the provided value here
long notBeforeMillis = System.currentTimeMillis();
long notAfterMillis = notBeforeMillis + 300000;
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
byte[] apiKeySecretBytes = secretKey.getBytes();
Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
JwtBuilder builder = Jwts.builder().signWith(signatureAlgorithm, signingKey);
String jwt = builder.claim("email_verified", true)
.claim("not_after", notAfterMillis)
.claim("not_before", notBeforeMillis)
.claim("email", <user_email_address_from_user_token>).compact();
return jwt;
}
- userToken to parametr wejściowy, który uwzględnia token użytkownika otrzymany z aplikacji. Ten parametr przenosi dane użytkownika zalogowanego do aplikacji. Dlatego upewnij się, że token użytkownika jest szyfrowany, gdy jest wysyłany z aplikacji do serwera IAM Zoho, a następnie do punktu końcowego JWT. To właśnie w punkcie końcowym JWT token użytkownika musi zostać odszyfrowany i zweryfikowany pod kątem autentyczności.
- Parametr email zwraca adres e-mail użytkownika.
- Parametr email_verified to parametr logiczny zwracany, jeśli adres e-mail jest zweryfikowany, czy nie, a następnie wysyła token OAuth do dodatku ASAP.
- Parametry not_before i not_after definiują czas, po którym token JWT wygasa. Wartość tych parametrów musi być w formacie uniwersalnego czasu koordynowanego (UTC) i wyrażona w milisekundach.
- Aby zapewnić silne bezpieczeństwo, upewnij się, że różnica czasu między parametrami not_before i not_after nie przekracza 600000 milisekund (10 minut).
JWT sekret: Sekret JWT to unikalny kod udostępniany podczas konfigurowania dodatku ASAP w Zoho Desk. Służy do podpisywania szczegółów użytkownika po tym, jak punkt końcowy JWT zweryfikuje token użytkownika otrzymany z serwera IAM. Ten podpisany fragment danych jest nazywany odpowiedzią JWT.
Sekret JWT jest udostępniany tylko raz — podczas rejestracji dodatku. Dlatego upewnij się, że przechowujesz sekret w bardzo bezpiecznym miejscu i nie udostępniaj go żadnym niezaufanym stronom.
Jak działa token JWT?
Gdy użytkownik próbuje zalogować się do dodatku ASAP przy użyciu poświadczeń dla głównej aplikacji, aplikacja wysyła swój identyfikator klienta, klucz tajny klienta i token użytkownika do serwera IAM Zoho w celu weryfikacji.
Jeśli serwer IAM stwierdzi, że poświadczenia są prawidłowe, wysyła token użytkownika i żądanie użytkownika GET do punktu końcowego JWT za pośrednictwem adresu URL przekierowania JWT.
Następnie punkt końcowy JWT weryfikuje token użytkownika pod kątem jego autentyczności. Po tej weryfikacji:
jeśli token użytkownika jest ważny, odpowiedź JWT zawierająca dane użytkownika (identyfikator e-mail użytkownika, status weryfikacji adresu e-mail, interwał logowania) jest podpisana kluczem JWT i odesłana do serwera uprawnień
- jeśli token użytkownika jest nieprawidłowy, odpowiedź JWT jest odsyłana z wartością parametru email_verified ustawionego na false
- Jeśli serwer IAM otrzyma prawidłową odpowiedź JWT, wysyła dalej token OAuth2, który ostatecznie uznaje użytkownika końcowego za użytkownika portalu pomocy technicznej.
W przypadku dodatku ASAP względy bezpieczeństwa nakazują użycie metody GET, a nie żadnej innej metody pobierania tokena JWT.
Kluczowe punkty do zapamiętania
- Adres URL tokena JWT można zmienić w dowolnym momencie na stronie konfiguracji.
- Adres URL musi zawierać parametr o nazwie „token_użytkownika” do przekazywania informacji o użytkowniku do serwera JWT.
- Odpowiedź JWT musi zostać zwrócona jako zwykły łańcuch.
- Odpowiedź JWT musi zawierać parametry email, email_verified, not_before i not_after.
- Zmiana czasu serwera aplikacji może wpłynąć na wartości ustawione dla parametrów not_before i not_after. Dlatego pamiętaj o zmodyfikowaniu kodu JWT również po zmianie czasu serwera aplikacji.
- Obecnie do podpisywania jest obsługiwany tylko algorytm HMACSHA256.