Keep credentials out of app-server logs (#39993)

## Why

App-server logs can be persisted or included in submitted diagnostics, so credentials used by model providers, authentication refreshes, and attestation requests must not appear in diagnostic output.

## What changed

- Add `RedactedString`, which preserves serialization and string access while replacing debug output with `<redacted>`.
- Use it for model-provider bearer tokens, header and query values, authentication command arguments, and attestation tokens.
- Avoid logging JSON-RPC error payloads and parser or authentication errors that may echo credentials; retain safe context such as error codes and categories.

## Testing

- Add an app-server regression test that exercises provider credentials, refreshed authentication tokens, and attestation tokens, then verifies none appear in persisted SQLite or submitted diagnostic logs.

GitOrigin-RevId: 8c50408adf94d93847658b1320682cf3b637d2cc
This commit is contained in:
andrewgu-oai authored and copyberry committed 2026-08-21 19:04:32 +00:00
1 parent 45a3edc02a
commit 79b7606803
36 files changed
+446 -108

No files matched your search

+2 -2
View File
@@ -294,7 +294,7 @@ fn bearer_auth_for_provider(
}
if let Some(token) = provider.experimental_bearer_token.clone() {
return Ok(Some(BearerAuthProvider::new(token)));
return Ok(Some(BearerAuthProvider::new(token.into_inner())));
}
Ok(None)
@@ -512,7 +512,7 @@ mod tests {
fn custom_provider_uses_explicit_bearer_instead_of_ambient_auth() {
let mut provider =
create_oss_provider_with_base_url("http://localhost:11434/v1", WireApi::Responses);
provider.experimental_bearer_token = Some("provider-token".to_string());
provider.experimental_bearer_token = Some("provider-token".into());
let ambient_auth = CodexAuth::BedrockApiKey(BedrockApiKeyAuth {
api_key: "bedrock-api-key-test".to_string(),
region: "us-east-1".to_string(),