Pregunta:
Estamos usando los módulos 'Simple OAuth' y 'jsonapi' para la autenticación de front-end en Angular de nuestro proyecto Drupal desacoplado.
Hemos notado que cuando las credenciales del usuario son correctas pero el token ha caducado, la respuesta del encabezado sigue siendo 200 'ok' con un mensaje que indica que el token ya no es válido.
Pero necesitamos un 400/401 o 403, como se describe en la documentación del juramento .
¿Hay alguna razón por la que esto se implemente de esta manera? ¿O hay alguna forma de alterar la respuesta?
Respuesta:
¿Hay alguna razón por la que esto se implemente de esta manera?
200 ok
es el código de estado esperado para los recursos de la colección, incluso si una, muchas o todas las entidades fueron excluidas del recurso de la colección por motivos de acceso.
De https://www.drupal.org/project/jsonapi/issues/2853066 :
El código de estado de un "recurso de colección" debe ser completamente distinto de cualquiera o todas las entidades representadas en ese recurso.
A menos que exista un mecanismo de control de acceso que sea explícitamente un requisito previo para acceder a cualquier lista de entidades de un tipo determinado que podamos aprovechar, se debe suponer que cualquier consumidor debe tener acceso a cualquier recurso de recopilación.
Es completamente coherente con REST devolver una respuesta 200 a una colección vacía, incluso cuando todas esas entidades se han eliminado por motivos de acceso.
¿O hay alguna forma de alterar la respuesta?
Por supuesto que puede. Consulte la documentación sobre la modificación de rutas y la prestación de un servicio etiquetado de acceso personalizado:
- https://www.drupal.org/docs/8/api/routing-system/altering-existing-routes-and-adding-new-routes-based-on-dynamic-ones
- https://www.drupal.org/docs/8/api/routing-system/access-checking-on-routes
Finalmente, el enlace que proporcionó en la pregunta es para especificaciones de autenticación y es irrelevante para jsonapi. El recurso Oauth en Drupal ( /oauth/token
) le dará correctamente 4xx en caso de errores al obtener un nuevo token.