Appearance
nautilus-auth
Librería para gestionar la autenticación OIDC de aplicaciones web Nautilus. Usa oidc-client-ts para el login y Axios para realizar peticiones autenticadas.
Instalación
bash
npm install nautilus-authnpm install nautilus-authInicialización
La librería debe inicializarse antes de llamar a signin, signout, getUserInfo, checkSession o request. Lo habitual es hacerlo al arrancar la aplicación:
javascript
import auth from 'nautilus-auth';
auth.initAuthClient({
hostname: window.location.origin,
authUrl: 'https://login.dev.nautilus.app/oidc',
clientId: 'my-client-id',
accountUrl: 'https://account.dev.nautilus.app',
productId: 'my-product',
});
const user = await auth.signin({ url_state: window.location.href });import auth from 'nautilus-auth';
auth.initAuthClient({
hostname: window.location.origin,
authUrl: 'https://login.dev.nautilus.app/oidc',
clientId: 'my-client-id',
accountUrl: 'https://account.dev.nautilus.app',
productId: 'my-product',
});
const user = await auth.signin({ url_state: window.location.href });signin devuelve el usuario OIDC si ya existe una sesión. Si no existe, inicia la redirección al login. Al volver del proveedor OIDC, procesa el callback y restaura la URL indicada mediante url_state.
Configuración
Como configuración predeterminada, la librería lee estas variables de window.env:
AUTHSSO_URL: URL base del servicio de autenticación. Se añade/oidcpara construir la autoridad OIDC.AUTH_CLIENT_ID: identificador del cliente OIDC.CLIENT_URL: URL de retorno de la aplicación.MYACCOUNT_UI_URL: URL que se abre congoToAccount.CLIENT_UNAUTHORIZED_CODES: array de códigos HTTP que deben iniciar la recuperación de autenticación. Por defecto,[401].CLIENT_UNAUTHORIZED_MSGS: array de mensajes de error considerados de autenticación. Por defecto,['Invalid token'].
También se puede pasar la configuración a initAuthClient. Sus opciones son:
| Opción | Descripción | Valor predeterminado |
|---|---|---|
hostname | URL de retorno de la aplicación | CLIENT_URL |
authUrl | Autoridad OIDC completa | ${AUTHSSO_URL}/oidc |
clientId | Identificador del cliente OIDC | AUTH_CLIENT_ID |
scope | Scopes solicitados | openid profile email roles offline_access |
accountUrl | URL de la cuenta de usuario | MYACCOUNT_UI_URL |
productId | Producto enviado al servicio de autenticación | nautilus |
unauthorizedCodes | Códigos HTTP que activan la recuperación | [401] |
unauthorizedMsgs | Mensajes que activan la recuperación | ['Invalid token'] |
enableCrossTabSync | Sincroniza el logout entre pestañas | true |
Las opciones proporcionadas sobrescriben los valores predeterminados. Cuando se usa authUrl, debe incluir la ruta /oidc, como en el ejemplo de inicialización.
API
initAuthClient(options)
Configura y crea el cliente OIDC. Debe llamarse una vez antes de usar el resto de la API. Si enableCrossTabSync está activo, el logout se propaga a otras pestañas mediante BroadcastChannel cuando el navegador lo admite.
signin(options?)
Comprueba la sesión actual y devuelve una promesa con el usuario OIDC. Si no hay una sesión válida, redirige al login. Se pueden pasar opciones adicionales al método signinRedirect de oidc-client-ts; url_state permite indicar la URL a la que se volverá tras el callback.
javascript
const user = await auth.signin({
url_state: window.location.href,
});
if (user) {
console.log(user.profile);
}const user = await auth.signin({
url_state: window.location.href,
});
if (user) {
console.log(user.profile);
}signout()
Redirige al logout del proveedor OIDC y elimina la sesión local.
javascript
await auth.signout();await auth.signout();getUserInfo()
Devuelve una promesa con el usuario almacenado o null/undefined si no hay cliente inicializado o sesión disponible.
javascript
const user = await auth.getUserInfo();
const logged = Boolean(user && !user.expired);const user = await auth.getUserInfo();
const logged = Boolean(user && !user.expired);checkSession()
Intenta renovar silenciosamente la sesión y devuelve true si tiene éxito o false si falla.
javascript
const sessionIsValid = await auth.checkSession();const sessionIsValid = await auth.checkSession();request
Instancia configurada de Axios. Añade automáticamente el id_token del usuario al header Authorization y gestiona los códigos y mensajes de error definidos en unauthorizedCodes y unauthorizedMsgs.
javascript
const response = await auth.request.get('https://api.dev.nautilus.app/items');
await auth.request.post('https://api.dev.nautilus.app/items', {
description: 'New item',
});const response = await auth.request.get('https://api.dev.nautilus.app/items');
await auth.request.post('https://api.dev.nautilus.app/items', {
description: 'New item',
});También están disponibles los métodos habituales de Axios, como put, patch, delete y request. La autenticación debe estar inicializada antes de realizar la petición.
goToAccount()
Abre accountUrl en una pestaña nueva.
Migración desde la API anterior
La versión actual ya no expone useConfig, authFetch, checkLogin, goToLogin, goToLogout ni checkTempToken. Las equivalencias principales son:
| API anterior | API actual |
|---|---|
useConfig(...) | initAuthClient(...) |
authFetch(...) | request y sus métodos Axios (get, post, etc.) |
checkLogin() | getUserInfo() y comprobación de user.expired |
goToLogin() | signin() |
goToLogout() | signout() |
goToAccount() | goToAccount() |
El intercambio manual de tokens mediante checkTempToken pertenece al flujo anterior. La autenticación actual usa el flujo OIDC Authorization Code con PKCE gestionado por oidc-client-ts.