Kundo

Säker användarinloggning i chatten

Uppdaterad

Här finns tekniska detaljer för att implementera säker inloggning för slutanvändare till Kundo Chatt. Kontakta oss på support@kundo.se för att få ytterligare hjälp med hur det fungerar.

Ni behöver ha en REST-endpoint som vi kan ladda via ajax, och som då returnerar en signerad token (JWT) med användarens uppgifter.

Specifikation för token

För att verifiera att användarens uppgifter kommer från er måste ni signera en JWT-token. JWT är en standard och det finns färdiga bibliotek för att generera dessa för alla större programmeringsspråk. Sidan jwt.io är en bra resurs för hur ni skapar en JWT-token.

Token måste också uppfylla följande:

  • Vara signerad med den nyckel Kundo tillhandahåller, med algoritmen HS512 eller HS256
  • Innehålla name och email som claims. Dessa visas upp för användare och redaktör.
  • Innehålla ett iat claim. Vi verifierar att detta inte ligger i framtiden.
  • Innehålla ett exp claim. Vi verifierar genom detta att den inte gått ut, även under fortsatt kommunikation under chatten. Vi rekommenderar därför att ni sätter den till en timme efter iat.

Utöver detta får er token innehålla valfria claims, där man i framtiden kommer konfigurera vilka som ska visas i gränssnittet (här kan saker som kundnummer, användar-ID eller annat kundspecifikt vara intressant för er).

Specifikation för transporten

Chat-skriptet gör ett GET-anrop till den URL ni tillhandahåller. Vid lyckad autentisering av användaren ska ni svara med ett JSON-svar innehållandes användarens token ovan som attribut "jwt".

Ett giltigt svar, givet mina användaruppgifter och den påhittade nyckeln "kundo" skulle vara {"jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0ODAwNzM4NzksImV4cCI6MTQ4MDA3NzQ3OSwiZW1haWwiOiJhbHZpbkBrdW5kby5zZSIsIm5hbWUiOiJBbHZpbiBMaW5kc3RhbSJ9.YcCBANpzEoITTBpuMYiusprjFJbPo9207pAwwKZebS8"}.

CORS

Om autentiserings-endpointen och sidan som chatten visas på ligger på olika origins måste er server hantera CORS-headers för att kommunikationen ska fungera.

Mozilla har bra information (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS), vilket kan sammanfattas som:

Ni måste se till att svara med Access-Control-Allow-Origin-header som matchar den origin som anropet kommer ifrån, så att chat-scriptet kan läsa ut innehållet i svaret. Här är det viktigt att tänka på att inte whitelista hela internet utan bara de origins ni litar på, då det annars skulle kunna exponera användarens uppgifter.

För att kunna skicka med användarens identitet till er autentiserings-endpoint måste vi göra ett anrop med withCredentials, så att cookies och eventuella klientcertifikat skickas med. På grund av detta skickas ett preflight-request av webbläsaren. Det innebär alltså ett OPTIONS-anrop till samma url, som måste svara med Access-Control-Allow-Credentials: true-header.

Er endpoint ska alltså stödja GET och OPTIONS till samma url, och förslagsvis inkludera följande headers i alla dessa (där <origin> är aktuell, whitelistad origin):

Access-Control-Allow-Origin: <origin>
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 86400

Vad behöver Kundo?

För att komma igång så behöver vi en URL till er endpoint ovan, signeringsnyckeln, samt eventuella extrafält som ni vill ska visas för redaktörer. 

Vi behöver lägga in dessa inställningar för chattflödet, sedan kommer det användas för alla sidor där chattflödet är inlagt. Ni har också möjlighet att välja om chatten alltid ska vara inloggad eller om det ska vara olika på olika sidor.