Saltar al contenido principal

Configuración de cuenta mediante Account API

¿Qué es Logto Account API?

La Logto Account API es un conjunto completo de APIs que brinda a los usuarios finales acceso directo a la API sin necesidad de pasar por la Management API. Aquí están los aspectos destacados:

  • Acceso directo: La Account API permite a los usuarios finales acceder y gestionar directamente su propio perfil de cuenta sin requerir el relevo de la Management API.
  • Gestión de perfil de usuario e identidades: Los usuarios pueden gestionar completamente sus perfiles y configuraciones de seguridad, incluyendo la capacidad de actualizar información de identidad como correo electrónico, teléfono y contraseña, así como gestionar conexiones sociales. El soporte para MFA e SSO llegará pronto.
  • Control de acceso global: El administrador tiene control total y global sobre las configuraciones de acceso, pudiendo personalizar cada campo.
  • Autorización sin problemas: ¡Autorizar es más fácil que nunca! Simplemente usa client.getAccessToken() para obtener un token de acceso opaco para OP (Logto) y adjúntalo al encabezado de Autorización como Bearer <access_token>.

Con la Logto Account API, puedes construir un sistema de gestión de cuentas personalizado como una página de perfil totalmente integrada con Logto.

Algunos usos frecuentes se enumeran a continuación:

  • Recuperar perfil de usuario
  • Actualizar perfil de usuario
  • Actualizar contraseña de usuario
  • Actualizar identidades de usuario, incluyendo correo electrónico, teléfono y conexiones sociales

Para obtener más información sobre las APIs disponibles, visita Logto Account API Reference y Logto Verification API Reference.

Cómo habilitar la Account API

Por defecto, la Account API está deshabilitada. Para habilitarla, necesitas usar la Management API para actualizar las configuraciones globales.

El endpoint de la API /api/account-center se puede usar para recuperar y actualizar las configuraciones del centro de cuentas, puedes usarlo para habilitar o deshabilitar la Account API y personalizar los campos.

Ejemplo de solicitud:

curl -X PATCH https://[tenant-id].logto.app/api/account-center \
-H 'authorization: Bearer <access_token for Logto Management API>' \
-H 'content-type: application/json' \
--data-raw '{"enabled":true,"fields":{"username":"Edit"}}'

El campo enabled se usa para habilitar o deshabilitar la Account API, y el campo fields se usa para personalizar los campos, el valor puede ser Off, Edit, ReadOnly. El valor predeterminado es Off. La lista de campos:

  • name: El campo de nombre.
  • avatar: El campo de avatar.
  • profile: El campo de perfil, incluyendo sus subcampos.
  • username: El campo de nombre de usuario.
  • email: El campo de correo electrónico.
  • phone: El campo de teléfono.
  • password: El campo de contraseña, al obtenerlo, devolverá true si el usuario ha establecido una contraseña, de lo contrario false.
  • social: Conexiones sociales.

Aprende más sobre los detalles de la API en Logto Management API Reference.

Cómo acceder a la Account API

Obtener un token de acceso

Después de configurar el SDK en tu aplicación, puedes usar el método client.getAccessToken() para obtener un token de acceso. Este token es un token opaco que se puede usar para acceder a la Account API.

Si no estás usando el SDK oficial, debes establecer el resource en vacío para la solicitud de concesión de token de acceso a /oidc/token.

Acceder a la Account API usando el token de acceso

Debes colocar el token de acceso en el campo Authorization de los encabezados HTTP con el formato Bearer (Bearer YOUR_TOKEN) cuando interactúes con la Account API.

Un ejemplo para obtener la información de la cuenta de usuario:

curl https://[tenant-id].logto.app/api/my-account \
-H 'authorization: Bearer <access_token>'

Gestionar información básica de la cuenta

Recuperar información de la cuenta de usuario

curl https://[tenant-id].logto.app/api/my-account \
-H 'authorization: Bearer <access_token>'

El cuerpo de la respuesta sería como:

{
"id": "...",
"username": "...",
"name": "...",
"avatar": "..."
}

Los campos de respuesta pueden variar dependiendo de las configuraciones del centro de cuentas.

Actualizar información básica de la cuenta

La información básica de la cuenta incluye el nombre de usuario, nombre, avatar y perfil.

Para actualizar el nombre de usuario, nombre y avatar, puedes usar el endpoint PATCH /api/my-account.

curl -X PATCH https://[tenant-id].logto.app/api/my-account \
-H 'authorization: Bearer <access_token>' \
-H 'content-type: application/json' \
--data-raw '{"username":"...","name":"...","avatar":"..."}'

Para actualizar el perfil, puedes usar el endpoint PATCH /api/my-account/profile.

curl -X PATCH https://[tenant-id].logto.app/api/my-account/profile \
-H 'authorization: Bearer <access_token>' \
-H 'content-type: application/json' \
--data-raw '{"familyName":"...","givenName":"..."}'

Gestionar identificadores y otra información sensible

Por razones de seguridad, la Account API requiere otra capa de autorización para las operaciones que involucran identificadores y otra información sensible.

Obtener un id de registro de verificación

Primero, necesitas obtener un id de registro de verificación, esto se puede usar para verificar la identidad del usuario al actualizar identificadores.

Para obtener un id de registro de verificación, puedes verificar la contraseña del usuario o enviar un código de verificación al correo electrónico o teléfono del usuario.

Verificar la contraseña del usuario

curl -X POST https://[tenant-id].logto.app/api/verifications/password \
-H 'authorization: Bearer <access_token>' \
-H 'content-type: application/json' \
--data-raw '{"password":"..."}'

El cuerpo de la respuesta sería como:

{
"verificationRecordId": "...",
"expiresAt": "..."
}

