다음을 통해 공유


HttpClientFactory 로깅은 기본적으로 헤더 값을 수정함

HttpClientFactory의 기본 로깅에는 모든 요청 및 응답 헤더를 출력하는 Trace 수준 로그가 포함됩니다. 이 RedactLoggedHeaders 메서드를 사용하면 이러한 헤더 중 중요한 헤더를 지정할 수 있습니다. 이러한 헤더의 값은 기록되지 않습니다(헤더 이름은 그대로 유지되지만 값은 *로 대체됨). 이전에는 RedactLoggedHeaders를 사용하여 헤더 중 어느 것도 중요한 헤더로 지정하지 않으면, 모든 헤더가 중요하지 않은 것으로 간주되어 모든 값이 있는 그대로 기록되었습니다. .NET 9부터는 지정하지 않는 한 모든 헤더가 중요한 것으로 간주되며 모든 값이 기본적으로 수정됩니다.

이전 동작

이전에는 RedactLoggedHeaders를 호출하지 않은 경우 모든 헤더가 있는 그대로 기록되었습니다. RedactLoggedHeaders를 호출한 경우 지정된 헤더가 수정되고 다른 헤더는 있는 그대로 기록되었습니다.

services.AddHttpClient("default", ...); // 1

services.AddHttpClient("redacted-predicate", ...) // 2
    .RedactLoggedHeaders(h => h.StartsWith("Auth") || h.StartsWith("X-"));

services.AddHttpClient("redacted-collection", ...) // 3
    .RedactLoggedHeaders(new[] { "Authorization", "X-Sensitive", });

(1) 기본 - 수정되지 않음

trce: System.Net.Http.HttpClient.default.ClientHandler[102]
      Request Headers:
      Authorization: NTLM blob
      X-Sensitive: some, secret, values
      X-Other: some, other, values
      Cache-Control: no-cache

(2) 조건자로 수정됨

trce: System.Net.Http.HttpClient.redacted-predicate.ClientHandler[102]
      Request Headers:
      Authorization: *
      X-Sensitive: *
      X-Other: *
      Cache-Control: no-cache

(3) 컬렉션으로 수정됨

trce: System.Net.Http.HttpClient.redacted-collection.ClientHandler[102]
      Request Headers:
      Authorization: *
      X-Sensitive: *
      X-Other: some, other, values
      Cache-Control: no-cache

새 동작

.NET 9부터는 RedactLoggedHeaders를 호출하지 않으면 모든 헤더가 수정됩니다. RedactLoggedHeaders를 호출하면 지정된 헤더가 수정됩니다.

services.AddHttpClient("default", ...); // 1 <--- CHANGED

services.AddHttpClient("redacted-predicate", ...) // 2 <--- remains the same
    .RedactLoggedHeaders(h => h.StartsWith("Auth") || h.StartsWith("X-"));

services.AddHttpClient("redacted-collection", ...) // 3 <--- remains the same
    .RedactLoggedHeaders(new[] { "Authorization", "X-Sensitive", });

(1) 기본 - 모두 수정됨

trce: System.Net.Http.HttpClient.default.ClientHandler[102]
      Request Headers:
      Authorization: *
      X-Sensitive: *
      X-Other: *
      Cache-Control: *

도입된 버전

.NET 9 RC 1

호환성이 손상되는 변경의 형식

이 변경 사항은 동작 변경입니다.

변경 이유

헤더가 중요한 것으로 지정되지 않으면 중요한 정보가 로그에 노출될 수 있습니다. 이 변경을 통해 기본적으로 로깅을 안전하게 만들었습니다.

헤더를 기록하려면 중요한 정보가 포함될 수 있는 헤더를 평가하고 RedactLoggedHeaders API를 사용하여 명시적으로 헤더를 지정합니다. ConfigureHttpClientDefaults(IServiceCollection, Action<IHttpClientBuilder>)를 사용하여 클라이언트마다 또는 모든 클라이언트에 대해 전역적으로 헤더를 수정할 수 있습니다.

"차단 목록" 접근 방식 대신 "허용 목록" 접근 방식을 사용하는 것이 좋습니다.

헤더 중 어느 것도 중요한 정보를 포함할 수 없다고 확신하거나 내부 디버그 목적인 경우, false를 반환하는 대리자를 전달하여 수정을 완전히 사용하지 않도록 설정할 수 있습니다.

private static readonly string[] SafeToLogHeaders = ....;
private static readonly string[] SuperSecretHeaders = ....;

// Specify for all clients.
services.ConfigureHttpClientDefaults(b =>
    b.RedactLoggedHeaders(h =>
        Array.IndexOf(SafeToLogHeaders, h) == -1)); // log values only for SafeToLogHeaders

// "globally" specified RedactLoggedHeaders can be overriden per-name.
// NOTE: RedactLoggedHeaders completely replaces the previously specified check.
services.AddHttpClient("override")
    .RedactLoggedHeaders(SuperSecretHeaders); // log all values except SuperSecretHeaders

// -OR-

// (dangerous) Disable header value redaction for all clients.
services.ConfigureHttpClientDefaults(b => b.RedactLoggedHeaders(_ => false));

영향을 받는 API