
# Iniciar sesión con keenauth login

`keenauth login` inicia sesión con su cuenta del panel, para que pueda gestionar sus entornos desde una terminal sin crear una clave de API. Para los trabajos de CI y los scripts, siga usando una clave de API en `KEENAUTH_API_KEY` (consulte [Interfaz de línea de comandos](/docs/cli)).

## Comandos

| Comando | Qué hace |
|---|---|
| `keenauth login` | Inicia sesión con el flujo de dispositivo: la CLI muestra una dirección y un código, usted abre la dirección en cualquier dispositivo, inicia sesión en el panel e introduce el código. |
| `keenauth login --web` | Inicia sesión en el navegador de este equipo. La CLI abre la página de inicio de sesión y recibe el resultado en `http://127.0.0.1:<port>/callback` (o `http://[::1]:<port>/callback`); la solicitud está protegida con PKCE (S256), `state` y el parámetro `iss`. |
| `keenauth whoami` | Muestra el usuario con sesión iniciada, la organización y el entorno seleccionado. |
| `keenauth env use <environment_id>` | Selecciona el entorno que gestionarán los comandos posteriores. El plano de control comprueba que tiene un rol en el panel dentro de él. |
| `keenauth env list` | Enumera los entornos en los que puede trabajar, desde el plano de control. El entorno seleccionado con `env use` aparece marcado con `*`. |
| `keenauth logout` | Revoca la sesión en el servidor y la elimina de este equipo. |

```sh
keenauth login
keenauth env use env_01j9z3c0000000000000000000
keenauth users list
```

Cuando `KEENAUTH_API_KEY` está definida, siempre tiene prioridad; la sesión almacenada solo se usa cuando no hay ninguna clave de API definida.

## Listado de entornos

`keenauth env list` solicita al plano de control los entornos de la cuenta con la que inició sesión y en los que tiene un rol en el panel (`GET /v1/environments`, consulte [Enumerar sus entornos para la CLI](/docs/api/control/environments/list)). Necesita una sesión; sin ella, le pide que ejecute `keenauth login`.

| Opción | Descripción |
|---|---|
| `--limit` | Tamaño de página, de 1 a 100 (predeterminado 20). |
| `--after` | El cursor que imprimió la página anterior (`more results: --after <cursor>`). |
| `--all` | Recorre las páginas y enumera todos los entornos. |
| `-o table\|json\|yaml` | Formato de salida; la tabla marca el entorno seleccionado con `*`, y en JSON y YAML cada fila tiene `current: true` para él. |

Se rechaza un cursor `--after` no válido o ajeno (`invalid_cursor`); vuelva a ejecutar el comando sin él.

## Cómo funciona la sesión

- El inicio de sesión emite un token de acceso de corta duración (5 minutos) y un token de actualización (12 horas). Ambos están vinculados a una clave DPoP (RFC 9449) creada en este equipo, por lo que un token copiado no puede usarse desde otra máquina. El token de actualización rota en cada uso.
- En cada comando, la CLI solicita al plano de control un token de gestión del entorno seleccionado. Este token dura 10 minutos, está vinculado a la misma clave DPoP y se mantiene **solo en memoria**; nunca se escribe en disco.
- Las solicitudes a su entorno llevan el token de gestión, una prueba DPoP nueva y su identidad en el panel. Su entorno comprueba que aún tiene un rol, así que quitarle el rol en el panel pone fin a su acceso a la CLI en cuestión de minutos.

## Dónde se almacena la sesión

| Qué | Dónde |
|---|---|
| Emisor, ID de usuario, organización, huella de la clave DPoP, entornos seleccionados | `config.json` en `KEENAUTH_CONFIG_DIR`, o en `keenauth` dentro de su directorio de configuración de usuario (modo 0600) |
| Token de actualización y clave privada DPoP | El llavero del sistema operativo: Llavero de macOS (`security`) o Secret Service en Linux (`secret-tool`) |

Los secretos se pasan a la herramienta del llavero por la entrada estándar, nunca como argumentos de comando. Si no hay ningún llavero disponible (por ejemplo, en Windows o en un servidor Linux sin Secret Service), `keenauth login` se detiene con un error. Entonces puede pasar `--insecure-storage` para guardar el token de actualización y la clave privada DPoP sin cifrar en `credentials.json` (modo 0600), junto a `config.json`. La CLI muestra una advertencia: cualquiera que pueda leer ese archivo puede actuar como usted hasta que expire la sesión. En equipos compartidos, prefiera una clave de API.

## Configuración

| Variable | Predeterminado | Descripción |
|---|---|---|
| `KEENAUTH_LOGIN_ISSUER` | `https://login.keenauth.com` | El servidor de inicio de sesión. Debe ser una dirección `https`. |
| `KEENAUTH_CONTROL_URL` | `https://api.keenauth.com/v1` | El plano de control que emite los tokens de gestión. Debe ser una dirección `https`. |
| `KEENAUTH_CONFIG_DIR` | su directorio de configuración de usuario + `keenauth` | Donde se guarda `config.json` (y, con `--insecure-storage`, `credentials.json`). |

## Errores

| Mensaje | Qué hacer |
|---|---|
| `you are not signed in` / `your session has expired or was revoked` | Ejecute `keenauth login` de nuevo. Código de salida 3. |
| `no environment is selected` | Ejecute `keenauth env use <environment_id>`. |
| `environment … does not exist or you have no dashboard role in it` | Compruebe el ID en el panel o pida a un propietario un rol. |
| `no OS keychain is available` | Instale un llavero, use `--insecure-storage` o use una clave de API. |
