Saltar al contenido principal

API de Autenticación

Endpoints para autenticación de usuarios, gestión de sesiones y cambio de contexto.

Validar Compañía

Verifica si existe un slug de compañía antes de mostrar el formulario de inicio de sesión.

GET/v1/auth/validate-company

Parámetros de Consulta:

ParámetroTipoRequeridoDescripción
slugstringSlug de compañía a validar

Ejemplo de Solicitud:

curl "https://api.console.solucao42.com.br/v1/auth/validate-company?slug=acme-corp"

Respuesta:

{
"exists": true
}

Iniciar Sesión

Autenticarse con email y contraseña.

POST/v1/auth/login

Cuerpo de Solicitud:

CampoTipoRequeridoDescripción
company_slugstringIdentificador de compañía
emailstringEmail del usuario
passwordstringContraseña del usuario

Ejemplo de Solicitud:

curl -X POST https://api.console.solucao42.com.br/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"company_slug": "acme-corp",
"email": "[email protected]",
"password": "SecurePassword123!"
}'

Respuesta: 200 OK

{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 604800,
"user": {
"_id": "507f1f77bcf86cd799439011",
"email": "[email protected]",
"name": "John Doe",
"company_id": "507f1f77bcf86cd799439012"
}
}

Errores:

EstadoCódigo de ErrorDescripción
400INVALID_CREDENTIALSEmail o contraseña incorrectos
403FORBIDDENUsuario no autorizado para esta compañía
404COMPANY_NOT_FOUNDEl slug de compañía no existe
422VALIDATION_ERRORCuerpo de solicitud inválido

Iniciar Sesión con Google

Autenticarse usando un token de Google OAuth.

POST/v1/auth/google

Cuerpo de Solicitud:

CampoTipoRequeridoDescripción
company_slugstringIdentificador de compañía
google_tokenstringToken de Google OAuth

Ejemplo de Solicitud:

curl -X POST https://api.console.solucao42.com.br/v1/auth/google \
-H "Content-Type: application/json" \
-d '{
"company_slug": "acme-corp",
"google_token": "ya29.a0AfH6SMBx..."
}'

Respuesta: Igual que el inicio de sesión con email/contraseña.


Obtener Usuario Actual

Devuelve el perfil del usuario autenticado y el contexto actual.

GET/v1/auth/me

Headers:

HeaderRequeridoDescripción
AuthorizationBearer <token>

Ejemplo de Solicitud:

curl https://api.console.solucao42.com.br/v1/auth/me \
-H "Authorization: Bearer YOUR_TOKEN"

Respuesta: 200 OK

{
"user": {
"_id": "507f1f77bcf86cd799439011",
"email": "[email protected]",
"name": "John Doe",
"company_id": "507f1f77bcf86cd799439012"
},
"context": {
"company_id": "507f1f77bcf86cd799439012"
}
}

Errores:

EstadoCódigo de ErrorDescripción
401UNAUTHORIZEDToken inválido o expirado

Inicio de Sesión Sin Contraseña

Autenticarse usando un código temporal enviado por email.

Solicitar Código de Inicio de Sesión

POST/v1/auth/passwordless/request

Cuerpo de Solicitud:

CampoTipoRequeridoDescripción
company_slugstringIdentificador de compañía
emailstringEmail del usuario

Respuesta: 200 OK con { "message": "..." }

Verificar Código de Inicio de Sesión

POST/v1/auth/passwordless/verify

Cuerpo de Solicitud:

CampoTipoRequeridoDescripción
company_slugstringIdentificador de compañía
emailstringEmail del usuario
codestringCódigo de 6 dígitos del email

Respuesta: Igual que el inicio de sesión estándar.


Autenticación Multifactor (2FA)

Verificar Inicio de Sesión 2FA

Verifica un token TOTP durante el flujo de inicio de sesión.

POST/v1/auth/2fa/login

Cuerpo de Solicitud:

CampoTipoRequeridoDescripción
pending_2fa_tokenstringToken de la respuesta inicial de inicio de sesión
totp_tokenstringNoCódigo de 6 dígitos
backup_codestringNoCódigo de recuperación de un solo uso

Single Sign-On (SSO)

Iniciar Flujo SSO

Inicia la redirección al Proveedor de Identidad.

GET/v1/auth/sso/:company_slug/start

Parámetros de Consulta:

ParámetroTipoRequeridoDescripción
redirect_uristringDónde regresar después de la autenticación del IdP

Respuesta: 200 OK con { "url": "https://idp.com/auth/..." }

Callback de SSO

Endpoint usado por el IdP para devolver al usuario a la plataforma.

GET/POST/v1/auth/sso/:company_slug/callback

Parámetros: Parámetros estándar de SAML o OIDC (code, state, SAMLResponse).


Cerrar Sesión

Finaliza la sesión actual.

POST/v1/auth/logout

Headers:

HeaderRequeridoDescripción
AuthorizationNoBearer <token> (opcional)

Ejemplo de Solicitud:

curl -X POST https://api.console.solucao42.com.br/v1/auth/logout \
-H "Authorization: Bearer YOUR_TOKEN"

Respuesta: 200 OK

{
"success": true
}
nota

El frontend debe eliminar el token del almacenamiento después de llamar a este endpoint.


Estructura del Token JWT

Cuando se decodifica, el payload del JWT contiene:

{
"sub": "507f1f77bcf86cd799439011",
"user_id": "507f1f77bcf86cd799439011",
"company_id": "507f1f77bcf86cd799439012",
"email": "[email protected]",
"is_owner": false,
"iss": "solucao42-console-api",
"aud": "https://console.solucao42.com.br",
"jti": "unique-token-id",
"iat": 1709216800,
"exp": 1709821600
}
ClaimDescripción
subSujeto (ID de usuario)
user_idIdentificador de usuario
company_idIdentificador de compañía (tenant)
emailEmail del usuario
is_ownerSi el usuario es propietario de la compañía
issEmisor del token
audAudiencia del token
jtiID único del token
iatEmitido en (timestamp Unix)
expExpira en (timestamp Unix)

Ejemplos de Código

async function login(companySlug, email, password) {
const response = await fetch('https://api.console.solucao42.com.br/v1/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ company_slug: companySlug, email, password }),
});

if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'Login failed');
}

const data = await response.json();
sessionStorage.setItem('s42_auth_token', data.token);
return data.user;
}

async function getMe(token) {
const response = await fetch('https://api.console.solucao42.com.br/v1/auth/me', {
headers: { 'Authorization': `Bearer ${token}` },
});
return response.json();
}