fix: align provider oauth refresh redirects

This commit is contained in:
fawney19
2026-04-27 22:08:02 +08:00
parent a7a3c9f023
commit ed17147281
6 changed files with 242 additions and 5 deletions
@@ -21,12 +21,20 @@ pub(super) async fn execute_admin_provider_oauth_refresh(
key,
provider,
provider_type,
trace_id,
transport,
} = request;
let refreshed_entry = match state.force_local_oauth_refresh_entry(&transport).await {
Ok(Some(entry)) => Some(entry),
Ok(None) => {
tracing::warn!(
trace_id = %trace_id,
key_id = %key_id,
provider_id = %provider.id,
provider_type = %provider_type,
"gateway manual provider oauth refresh did not run"
);
return Ok(RefreshDispatch::Respond(response::control_error_response(
http::StatusCode::BAD_REQUEST,
"Token 刷新未执行,请检查授权配置",
@@ -41,6 +49,15 @@ pub(super) async fn execute_admin_provider_oauth_refresh(
Some(status_code),
Some(body_excerpt.as_str()),
);
tracing::warn!(
trace_id = %trace_id,
key_id = %key_id,
provider_id = %provider.id,
provider_type = %provider_type,
status_code,
reason = %error_reason,
"gateway manual provider oauth refresh failed"
);
if matches!(status_code, 400 | 401 | 403) {
let failure_reason = format!(
"{OAUTH_REFRESH_FAILED_PREFIX}Token 续期失败 ({status_code}): {error_reason}"
@@ -66,11 +83,27 @@ pub(super) async fn execute_admin_provider_oauth_refresh(
));
}
Err(AdminLocalOAuthRefreshError::Transport { source, .. }) => {
tracing::warn!(
trace_id = %trace_id,
key_id = %key_id,
provider_id = %provider.id,
provider_type = %provider_type,
error = %source,
"gateway manual provider oauth refresh transport failed"
);
return Ok(RefreshDispatch::Respond(
response::oauth_refresh_failed_service_unavailable_response(source.to_string()),
));
}
Err(AdminLocalOAuthRefreshError::InvalidResponse { message, .. }) => {
tracing::warn!(
trace_id = %trace_id,
key_id = %key_id,
provider_id = %provider.id,
provider_type = %provider_type,
reason = %message,
"gateway manual provider oauth refresh returned invalid response"
);
return Ok(RefreshDispatch::Respond(
response::oauth_refresh_failed_bad_request_response(&message),
));
@@ -17,6 +17,7 @@ pub(super) struct RefreshRequestContext {
pub(super) key: StoredProviderCatalogKey,
pub(super) provider: StoredProviderCatalogProvider,
pub(super) provider_type: String,
pub(super) trace_id: String,
pub(super) transport: AdminGatewayProviderTransportSnapshot,
}
@@ -101,6 +101,7 @@ pub(super) async fn parse_admin_provider_oauth_refresh_request(
key,
provider,
provider_type,
trace_id: request_context.trace_id().to_string(),
transport,
}))
}