Ayuda / Integración / Conectar SSO
Tutorial · 7 min

Conectar SSO — identidad de tus usuarios logueados

Si tu sitio ya tiene su propio sistema de cuentas y querés que tus visitantes logueados comenten con esa identidad — sin pasar por el formulario de alias de invitado — esto es para vos. Si no tenés login propio, o preferís que la gente elija un nickname al comentar, no necesitás nada de esta guía: el widget ya funciona así por default.

Esto es un pedido a Civis, no un self-service

A diferencia de instalar el widget, acá no hay ningún toggle que prendas vos mismo ni una pantalla donde vos pegues el secreto o la clave — cargar y rotar esas credenciales lo hace el equipo de Civis, siempre. Lo que sí hace tu equipo de desarrollo es escribir el código que arma y firma el token en tu propio backend (pasos 2 a 4 más abajo).

1

Elegí el método de firma y pedíselo a Civis

Un sitio usa un solo método a la vez. Escribile a tu contacto en Civis con el que elijas — ellos activan SSO y cargan el secreto/clave/URL de tu lado; nunca es un campo que vos completes en tu propio panel.

Secreto compartido (HMAC) — el más simple

Civis genera el secreto y te lo manda por mail una sola vez (no lo van a volver a mostrar). Menos código de tu lado, pero le das a Civis una credencial que podría impersonar usuarios si se filtrara.

Clave pública (RSA o Ed25519)

Generás vos el par de claves; la privada nunca sale de tu servidor, ni siquiera hacia Civis. Le pasás solo la pública.

JWKS

Igual que clave pública, pero la publicás en un endpoint propio (https:// únicamente) en vez de pasarla a mano — rotar tu clave de firma no requiere volver a pedirle nada a Civis.

Sin preferencia fuerte, arrancá con HMAC. Así se ve una vez que Civis lo configuró:

Card 'SSO — Identidad del cliente' en Configuración → Auth del admin de Civis, con el secreto activo enmascarado y el botón Rotar secreto
2

Armá y firmá el payload en tu backend

Nunca en el navegador del visitante — si el secreto quedara expuesto en JavaScript del cliente, cualquiera podría hacerse pasar por cualquier otro usuario de tu sitio. En cada carga de página con el visitante logueado, tu backend arma este JSON y lo firma con HMAC-SHA256:

const crypto = require('crypto');

function signCivisSsoToken(secret, { externalUserId, nickname, email }) {
  const issuedAt = new Date();
  const expiresAt = new Date(issuedAt.getTime() + 10 * 60 * 1000); // 10 min
  const payload = {
    externalUserId, nickname, email: email || null,
    issuedAt: issuedAt.toISOString(), expiresAt: expiresAt.toISOString(),
  };
  const payloadBytes = Buffer.from(JSON.stringify(payload), 'utf8');
  const signature = crypto.createHmac('sha256', Buffer.from(secret, 'utf8'))
    .update(payloadBytes).digest();
  return `${payloadBytes.toString('base64url')}.${signature.toString('base64url')}`;
}

externalUserId tiene que ser estable entre visitas (tu id interno, no algo que cambie) — es la clave de identidad. Recomendamos una ventana de 5 a 10 minutos entre issuedAt y expiresAt: Civis rechaza cualquier ventana de más de 24 horas, así que una ventana larga "para no tener que preocuparme" no es una opción — la idea es justamente que la sesión del widget no le sobreviva a la tuya.

3

Pegalo en el tag del widget

El token firmado va como un atributo más, junto al containerName de siempre. Si el visitante no está logueado, simplemente no pongas el atributo — cae al flujo de invitado normal, sin ningún error.

<civis-community
  containerName="mi-articulo"
  ssoToken="eyJleHRlcm5hbFVzZXJJZCI6Ii4uLiJ9.abc123...">
</civis-community>
4

Mantené la sesión viva y limpiala en logout

Como el token vence en la ventana que elegiste (paso 2), para que el visitante no vea cortarse su sesión mientras sigue navegando, llamá al método público del widget bien antes de que venza:

const widget = document.querySelector('civis-community');

function refreshCivisIdentity() {
  const token = /* pedile a tu backend uno nuevo, mismo paso 2 */;
  widget.setSsoToken(token);
}
refreshCivisIdentity();
setInterval(refreshCivisIdentity, 5 * 60 * 1000);

// en tu logout
widget.setSsoToken(null);

Si tu login resuelve después de que la página ya cargó (una SPA, un modal de login), este mismo método es lo que llamás apenas sepas quién es el visitante — funciona incluso si el tag nunca tuvo el atributo ssoToken puesto.

Identificar no es aprobar

Que Civis sepa quién es tu visitante no dice nada sobre si lo que va a comentar es spam o no — los comentarios de usuarios SSO pasan por la misma moderación que cualquier invitado (reglas, palabras prohibidas, IA si tu sitio la tiene activada).

Rotación sin coordinar el corte exacto

Cuando le pidas a Civis rotar el secreto o la clave, el viejo y el nuevo funcionan los dos durante 48 horas — así actualizás tu deploy sin que tenga que coincidir al segundo con el cambio del lado de Civis.

💡 Esta parte sí la manejás vos

Una vez que SSO ya está configurado, exigir que se comente solo vía SSO (sin invitados anónimos) es un toggle aparte que sí podés prender vos mismo desde Configuración — a diferencia de la carga inicial del secreto/clave, esto no depende de pedírselo a Civis cada vez.

¿Se te complicó algún paso?

Escribinos
© 2026 Civis