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
slugstringSíSlug 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_slugstringSíIdentificador de compañía
emailstringSíEmail del usuario
passwordstringSíContraseñ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": "user@acme.com",
"password": "SecurePassword123!"
}'

Respuesta: 200 OK

{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 604800,
"user": {
"_id": "507f1f77bcf86cd799439011",
"email": "user@acme.com",
"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_slugstringSíIdentificador de compañía
google_tokenstringSíToken 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
AuthorizationSíBearer <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": "user@acme.com",
"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_slugstringSíIdentificador de compañía
emailstringSíEmail 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_slugstringSíIdentificador de compañía
emailstringSíEmail del usuario
codestringSíCó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_tokenstringSíToken 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_uristringSíDó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": "user@acme.com",
"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();
}