Skip to content

Commit 78bd6f2

Browse files
makes openrtb request signing opt in
1 parent 0b635b9 commit 78bd6f2

File tree

4 files changed

+31
-16
lines changed

4 files changed

+31
-16
lines changed

crates/common/src/prebid_proxy.rs

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -175,23 +175,26 @@ fn enhance_openrtb_request(
175175
});
176176
}
177177

178-
// Add trusted server signature
179-
if request["id"].is_string() {
180-
if !request["ext"].is_object() {
181-
request["ext"] = json!({});
182-
}
178+
// Add trusted server signature (if enabled)
179+
if let Some(request_signing_config) = &settings.request_signing {
180+
if request_signing_config.enabled && request["id"].is_string() {
181+
log::info!("signing openrtb request...");
182+
if !request["ext"].is_object() {
183+
request["ext"] = json!({});
184+
}
183185

184-
let id = request["id"]
185-
.as_str()
186-
.expect("as_str guaranteed by is_string check");
186+
let id = request["id"]
187+
.as_str()
188+
.expect("as_str guaranteed by is_string check");
187189

188-
let signer = RequestSigner::from_config()?;
189-
let signature = signer.sign(id.as_bytes())?;
190+
let signer = RequestSigner::from_config()?;
191+
let signature = signer.sign(id.as_bytes())?;
190192

191-
request["ext"]["trusted_server"] = json!({
192-
"signature": signature,
193-
"kid": signer.kid
194-
});
193+
request["ext"]["trusted_server"] = json!({
194+
"signature": signature,
195+
"kid": signer.kid
196+
});
197+
}
195198
}
196199

197200
Ok(())

crates/common/src/request_signing/jwks.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,7 @@ pub fn get_active_jwks() -> Result<String, TrustedServerError> {
7474
#[cfg(test)]
7575
mod tests {
7676
use super::*;
77-
use base64::{engine::general_purpose, Engine};
78-
use ed25519_dalek::SigningKey;
77+
use ed25519_dalek::{SigningKey, Signer, Verifier};
7978
use jose_jwk::Key;
8079

8180
#[test]

crates/common/src/settings.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,16 @@ impl Handler {
126126

127127
#[derive(Debug, Default, Deserialize, Serialize)]
128128
pub struct RequestSigning {
129+
#[serde(default = "default_request_signing_enabled")]
130+
pub enabled: bool,
129131
pub config_store_id: String,
130132
pub secret_store_id: String,
131133
}
132134

135+
fn default_request_signing_enabled() -> bool {
136+
false
137+
}
138+
133139
#[derive(Debug, Default, Deserialize, Serialize, Validate)]
134140
pub struct Settings {
135141
#[validate(nested)]

trusted-server.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,10 @@ template = "{{ client_ip }}:{{ user_agent }}:{{ first_party_id }}:{{ auth_user_i
3232
# Custom headers to be included in every response
3333
[response_headers]
3434
X-Custom-Header = "custom header value"
35+
36+
# Request Signing Configuration
37+
# Enable signing of OpenRTB requests and other API calls
38+
[request_signing]
39+
enabled = false # Set to true to enable request signing
40+
config_store_id = "<fastly-config-store-id>" # set config/secret store ids for key rotation
41+
secret_store_id = "<fastly-secret-store-id>"

0 commit comments

Comments
 (0)