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.
Ejemplo de configuración del Logto SDK:
const config: LogtoConfig = {
// ...otras configuraciones
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 que realiza la solicitud, la audiencia del token y el tiempo de expiración.
Ejemplo de código del Logto SDK:
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 obtener más información 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)
clave | descripción |
---|---|
jti | ID único del JWT |
sub | sujeto, generalmente user-id |
iat | marca de tiempo de emisión del token |
exp | marca de tiempo de expiración del token |
client_id | id de la aplicación |
iss | identidad del emisor del token |
aud | audiencia del token |
scope | alcances (permisos) del token |
Para el desarrollo, para inspeccionar visualmente un token JWT, puedes visitar una herramienta JWT Decoder 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 un tercero, tu token puede estar expuesto.
Validar el token de autorización
- Validar un JWT
- Validar la firma JWS
- El emisor del token es
https://<your-logto-domain>/oidc
(emitido por tu servidor de autenticación Logto) - La audiencia del token es igual al indicador de recurso del receptor actual registrado en Logto Admin Console
- El token está dentro de su tiempo de expiración
- (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 marco que estés utilizando. Por favor, consulta 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.
Preguntas frecuentes
¿Cómo probar la interacción del lado del cliente, Logto y el lado del servidor sin construir el cliente?
Puedes automatizar este proceso sin necesidad de construir el cliente. Una opción es usar un Token de Acceso Personal (PAT). Un PAT te permite simular la autenticación del lado del cliente representando a un usuario específico, con diferentes roles y permisos. Esto se puede usar para probar tu lógica del lado del servidor, como la validación del token de acceso o JWT, sin la necesidad de un cliente completamente construido. Para comenzar, consulta el Token de acceso personal.