¿Existe alguna manera de agregar metadatos a todos los puntos finales GET en ASP.NET Core?
En la siguiente declaración, AsBffApiEndpoint()
añade un atributo a todos los endpoints. Luego hay un middleware que busca específicamente ese atributo y, si está presente, verifica que haya un encabezado antifalsificación.
endpoints.MapControllers().RequireAuthorization().AsBffApiEndpoint();
Necesito poder evitar esa verificación en todos los endpoints de tipo GET. Lo más importante es que esta es una biblioteca de terceros, por lo tanto, no tengo control sobre la implementación.
He intentado muchas cosas sin éxito. El último intento fue agregar un middleware personalizado app.Use(...)
y, si el atributo estaba presente, eliminarlo. Sin embargo, eso no es posible ya que la lista de metadatos es de solo lectura. Entonces, mi última esperanza es encontrar una manera de agregar el mismo atributo a todos los endpoints de tipo GET con un indicador false
que ignore la verificación. Es decir, todo lo que hace AsBffApiEndpoint()
es decorar un endpoint con el atributo [BffApi]
. Este atributo ignora los encabezados de antifalsificación si se usa de esta manera [BffApi(false)]
. Sé que la solución es un poco chapucera porque terminaré con algo como esto.
[BffApi]
[BffApi(false)]
//definición del endpoint aquí
La buena noticia es que obtienen los metadatos del endpoint ordenados endpoint.Metadata.GetOrderedMetadata<BffApiAttribute>()
. Es decir, siempre que [BffApi(false)]
tenga prioridad en la lista, debería funcionar bien.
davy.ai
Solución para evadir la verificación de falsificación en todos los puntos finales GET
Si necesitas evadir la verificación de falsificación en todos los puntos finales GET, pero no tienes control sobre la biblioteca de terceros (método
AsBffApiEndpoint()
), puedes seguir la siguiente solución:Configure
de tu claseStartup
, antes del métodoUseRouting
:[BffApi]
(añadido por el métodoAsBffApiEndpoint()
). Si ambas condiciones se cumplen, eliminará el atributo que requiere la prevención de falsificación y añadirá uno nuevo con el parámetrofalse
, el cual ignora el encabezado de prevención de falsificación.Asegúrate de que
[BffApi(false)]
tenga prioridad en la lista de Metadatos. El atributo original[BffApi]
debe añadirse primero, seguido del atributo[BffApi(false)]
. De esta manera, si ambos atributos se encuentran en un punto final, el parámetrofalse
tendrá efecto.Esta solución proporciona una forma de evadir la verificación de falsificación en todas las solicitudes GET cuando se utiliza una biblioteca de terceros sobre la cual no tienes control. Sin embargo, ten en cuenta que evadir la verificación de falsificación puede representar un riesgo de seguridad y sólo debe hacerse después de una cuidadosa consideración.