Saltar al contenido principal

Token de acceso personal (Personal access token)

Los tokens de acceso personal (PATs) proporcionan una forma segura para que los usuarios otorguen token de acceso (Access token) sin usar sus credenciales ni el inicio de sesión interactivo. Esto es útil para CI/CD, scripts o aplicaciones que necesitan acceder a recursos de forma programática.

Gestión de tokens de acceso personal

Usando la Consola

Puedes gestionar los tokens de acceso personal en la página de Detalles del usuario de Consola > Gestión de usuarios. En la tarjeta "Autenticación (Authentication)", puedes ver la lista de tokens de acceso personal y crear nuevos.

Usando Management API

Después de configurar la Management API, puedes usar los endpoints de la API para crear, listar y eliminar tokens de acceso personal.

Usar PATs para otorgar tokens de acceso

Después de crear un PAT, puedes usarlo para otorgar tokens de acceso a tu aplicación utilizando el endpoint de intercambio de tokens.

Solicitud

La aplicación realiza una solicitud de intercambio de tokens al endpoint de token del tenant con un tipo de concesión especial usando el método HTTP POST. Los siguientes parámetros se incluyen en el cuerpo de la solicitud HTTP usando el formato application/x-www-form-urlencoded.

  1. client_id: OBLIGATORIO. El ID de cliente de la aplicación.
  2. grant_type: OBLIGATORIO. El valor de este parámetro debe ser urn:ietf:params:oauth:grant-type:token-exchange e indica que se está realizando un intercambio de tokens.
  3. resource: OPCIONAL. El indicador de recurso (resource indicator), igual que en otras solicitudes de token.
  4. scope: OPCIONAL. Los alcances (scopes) solicitados, igual que en otras solicitudes de token.
  5. subject_token: OBLIGATORIO. El PAT del usuario.
  6. subject_token_type: OBLIGATORIO. El tipo de token de seguridad proporcionado en el parámetro subject_token. El valor de este parámetro debe ser urn:logto:token-type:personal_access_token.

Respuesta

Si la solicitud de intercambio de tokens es exitosa, el endpoint de token del tenant devuelve un token de acceso que representa la identidad del usuario. La respuesta incluye los siguientes parámetros en el cuerpo de la respuesta HTTP usando el formato application/json.

  1. access_token: OBLIGATORIO. El token de acceso del usuario, que es igual que en otras solicitudes de token como authorization_code o refresh_token.
  2. issued_token_type: OBLIGATORIO. El tipo de token emitido. El valor de este parámetro debe ser urn:ietf:params:oauth:token-type:access_token.
  3. token_type: OBLIGATORIO. El tipo de token. El valor de este parámetro debe ser Bearer.
  4. expires_in: OBLIGATORIO. El tiempo de vida en segundos del token de acceso.
  5. scope: OPCIONAL. Los alcances (scopes) del token de acceso.

Ejemplo de intercambio de token

POST /oidc/token HTTP/1.1
Host: tenant.logto.app
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <base64(client-id:client-secret)>

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&scope=profile
&subject_token=pat_W51arOqe7nynW75nWhvYogyc
&subject_token_type=urn%3Alogto%3Atoken-type%3Apersonal_access_token
HTTP/1.1 200 OK
Content-Type: application/json

{
"access_token": "eyJhbGci...zg",
"issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "profile"
}

El payload de ejemplo del token de acceso:

{
"jti": "iFtbZBeh2M1cTTBuKbHk4",
"sub": "123",
"iss": "https://tenant.logto.app/oidc",
"exp": 1672531200,
"iat": 1672527600,
"scope": "profile",
"client_id": "client-id"
}

¿Qué es un token de acceso personal? ¿Cuándo debo usar tokens de acceso personal?

Tokens de acceso personal, autenticación máquina a máquina (Machine-to-Machine), y definición de API Keys y sus escenarios en el mundo real