Verificar enviando un código de verificación al correo electrónico o teléfono del usuario

nota:

Para usar este método, necesitas configurar el conector de correo electrónico o conector de SMS, y asegurarte de que la plantilla UserPermissionValidation esté configurada.

Tomando el correo electrónico como ejemplo, solicita un nuevo código de verificación y obtén el id de registro de verificación:

curl -X POST https://[tenant-id].logto.app/api/verifications/verification-code \
-H 'authorization: Bearer <access_token>' \
-H 'content-type: application/json' \
--data-raw '{"identifier":{"type":"email","value":"..."}}'

El cuerpo de la respuesta sería como:

{
"verificationRecordId": "...",
"expiresAt": "..."
}

Al recibir el código de verificación, puedes usarlo para actualizar el estado de verificación del registro de verificación.

curl -X PATCH https://[tenant-id].logto.app/api/verifications/verification-code/verify \
-H 'authorization: Bearer <access_token>' \
-H 'content-type: application/json' \
--data-raw '{"identifier":{"type":"email","value":"..."},"verificationId":"...","code":"123456"}'

Después de verificar el código, ahora puedes usar el id de registro de verificación para actualizar el identificador del usuario.

Enviar solicitud con id de registro de verificación

Al enviar una solicitud para actualizar el identificador del usuario, necesitas adjuntar el id de registro de verificación al encabezado de la solicitud con el campo logto-verification-id.

nota:

Para usar este método, necesitas configurar el conector de correo electrónico, y asegurarte de que la plantilla BindNewIdentifier esté configurada.

Para actualizar o vincular un nuevo correo electrónico, primero debes demostrar la propiedad del correo electrónico.

Llama al endpoint POST /api/verifications/verification-code para solicitar un código de verificación.

curl -X POST https://[tenant-id].logto.app/api/verifications/verification-code \
-H 'authorization: Bearer <access_token>' \
-H 'content-type: application/json' \
--data-raw '{"identifier":{"type":"email","value":"..."}}'

Encontrarás un verificationId en la respuesta y recibirás un código de verificación en el correo electrónico, úsalo para verificar el correo electrónico.

curl -X PATCH https://[tenant-id].logto.app/api/verifications/verification-code/verify \
-H 'authorization: Bearer <access_token>' \
-H 'content-type: application/json' \
--data-raw '{"identifier":{"type":"email","value":"..."},"verificationId":"...","code":"..."}'

Después de verificar el código, ahora puedes actualizar el correo electrónico del usuario, establece el verificationId en el cuerpo de la solicitud como newIdentifierVerificationRecordId.

curl -X PATCH https://[tenant-id].logto.app/api/my-account/primary-email \
-H 'authorization: Bearer <access_token>' \
-H 'logto-verification-id: <verification_record_id>' \
-H 'content-type: application/json' \
--data-raw '{"email":"...","newIdentifierVerificationRecordId":"..."}'

Eliminar el correo electrónico del usuario

Para eliminar el correo electrónico del usuario, puedes usar el endpoint DELETE /api/my-account/primary-email.

curl -X DELETE https://[tenant-id].logto.app/api/my-account/primary-email \
-H 'authorization: Bearer <access_token>' \
-H 'logto-verification-id: <verification_record_id>'

Gestionar teléfono

nota:

Para usar este método, necesitas configurar el conector de SMS, y asegurarte de que la plantilla BindNewIdentifier esté configurada.

Similar a la actualización de correo electrónico, puedes usar el endpoint PATCH /api/my-account/primary-phone para actualizar o vincular un nuevo teléfono. Y usar el endpoint DELETE /api/my-account/primary-phone para eliminar el teléfono del usuario.

Para vincular una nueva conexión social, primero debes solicitar una URL de autorización:

curl -X POST https://[tenant-id].logto.app/api/verifications/social \
-H 'authorization: Bearer <access_token>' \
-H 'content-type: application/json' \
--data-raw '{"connectorId":"...","redirectUri":"...","state":"..."}'
  • connectorId: El ID del conector social.
  • redirectUri: El URI de redirección después de que el usuario autorice la aplicación, debes alojar una página web en esta URL y capturar el callback.
  • state: El estado que se devolverá después de que el usuario autorice la aplicación, es una cadena aleatoria que se usa para prevenir ataques CSRF.

En la respuesta, encontrarás un verificationRecordId, guárdalo para uso posterior.

Después de que el usuario autorice la aplicación, recibirás un callback en el redirectUri con el parámetro state. Luego puedes usar el endpoint POST /api/verifications/social/verify para verificar la conexión social.

curl -X POST https://[tenant-id].logto.app/api/verifications/social/verify \
-H 'authorization: Bearer <access_token>' \
-H 'content-type: application/json' \
--data-raw '{"connectorData":"...","verificationRecordId":"..."}'

El connectorData es el dato devuelto por el conector social después de que el usuario autorice la aplicación, necesitas analizar y obtener los parámetros de consulta del redirectUri en tu página de callback, y envolverlos como un JSON como el valor del campo connectorData.

Finalmente, puedes usar el endpoint PATCH /api/my-account/identities para vincular la conexión social.

curl -X PATCH https://[tenant-id].logto.app/api/my-account/identities \
-H 'authorization: Bearer <access_token>' \
-H 'logto-verification-id: <verification_record_id>' \
-H 'content-type: application/json' \
--data-raw '{"newIdentifierVerificationRecordId":"..."}'

Eliminar una conexión social

Para eliminar una conexión social, puedes usar el endpoint DELETE /api/my-account/identities.

curl -X DELETE https://[tenant-id].logto.app/api/my-account/identities/[connector_target_id] \
-H 'authorization: Bearer <access_token>' \
-H 'logto-verification-id: <verification_record_id>'