diff --git a/core/services/azblob/src/backend.rs b/core/services/azblob/src/backend.rs index 5208c4350521..b6c8054d1216 100644 --- a/core/services/azblob/src/backend.rs +++ b/core/services/azblob/src/backend.rs @@ -468,6 +468,7 @@ impl Builder for AzblobBuilder { encryption_algorithm, container: self.config.container.clone(), skip_signature: self.config.skip_signature, + sas_token: self.config.sas_token.clone(), signer, }), }) diff --git a/core/services/azblob/src/core.rs b/core/services/azblob/src/core.rs index c0a5b1453638..f0104e42d906 100644 --- a/core/services/azblob/src/core.rs +++ b/core/services/azblob/src/core.rs @@ -82,6 +82,7 @@ pub struct AzblobCore { pub encryption_key_sha256: Option, pub encryption_algorithm: Option, pub skip_signature: bool, + pub sas_token: Option, pub signer: Signer, } @@ -790,6 +791,10 @@ impl AzblobCore { .push("versionid", &percent_encode_path(version)) .finish(); } + if let Some(sas_token) = &self.sas_token { + let sep = if source.contains('?') { '&' } else { '?' }; + source = format!("{source}{sep}{sas_token}"); + } let target = self.build_path_url(to); let mut req = Request::put(&target) @@ -955,6 +960,7 @@ mod tests { encryption_key_sha256: None, encryption_algorithm: None, skip_signature: true, + sas_token: None, signer: Signer::new( Context::new(), StaticCredentialProvider::new_shared_key("acc", "a2V5"), diff --git a/core/services/ghac/src/writer.rs b/core/services/ghac/src/writer.rs index c56e820943cd..e64d61561784 100644 --- a/core/services/ghac/src/writer.rs +++ b/core/services/ghac/src/writer.rs @@ -122,6 +122,7 @@ impl GhacWriter { encryption_key_sha256: None, encryption_algorithm: None, skip_signature: false, + sas_token: None, signer, }); let w = AzblobWriter::new(