Hemos cubierto el código de error HTTP 403 (prohibido) con cierto detalle antes, pero también tiene un hermano casi idéntico.
Entonces, ¿cuál es exactamente la diferencia entre los códigos de estado 401 (no autorizado) y 403 (prohibido)? ¿Seguramente significan lo mismo? ¡Miremos más de cerca!
Estándares RFC
El estándar RFC más actualizado que define 401 (no autorizado) es RFC 7235
El código de estado 401 (No autorizado) indica que la solicitud no se ha aplicado porque carece de credenciales de autenticación válidas para el recurso de destino ... El agente de usuario PUEDE repetir la solicitud con un campo de encabezado de autorización nuevo o reemplazado.Mientras que 403 (Prohibido) se define más recientemente en RFC 7231
El código de estado 403 (Prohibido) indica que el servidor entendió la solicitud pero se niega a autorizarla ... Si se proporcionaron credenciales de autenticación en la solicitud, el servidor las considera insuficientes para otorgar acceso.Causas comunes
Como se mencionó en el artículo anterior, el error 403 puede ocurrir cuando un usuario ha iniciado sesión pero no tiene suficientes privilegios para acceder al recurso solicitado. Por ejemplo, un usuario genérico puede estar intentando cargar una ruta 'admin'.
El momento más obvio en el que se encontrará con un error 401, por otro lado, es cuando no ha iniciado sesión en absoluto o ha proporcionado la contraseña incorrecta.
Estas son las dos causas más comunes de este par de errores.
Causas menos comunes
Sin embargo, hay algunos casos en los que no es tan sencillo como eso.
Los errores 403 pueden ocurrir debido a restricciones que no dependen completamente de las credenciales del usuario que inició sesión.
Por ejemplo, un servidor puede haber bloqueado recursos particulares para permitir solo el acceso desde un rango predefinido de direcciones IP, o puede utilizar el bloqueo geográfico. Esto último se puede eludir potencialmente con una VPN.
Los errores 401 pueden ocurrir incluso si el usuario ingresa las credenciales correctas. Esto es poco común y podría ser algo que solo encuentre realmente mientras desarrolla sus propios backends autenticados. Pero si el encabezado de autorización está mal formado, devolverá un 401.
Por ejemplo, es posible que tenga un JWT (JSON Web Token) que desee incluir en el encabezado de la solicitud, que espera el formato Authorization: Bearer eyJhbGci......yJV_adQssw5c
. Si olvidara la palabra 'Portador' antes del JWT, se encontraría con el error 401.
Yo mismo me encontré con este problema al probar API en desarrollo con Postman y olvidar la sintaxis correcta para los encabezados de autenticación.
Eso es
Espero que esto aclare cualquier confusión en torno a estos errores muy similares.
Si encuentra esto útil, o desea desafiar o extender algo aquí, no dude en contactarme en Twitter @JacksonBates.