Feedjoltdocs
Desenvolupadors

SSO amb JWT

Autentica els teus usuaris al portal i el widget de Feedjolt amb un JWT efímer que signa el teu backend. Sense segon inici. Configura claims, secrets i rotació.

Si la teva aplicacio ja sap qui es l'usuari, no l'hauries d'obligar a iniciar sessio de nou per deixar feedback. Amb SSO per JWT el teu backend signa un token de curta durada que identifica l'usuari; Feedjolt el verifica al servidor i l'inicia de manera transparent al portal i al widget integrat. L'SSO per JWT esta disponible a tots els plans.

Com funciona

  1. Configures un secret de signatura i un algorisme a Tauler -> Desenvolupadors -> SSO amb JWT.
  2. Quan un usuari autenticat obre el feedback, el teu backend genera un JWT amb les seves dades, signat amb aquest secret.
  3. Passes el token a Feedjolt: al widget mitjancant data-sso-token, o enviant-lo per POST a l'endpoint d'identificacio.
  4. Feedjolt verifica la signatura, crea o actualitza l'usuari final corresponent i estableix una cookie de sessio al servidor. Sense enllac magic, sense inici de sessio addicional.

El secret nomes viu al teu servidor i al de Feedjolt. El navegador nomes veu el token resultant, mai el secret.

Aplica-ho amb un agent de codi

  1. Configura la clau, l'algorisme, l'emissor i l'audiencia a Tauler -> Desenvolupadors -> SSO amb JWT. Fes servir el dau per generar una clau hexadecimal de 64 caracters.
  2. Desa.
  3. Copia el prompt de la columna dreta.
  4. Enganxa'l al teu agent de codi perque afegeixi el codi de signatura i redireccio a la teva app.

El prompt inclou la teva clau. Enganxa'l nomes a una eina de confianca. Els snippets manuals queden plegats a Fes-ho tu.

Configuracio

El SSO per JWT es configura per espai de treball (nomes el propietari) a Tauler -> Desenvolupadors -> SSO amb JWT:

CampNotes
secret_keyEl teu secret de signatura compartit. De 16 a 512 caracters. Guarda'l nomes al servidor.
algorithmUn de HS256 (per defecte), HS384, HS512. Signatura HMAC amb secret compartit.
issuerOpcional. Si es defineix, el claim iss del token ha de coincidir.
audienceOpcional. Si es defineix, el claim aud del token ha de coincidir.
sync_modeUPSERT (per defecte) crea automaticament usuaris desconeguts; UPDATE_ONLY rebutja tokens d'usuaris que encara no existeixen.

Nomes s'admeten algorismes HMAC: no hi ha mode de clau publica (asimetric). Les dues parts comparteixen el mateix secret.

Claims del token

Genera un JWT estandard signat amb el teu secret. Aquests claims son obligatoris: un token al qual li falti qualsevol d'ells es rebutja.

ClaimSignificat
subEl teu ID d'usuari estable. S'usa com a ID extern de l'usuari final.
emailEl correu de l'usuari.
nameNom visible.
iatEmes el (claim estandard de JWT).
expCaducitat (claim estandard de JWT). Mante-la curta: minuts, no dies.

Els claims opcionals enriqueixen el perfil sincronitzat:

ClaimSignificat
avatar_urlURL de la imatge de perfil.
custom_fieldsObjecte de claus/valors arbitraris que es desa a l'usuari final.
companyObjecte que identifica l'empresa de l'usuari; vegeu mes avall.

Si has configurat un issuer o un audience, inclou tambe els claims iss / aud corresponents; nomes es verifiquen quan estan configurats.

Claim d'empresa

Passa company com a objecte per associar l'usuari a un registre d'empresa (creat o actualitzat al vol). Tambe s'accepta companies (un array): s'usa la primera entrada.

{
  "company": {
    "id": "org_123",
    "name": "Acme Inc",
    "plan": "enterprise",
    "mrr": 2400,
    "industry": "fintech",
    "employee_count": 120
  }
}

Per a una empresa nomes id i name son obligatoris; la resta es opcional.

Generar el token

Genera el JWT al teu backend, on el secret esta protegit. Mante exp curt. El token continua sent valid fins a exp: Feedjolt no el tracta com d'un sol us, aixi que un token filtrat es pot reutilitzar fins que caduqui.

// Node.js - npm i jsonwebtoken
import jwt from "jsonwebtoken";

const token = jwt.sign(
  {
    sub: user.id,
    email: user.email,
    name: user.fullName,
    avatar_url: user.avatarUrl,
    company: { id: user.orgId, name: user.orgName },
  },
  process.env.FEEDJOLT_JWT_SECRET,
  { algorithm: "HS256", expiresIn: "5m" },
);
# Python - pip install pyjwt
import datetime, jwt

now = datetime.datetime.now(datetime.timezone.utc)
token = jwt.encode(
    {
        "sub": user.id,
        "email": user.email,
        "name": user.full_name,
        "avatar_url": user.avatar_url,
        "company": {"id": user.org_id, "name": user.org_name},
        "iat": now,
        "exp": now + datetime.timedelta(minutes=5),
    },
    FEEDJOLT_JWT_SECRET,
    algorithm="HS256",
)

Lliurar el token a Feedjolt

Widget: passa el token a l'atribut data-sso-token del loader (consulta Configuracio del widget). El widget el reenvia com a parametre ssoToken de l'iframe i l'usuari queda autenticat dins del panell.

Portal (redireccio): envia l'usuari al teu portal amb ?ssoToken= a la query:

https://www.feedjolt.com/{locale}/portal/{slug}?ssoToken={jwt}

El portal llegeix ssoToken, l'envia per POST a l'endpoint d'identificacio i despres treu el parametre de la URL. El token en si continua sent valid fins a exp.

Portal / directe: envia el token per POST a l'endpoint d'identificacio del teu espai de treball:

curl -X POST https://api.feedjolt.com/api/workspaces/{workspace}/identify \
  -H "Content-Type: application/json" \
  -d '{"token": "EL_TEU_JWT_AQUI"}'

Si tot va be, Feedjolt retorna l'usuari final sincronitzat i estableix una cookie de sessio al servidor (httpOnly, secure, SameSite=Lax). Aquesta cookie, i no el teu JWT, es la que mante la sessio despres, aixi que nomes generes un JWT nou de curta durada en iniciar sessio.

Rotacio de claus

Rotar el secret de signatura no genera temps d'inactivitat. Quan deses un secret nou, Feedjolt mante valid l'anterior perque els tokens que ja circulen es continuin verificant. Durant la transicio s'accepten fins als ultims 5 secrets; els mes antics es descarten automaticament.

Per rotar: defineix el nou secret al tauler, desplega'l al teu backend i deixa que s'esgotin els tokens en circulacio. No cal cap canvi coordinat.

Notes de seguretat

  • La verificacio es del costat del servidor. Feedjolt valida la signatura, la caducitat i (si estan definits) l'issuer/audience als seus propis servidors. No confiis mai en una identitat declarada pel navegador.
  • El secret no arriba mai al navegador. Genera els tokens nomes al teu backend. Tracta el secret com una contrasenya.
  • Mante exp curt. El JWT nomes ha de durar el just per arrencar la cookie de sessio: amb minuts n'hi ha prou.
  • UPDATE_ONLY per a sistemes tancats. Si proporciones usuaris per una altra via i no vols que el SSO en crei de nous, defineix sync_mode com a UPDATE_ONLY.

On this page