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.

Cómo eliminar información sensible del registro predeterminado de HttpClient de C#

Escenario

Llamo a un servicio externo usando un token de acceso, que debe ser proporcionado como un parámetro de consulta llamado token.

Salida del registro

Al hacer una solicitud GET desde C#, veo este registro (el token real se reemplaza por eyJ0… en este ejemplo):

[17:53:07 INF] Comenzando a procesar la solicitud HTTP GET https://example.com/auth?token=eyJ0...

[17:53:07 INF] Enviando solicitud HTTP GET https://example.com/auth?token=eyJ0...

[17:53:07 INF] Recibiendo encabezados de respuesta HTTP después de 140.3618ms - 200

[17:53:07 INF] Finalizando el procesamiento de la solicitud HTTP después de 142.3193ms - 200

¿Cambiar el registro?

¿Existe una manera fácil de usar un controlador de registro personalizado obligatorio para el HttpClient/HttpClientfactory de tal manera que el parámetro de consulta del token se reemplace por ***?

Como:

[17:53:07 INF] Comenzando a procesar la solicitud HTTP GET https://example.com/auth?token=***

Nota 1:

Este código está dentro de una biblioteca, por lo que cambiar el nivel de registro para el HttpClient/HttpClientfactory en el appsettings.json no es una opción. Debe ser seguro.

Nota 2:

Registro el HttpClient / RestEase de la siguiente manera:

csharp
services
.AddTransient<IMyClient, MyClient>()
.AddHttpClient(options.HttpClientName, c => c.BaseAddress = options.ConnectUrl)
.AddPolicyHandler((serviceProvider, request) => HttpClientRetryPolicies.GetPolicy(serviceProvider))
.UseWithRestEaseClient()
;

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible utilizar un controlador de registro personalizado obligatorio para el HttpClient/HttpClientFactory de tal manera que el parámetro de consulta del token sea reemplazado por ***.

    Puede crear un controlador de registro personalizado que intercepte la solicitud y reemplace el parámetro de consulta del token por *** antes de registrarlo. Este controlador puede ser registrado con el HttpClient/HttpClientFactory usando el método AddHttpMessageHandler.

    Por ejemplo:

    csharp
    services
    .AddTransient<IMyClient, MyClient>()
    .AddHttpClient(options.HttpClientName, c => c.BaseAddress = options.ConnectUrl)
    .AddPolicyHandler((serviceProvider, request) => HttpClientRetryPolicies.GetPolicy(serviceProvider))
    .AddHttpMessageHandler()
    .UseWithRestEaseClient()
    ;

    La clase MyCustomLoggingHandler debe implementar la clase DelegatingHandler y anular el método SendAsync. En este método, puede interceptar la solicitud y reemplazar el parámetro de consulta del token por *** antes de registrarlo.

Comments are closed.