Recurso

Autenticación

16 operaciones · base https://api.bestdoctorsrd.com

POST/v1/auth/login

Acceder — validar credenciales y devolver el token de acceso y el de renovación

Cuerpo obligatorio LoginIn

CampoTipoObl.
emailstring (email) o nuloNo
passwordstring o nuloNo
employeeNumberstring o nuloNo
accessCodestring o nuloNo
tenantIdstring o nuloNo

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaTokenPairOut
422Error de validaciónHTTPValidationError
POST/v1/auth/login/mfa

Segundo paso del login — validar código TOTP y emitir tokens

Cuerpo obligatorio MfaLoginIn

CampoTipoObl.
mfaTokenstring
codestring

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaTokenPairOut
422Error de validaciónHTTPValidationError
POST/v1/auth/login/social

Login social — canjear la aserción firmada del landing por tokens

CR-371 — cierra el login social de las cuentas cuyo portal autentica contra el API. El landing ya probó la identidad (intercambio del código con Google/Facebook, en su servidor) y ya la resolvió contra la tabla de enlaces por `(provider, providerAccountId)`. Lo que llega aquí es ese resultado firmado con el `JWT_SECRET` compartido; no hay contraseña que validar porque nunca hubo una. Por qué el endpoint existe en vez de que el landing se fabrique el `bd_token`: la EMISIÓN de sesión vive aquí — tope de sesiones concurrentes, persistencia del refresh token, política de MFA de la institución, `must_change_password`. Un token fabricado fuera se saltaría las cuatro cosas. Por qué no amplía la superficie de confianza: el `JWT_SECRET` ya es compartido, así que quien pueda firmar esta aserción podría firmar directamente un access token. Las puertas son las MISMAS del login por contraseña a partir de aquí: cuenta activa y segundo factor. La aserción NO puede saltarse el TOTP — si la cuenta lo tiene activo se devuelve el mismo 409 `MFA_REQUIRED` que `/login`.

Cuerpo obligatorio SocialLoginIn

CampoTipoObl.
assertionstring

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaTokenPairOut
422Error de validaciónHTTPValidationError
POST/v1/auth/logout

Cerrar sesión — revocar el token de renovación actual

Cuerpo obligatorio RefreshIn

CampoTipoObl.
refresh_tokenstring
tenantIdstring o nuloNo

Respuestas

CódigoDescripciónDevuelve
204Respuesta correcta
422Error de validaciónHTTPValidationError
GET/v1/auth/me

Devolver el perfil del usuario y su institución

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaUserProfileOut
DELETE/v1/auth/mfa

Desactivar TOTP — requiere un código válido

Cuerpo obligatorio MfaCodeIn

CampoTipoObl.
codestring

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaobjeto
422Error de validaciónHTTPValidationError
POST/v1/auth/mfa/enroll

Iniciar enrolamiento TOTP — genera secreto y URI otpauth

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaobjeto
GET/v1/auth/mfa/policy

Política MFA de la institución (roles obligados a TOTP)

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaobjeto
PUT/v1/auth/mfa/policy

Actualizar la política MFA de la institución

Cuerpo obligatorio MfaPolicyIn

CampoTipoObl.
requiredRoleslista de stringNo

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaobjeto
422Error de validaciónHTTPValidationError
POST/v1/auth/mfa/reset

Volver a registrar el autenticador — requiere la contraseña

Genera un secreto NUEVO cuando ya hay uno activo, probando la contraseña. Sin esto, perder el teléfono deja la cuenta en un callejón sin salida: ``/mfa/enroll`` responde 409 si el TOTP ya está activo y ``DELETE /mfa`` exige un código válido, que es justo lo que ya no se puede generar. La única salida era tocar la base de datos a mano. Se exige la CONTRASEÑA, no el código: es el factor que la persona sí conserva, y pedir el que ha perdido sería repetir el callejón. No baja el listón del acceso —quien llega aquí ya tiene sesión iniciada, o sea que pasó contraseña **y** código—; lo que hace es que reemplazar el autenticador cueste probar la contraseña otra vez, en vez de un correo al administrador. El secreto viejo se sustituye y el MFA queda PENDIENTE hasta que ``/mfa/verify`` confirme con un código del autenticador nuevo. Es decir: entre el reinicio y la confirmación la cuenta no se queda sin segundo factor por descuido — se queda sin él a propósito y por unos segundos, igual que en el primer enrolamiento.

Cuerpo obligatorio MfaResetIn

CampoTipoObl.
passwordstring

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaobjeto
422Error de validaciónHTTPValidationError
GET/v1/auth/mfa/status

Estado MFA del usuario actual

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaobjeto
POST/v1/auth/mfa/verify

Confirmar enrolamiento TOTP con un código válido

Cuerpo obligatorio MfaCodeIn

CampoTipoObl.
codestring

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaobjeto
422Error de validaciónHTTPValidationError
POST/v1/auth/refresh

Rotar el token de renovación — revocar el anterior y emitir un par nuevo

Cuerpo obligatorio RefreshIn

CampoTipoObl.
refresh_tokenstring
tenantIdstring o nuloNo

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaTokenPairOut
422Error de validaciónHTTPValidationError
GET/v1/auth/sessions

Sesiones activas del usuario actual

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaobjeto
DELETE/v1/auth/sessions/me/{session_id}

Cerrar una sesión propia

Parámetros

NombreEnTipoObl.
session_idpathstring

Respuestas

CódigoDescripciónDevuelve
200Respuesta correctaobjeto
422Error de validaciónHTTPValidationError
DELETE/v1/auth/sessions/{user_id}

Revocar todas las sesiones de un usuario (sólo SUPER_ADMIN)

Parámetros

NombreEnTipoObl.
user_idpathstring

Respuestas

CódigoDescripciónDevuelve
204Respuesta correcta
422Error de validaciónHTTPValidationError