Skip to content

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-auth
npm install nautilus-auth

Inicializació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 /oidc para 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 con goToAccount.
  • 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ónDescripciónValor predeterminado
hostnameURL de retorno de la aplicaciónCLIENT_URL
authUrlAutoridad OIDC completa${AUTHSSO_URL}/oidc
clientIdIdentificador del cliente OIDCAUTH_CLIENT_ID
scopeScopes solicitadosopenid profile email roles offline_access
accountUrlURL de la cuenta de usuarioMYACCOUNT_UI_URL
productIdProducto enviado al servicio de autenticaciónnautilus
unauthorizedCodesCódigos HTTP que activan la recuperación[401]
unauthorizedMsgsMensajes que activan la recuperación['Invalid token']
enableCrossTabSyncSincroniza el logout entre pestañastrue

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 anteriorAPI 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.