es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Autenticación/Autorización global en Rocket basada en una cabecera

Sé que puedo usar un Request guard. Sin embargo, si tengo una API REST con cientos de manejadores, no solo sería molesto tener que agregar una función paramétrica adicional a todos ellos, sino que me asusta un poco que sea fácil omitir agregar tal parámetro aquí o allá y, por lo tanto, crear un agujero de seguridad. Es por eso que me gustaría saber si hay alguna forma de hacer una validación de ese tipo globalmente.

La documentación sobre Fairings menciona que se pueden usar para políticas de seguridad globales:

Como regla general, solo se deben implementar acciones globalmente aplicables a través de fairings. Por ejemplo, no debe usar una fairing para implementar autenticación o autorización (preferiblemente use un guardia de solicitud) a menos que la autenticación o autorización se aplique a toda la aplicación. Por otro lado, debe usar una fairing para grabar estadísticas de tiempo y / o uso o para implementar políticas de seguridad globales.

Pero al mismo tiempo, la documentación sobre la devolución de llamada on_request() dice lo siguiente:

Una devolución de llamada de solicitud puede modificar la solicitud a voluntad y Data::peek() en los datos entrantes. Sin embargo, no puede abortar o responder directamente a la solicitud; estos problemas se manejan mejor a través de guardias de solicitud o mediante devoluciones de llamada de respuesta.

Entonces, ¿cómo se supone que debo devolver un error al usuario en caso de un token inválido, por ejemplo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que estás buscando una forma de implementar políticas de seguridad globales, como la autenticación o la autorización, para tu API REST. Según la documentación de Fairings, este es un buen caso de uso para Fairings. La función de devolución de llamada on_request() se puede utilizar para modificar la solicitud y examinar los datos entrantes, pero es mejor manejar problemas como la autenticación o la autorización a través de protectores de solicitud o funciones de devolución de llamada de respuesta.

    Si estás usando protectores de solicitud, puedes devolver un error al usuario en el caso de un token inválido usando la variante Outcome::Failure del enumerado Outcome. Por ejemplo:

    “`rust

    [get(“/”)]

    fn index(token: Token) -> Outcome {
    if token.is_valid() {
    Outcome::Success(“¡Bienvenido!”.to_string())
    } else {
    Outcome::Failure((Status::Unauthorized, “Token inválido”.to_string()))
    }
    }
    “`

Comments are closed.