Saltar al contenido principal

Protege tu API

Si no necesitas políticas de control de acceso flexibles y granulares, puedes simplemente proteger tu API directamente. Te guiaremos a través de un diagrama de secuencia y los pasos necesarios para mostrar cómo integrar el control de acceso en tu aplicación.

En este tutorial

  • Endpoint de Logto: https://tenant-id.logto.app
  • Aplicación cliente: https://client.example.org
  • Servidor de recursos de API: https://resource-server.com/api

Debes reemplazar estos con tus endpoints reales al implementar.

Solicitud de autenticación

Proporciona una lista de parámetros de indicador de recurso en una Solicitud de Autenticación. Indicará todos los recursos protegidos que el usuario puede solicitar.

GET https://tenant-id.logto.app/oidc/auth?response_type=code
&client_id=s6BhdRkqt3
&state=tNwzQ87pC6llebpmac_IDeeq-mCR2wLDYljHUZUAWuI
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&resource=https%3A%2F%2Fresource-server.com%2Fapi
&scope=read%20write

Logto validará y almacenará estos indicadores de recurso. Se otorgará y devolverá un authorization_code con alcances restringidos a estos recursos especificados.

Configuración de ejemplo del SDK de Logto:

const config: LogtoConfig = {
// ...otros configs
resources: ['https://resource-server.com/api'],
scopes: ['read', 'write'],
};

Solicitud de token

Cuando el parámetro de recurso está presente en una Solicitud de Token junto con el authorization_code otorgado anteriormente, especificará la audiencia del recurso de API objetivo del token de acceso solicitado.

POST https://tenant-id.logto.app/oidc/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb&code=10esc29BWC2qZB0acc9v8zAv9ltc2pko105tQauZ&resource=https%3A%2F%2Fresource-server.com%2Fapi

Logto otorgará un token de acceso cifrado con la audiencia restringida a este recurso solicitado. El token lleva todos los datos que necesitarás para representar el estado de autorización de la solicitud. Por ejemplo, la identidad y el rol del usuario solicitante, la audiencia del token y el tiempo de expiración.

Código de ejemplo del SDK de Logto:

const accessToken = await logtoClient.getAccessToken('https://resource-server.com/api');

La carga útil del accessToken contendrá:

{
iss: '<your-logto-endpoint>/oidc',
aud: 'https://resource-server.com/api',
scope: 'read write'
}

Solicitud al recurso de API

El usuario cliente envió una solicitud al recurso de API presentando el access_token dado en el encabezado de Autorización.

GET https://resource-server.com/api/users
Authorization: Bearer eyJhbGciOiJIUz...

Logto sigue el protocolo estándar de autorización basado en tokens para proteger tus recursos de API. Para aprender más sobre OAuth 2.0, consulta el documento oficial de OAuth 2.0.

Validar tokens de autorización para solicitudes de API

Logto emite un token de autorización en formato estándar JWT para cada solicitud de API autorizada. El token está cifrado y firmado como un token JWS.

Entendiendo el token JWS

Un token JWS codificado se construye con tres partes:

  • Encabezado JOSE: Declara el tipo de código y el algoritmo de codificación
  • Carga útil JWS: Incluye todos los reclamos del token
  • Firma JWS: Firma firmada con JWK

Un esquema estándar de la carga útil JWS emitida por Logto: (los reclamos pueden variar, según tu configuración personalizada de OIDC)

clavedescripción
jtiID único del JWT
subsujeto, generalmente user-id
iatmarca de tiempo del token emitido en
expmarca de tiempo del token expira en
client_idid de la aplicación
issidentidad del emisor del token
audaudiencia del token
scopealcances (permisos) del token
nota

Para desarrollo, para inspeccionar visualmente un token JWT, puedes visitar una herramienta de decodificación de JWT para decodificar y verificar los tokens que recibiste. Ten cuidado o nunca uses los tokens de un entorno de producción. Como este es un servicio público en línea proporcionado por terceros, tu token puede estar expuesto.

Validar el token de autorización

  1. Validar un JWT
  2. Validar la firma JWS
  3. El emisor del token es https://<your-logto-domain>/oidc (emitido por tu servidor de autenticación Logto)
  4. La audiencia del token es igual al indicador de recurso del receptor actual registrado en la Consola de Administración de Logto
  5. El token está dentro de su tiempo de expiración
  6. (Solo RBAC) El token tiene el scope deseado

Existen varias bibliotecas y paquetes de código abierto que pueden ayudarte a validar y decodificar un token JWT fácilmente. Puedes elegir uno e integrarlo con tu aplicación backend según el lenguaje y el framework que estés utilizando. Por favor, revisa algunos de los ejemplos que tenemos:

Referencia

Logto utiliza el Protocolo de Autorización basado en código de OAuth 2.0 para hacer que tu solicitud de API sea segura. Si estás interesado en la estrategia detrás de esto, consulta la especificación de OAuth 2.0 para más detalles.