50.3. Devoluciones de llamada del validador de OAuth #

50.3.1. Devolución de llamada de inicio
50.3.2. Devolución de llamada de validación
50.3.3. Devolución de llamada de apagado

Los módulos validadores de OAuth implementan su funcionalidad definiendo un conjunto de devoluciones de llamada. El servidor las llamará según sea necesario para procesar la solicitud de autenticación del usuario.

50.3.1. Devolución de llamada de inicio #

La devolución de llamada startup_cb se ejecuta directamente después de cargar el módulo. Esta devolución de llamada se puede utilizar para configurar el estado local y realizar una inicialización adicional si es necesario. Si el módulo validador tiene estado, puede utilizar state->private_data para almacenarlo.

typedef void (*ValidatorStartupCB) (ValidatorModuleState *state);

50.3.2. Devolución de llamada de validación #

La devolución de llamada validate_cb se ejecuta durante el intercambio de OAuth cuando un usuario intenta autenticarse utilizando OAuth. Cualquier estado configurado en las llamadas anteriores estará disponible en state->private_data.

typedef bool (*ValidatorValidateCB) (const ValidatorModuleState *state,
                                     const char *token, const char *role,
                                     ValidatorModuleResult *result);

token contendrá el token portador (bearer token) a validar. PostgreSQL se ha asegurado de que el token esté bien formado sintácticamente, pero no se ha realizado ninguna otra validación. role contendrá el rol con el que el usuario ha solicitado iniciar sesión. La devolución de llamada debe configurar los parámetros de salida en la estructura result, que se define a continuación:

typedef struct ValidatorModuleResult
{
    bool        authorized;
    char       *authn_id;
} ValidatorModuleResult;

La conexión solo continuará si el módulo establece result->authorized en true. Para autenticar al usuario, el nombre de usuario autenticado (determinado a partir del token) se reservará con palloc y se devolverá en el campo result->authn_id. Alternativamente, result->authn_id puede establecerse en NULL si el token es válido pero no se puede determinar la identidad del usuario asociado.

Un validador puede devolver false para indicar un error interno, en cuyo caso se ignoran los parámetros del resultado y la conexión falla. De lo contrario, el validador debe devolver true para indicar que ha procesado el token y ha tomado una decisión de autorización.

El comportamiento después de que retorne validate_cb depende de la configuración específica del HBA. Normalmente, el nombre de usuario de result->authn_id debe coincidir exactamente con el rol con el que el usuario está iniciando sesión. (Este comportamiento puede modificarse con un mapa de usuario). Pero al autenticar contra una regla HBA con delegate_ident_mapping activado, PostgreSQL no realizará ninguna comprobación en el valor de result->authn_id en absoluto; en este caso, corresponde al validador asegurarse de que el token tenga suficientes privilegios para que el usuario pueda iniciar sesión bajo el role indicado.

50.3.3. Devolución de llamada de apagado #

La devolución de llamada shutdown_cb se ejecuta cuando el proceso de backend asociado con la conexión finaliza. Si el módulo validador tiene algún estado asignado, esta devolución de llamada debe liberarlo para evitar fugas de recursos.

typedef void (*ValidatorShutdownCB) (ValidatorModuleState *state);