Signing API requests without effort.
Most API is simple. But they could be complicated when they are hidden from complex abstraction. reqsign
bring the simple API back: build, sign, send.
use anyhow::Result;
use reqsign::AwsConfig;
use reqsign::AwsLoader;
use reqsign::AwsV4Signer;
use reqwest::Client;
#[tokio::main]
async fn main() -> Result<()> {
// Signer can load region and credentials from environment by default.
let client = Client::new();
let config = AwsConfig::default().from_profile().from_env();
let loader = AwsLoader::new(client.clone(), config);
let signer = AwsV4Signer::new("s3", "us-east-1");
// Construct http::Request, and convert it into parts and body
let req = http::Request::get("https://s3.amazonaws.com/testbucket").body(reqwest::Body::from(""))?;
let (mut parts, body) = req.into_parts();
// Signing request with Signer, and convert it back to reqwest::Request
let credential = loader.load().await?.unwrap();
signer.sign(&mut parts, &credential)?;
let req = http::Request::from_parts(parts, body).try_into()?;
// Sending already signed request.
let resp = client.execute(req).await?;
println!("resp got status: {}", resp.status());
Ok(())
}
- Pure rust with minimal dependencies.
- Test again official SDK and services.
- Supported services
- Aliyun OSS:
reqsign::AliyunOssSigner
- AWS services (SigV4):
reqsign::AwsV4Signer
- Azure Storage services:
reqsign::AzureStorageSigner
- Google services:
reqsign::GoogleSigner
- Huawei Cloud OBS:
reqsign::HuaweicloudObsSigner
- Aliyun OSS:
Check out the CONTRIBUTING.md guide for more details on getting started with contributing to this project.
Submit issues for bug report or asking questions in discussion.
Inspired a lot from:
- aws-sigv4 for AWS SigV4 support.
- azure_storage_blobs for Azure Storage support.