Comment est-il possible de renvoyer une réponse 401 formatée en cas de token non valide (expiré, révoqué, etc.) suite à la mise en œuvre d’un RESTServiceExternalObject.
Exemple de format :
{
"status": 401,
"title": "Invalid Access Token",
"detail": "The Bearer access token found in the Authorization HTTP header is invalid"
}
De manière générale il est possible de surcharger les méthodes d’erreur de ce type d’objet externe, cf. RESTServiceExternalObject
Mais dans le cas d’une erreur de token invalide c’est beaucoup plus bas niveau => le check est fait avant d’instancier et d’invoker l’objet externe, du coup je ne pense pas qu’en l’état on puisse modifier ce que ça répond.
Le cas du forbidden (403) est de même nature que le unauthorized (401), ce sont des vérifications qui sont faites en amont de l’instanciation de l’appel de l’objet externe
as tu un token valide ? non => unauthorized
as tu le droit d’appeler cet objet externe ? non = forbidden
ok on instancie et on invoque l’objet externe…
Les 1) et 2) ne sont donc pas hookables en l’état.
On va donc regarder s’il est envisageable d’ajouter un ou des platform hooks pour reformatter si besoin les réponses HTTP (à minima, les réponses d’erreur bas niveau : 404, 401, 403)
NB: Je note au passage que, contrairement au unauthorized, le forbidden ne tient visiblement pas compte du Accept: application/json de la requête et renvoie systématiquement du HTML, ça c’est une anomalie
En attendant la seule manière de customiser l’ensemble des réponses ok ou ko d’un objet externe c’est de le rendre public (i.e. l’habiliter à PUBLIC) et de tout gérer applicativement, y compris l’ident/authent (et via un mécanisme autre que le header Authorization) et la vérification des droits ce qui est dommage car ça revient à réinventer l’eau chaude en prenant le risque de ne pas bien le faire.
Le pb de non prise en compte du Accept: application/json dans les messages d’erreur Forbidden et Internal server error sur les appels d’objet externes sur le endpoint API endpoint est corrigé => désormais ça renverra bien du JSON:
Voilà on a ajouté un platform hook dédié à la surcharge des réponses d’erreurs : customErrorResponse
Attention: quand on surcharge ce hook il faut bien le faire en fct de l’URI appelée car ce hook est commun à tous les cas de réponses d’erreur (et en fct de l’appel la nature de data est potentiellement différente : String ,JSONObject, …)
Ex: pour surcharger les erreurs d’appel d’objets externes sur le endpoint API :
Ce sera backporté sur la future 6.0.10 et, sauf incompatibilité ou de risques, sur la future 5.3.37
PS: pour bénéficier de ce genre d’évolution il vaudrait quand même plutôt passer en v6 car normalement sur la v5 qui est désormais en maintenance long terme on n’est pas sensé backporter d’évolutions, uniquement du correctif.