Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
reqsign
Signing HTTP requests for AWS, Azure, Google, Huawei, Aliyun, Tencent and Oracle services.
Features
This crate provides a unified interface for signing HTTP requests across multiple cloud providers:
- AWS: Signature V4 for AWS services
- Azure: Azure Storage services
- Google: Google Cloud services
- Aliyun: Aliyun Object Storage Service (OSS)
- Huawei Cloud: Object Storage Service (OBS)
- Tencent Cloud: Cloud Object Storage (COS)
- Oracle: Oracle Cloud services
Request URI Contract
Requests passed to the built-in signers must already contain a valid, wire-ready URI
with an authority. Construct the intended path and query structure before signing and
percent-encode data components exactly once. Structural delimiters such as path /
and query & remain literal; delimiter bytes that belong to data must be encoded, such
as %2F for a slash inside one path segment.
Reqsign does not perform general-purpose URI encoding for callers. Existing percent
escapes, query order, duplicate keys, empty values, and literal + characters are part
of the caller-owned wire representation. Header authentication preserves that URI.
Query authentication preserves it as a prefix and appends only protocol-encoded
authentication fields.
Signer::sign is atomic with respect to the caller's request head. On error, the
method, URI, version, headers, and extensions remain unchanged. On success, only the
URI and headers may change. The expires_in argument is a service-specific validity
input, not a universal switch between header and query authentication.
Quick Start
Add reqsign to your Cargo.toml:
[]
= "0.20"
By default, this includes the default-context feature which provides a ready-to-use context implementation using reqwest and tokio.
To use specific services only:
[]
= { = "0.20", = false, = ["aws", "default-context"] }
Examples
Option 1: Using Default Signers (Recommended)
The easiest way to get started is using the default signers provided for each service:
use Result;
use aws;
async
Option 2: Custom Assembly
For more control, you can manually assemble the signer components:
use Result;
use ;
use ;
async
Customizing Default Signers
You can customize the default signers using the with_* methods:
use aws;
use StaticCredentialProvider;
// Start with default signer and customize components
let signer = default_signer
.with_credential_provider
.with_context;
Examples for Other Services
// Azure Storage
use azure;
let signer = default_signer;
// Google Cloud
use google;
let signer = default_signer;
// Aliyun OSS
use aliyun;
let signer = default_signer;
// Huawei Cloud OBS
use huaweicloud;
let signer = default_signer;
// Tencent COS
use tencent;
let signer = default_signer;
// Oracle Cloud
use oracle;
let signer = default_signer;
Feature Flags
default: Enablesdefault-contextdefault-context: Provides a default context implementation usingreqwestandtokioaliyun: Enable Aliyun OSS supportaws: Enable AWS services supportazure: Enable Azure Storage supportgoogle: Enable Google Cloud supporthuaweicloud: Enable Huawei Cloud OBS supportoracle: Enable Oracle Cloud supporttencent: Enable Tencent COS support
WASM Support
This crate supports WebAssembly (WASM) targets. However, the default-context feature is not available on WASM due to platform limitations. When targeting WASM, you should:
- Disable default features
- Use the existing context implementations from
reqsign-file-read-tokioandreqsign-http-send-reqwestcrates - Or implement your own WASM-compatible context
Example for WASM:
[]
= { = "0.20", = false, = ["aws"] }
= "4"