Saltar al contenido principal

Token de acceso personal

Los tokens de acceso personal (PATs) proporcionan una forma segura para que los usuarios otorguen un token de acceso (Access token) sin usar sus credenciales e 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.

Equivalencia del flujo de tokens:

Los tokens de acceso obtenidos usando PATs funcionan idénticamente a los tokens obtenidos a través del flujo estándar de refresh_token. Esto significa:

  • Contexto de organización: Los tokens obtenidos por PAT admiten los mismos permisos y alcances de organización que los flujos de refresh token
  • Flujo de autorización: Puedes usar los tokens de acceso intercambiados por PAT para permisos de organización y recursos de API a nivel de organización
  • Validación de tokens: Se aplica la misma lógica de validación: solo difiere el tipo de concesión inicial

Si trabajas con organizaciones, los patrones de acceso y permisos son los mismos independientemente de si usas PAT o refresh tokens.

Solicitud

La aplicación realiza una solicitud de intercambio de token 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 token.
  3. resource: OPCIONAL. El indicador de recurso, igual que en otras solicitudes de token.
  4. scope: OPCIONAL. Los alcances 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 token 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 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 y definición de API Keys y sus escenarios en el mundo real