5 个版本
新 0.0.5 | 2024年8月27日 |
---|---|
0.0.4 | 2024年8月25日 |
0.0.3 | 2024年8月25日 |
0.0.2 | 2024年8月25日 |
0.0.1 | 2024年8月25日 |
335 在 网页编程
每月 241 次下载
27KB
446 行
不工作,需要修复,乐意接受 PR
aws_signer
aws_signer
是一个 Rust 库,它实现了 AWS Signature Version 4 签名,用于向 AWS 服务发送认证请求,包括生成预签名 URL。此库与 Cloudflare Workers 和 Cloudflare R2 兼容,允许您以 AWS 和 Cloudflare 可以验证的方式签名 HTTP 请求,确保安全通信。
功能
- 对 HTTP 请求的 AWS Signature Version 4 签名
- 支持生成预签名 URL 以进行临时访问
- 与 Cloudflare Workers 和 Cloudflare R2 兼容
- 灵活配置 AWS 凭据和区域
- 设计用于轻松集成
reqwest
以进行 HTTP 请求
安装
要在您的 Rust 项目中使用 aws_signer
库,请将其添加到您的 Cargo.toml
中的依赖项
[dependencies]
aws_signer = "0.1"
用法
设置客户端
要使用您的凭据创建新的 AWS 客户端,请使用 AwsClient::new
函数
use aws_signer::{AwsClient, AwsOptions, AwsRequestInit};
fn main() {
let client = AwsClient::new(
"your_access_key_id".to_string(),
"your_secret_access_key".to_string(),
None, // Optional session token if required
None, // Service will be guessed if None
None, // Region will be guessed if None
None,
Some(3), // Retries
Some(100), // Initial retry delay in ms
);
// Use the client to sign requests or fetch data
}
签名请求
您可以使用 AwsClient
的 sign
方法来签名 HTTP 请求。以下示例展示了如何使用 reqwest
crate 签名请求
use aws_signer::{AwsClient, AwsRequestInit};
use reqwest::{Request, Method, Url};
#[tokio::main]
async fn main() {
let client = AwsClient::new(
"your_access_key_id".to_string(),
"your_secret_access_key".to_string(),
None, // Optional session token if required
None, // Service will be guessed if None
None, // Region will be guessed if None
None,
Some(3), // Retries
Some(100), // Initial retry delay in ms
);
let request = Request::new(
Method::PUT,
Url::parse("https://your-bucket.your-account.r2.cloudflarestorage.com/test-file").unwrap(),
);
match client.fetch(request, None).await {
Ok(response) => {
println!("Response: {:?}", response.text().await.unwrap());
}
Err(err) => {
eprintln!("Error: {}", err);
}
}
}
生成预签名 URL
要为临时上传到 S3 或其他 AWS 服务生成预签名 URL
use aws_signer::{AwsClient, AwsOptions, AwsRequestInit};
use reqwest::{Request, Method, Url};
#[tokio::main]
async fn main() {
let client = AwsClient::new(
"your_access_key_id".to_string(),
"your_secret_access_key".to_string(),
None, // Optional session token if required
Some("s3".to_string()), // Specify the service
Some("us-east-1".to_string()), // Specify the region
None,
Some(3),
Some(100),
);
let request = Request::new(
Method::PUT,
Url::parse("https://your-bucket.s3.amazonaws.com/your-object-key").unwrap(),
);
match client.sign(request, None).await {
Ok(signed_request) => {
println!("Presigned URL: {}", signed_request.url());
}
Err(err) => {
eprintln!("Error: {}", err);
}
}
}
配置
该库通过 AwsOptions
结构体提供灵活的配置选项。您可以自定义签名过程、服务、区域等
access_key_id
:AWS 访问密钥 IDsecret_access_key
:AWS 秘密访问密钥session_token
:可选的会话令牌,用于临时凭据service
:AWS 服务名称(例如,“s3”,“execute-api”)region
:AWS 区域(例如,“us-east-1”)datetime
:自定义签名日期和时间sign_query
:布尔标志,指示是否对查询进行签名append_session_token
:布尔标志,用于追加会话令牌
兼容性
- Cloudflare Workers:此库可在 Cloudflare Workers 中使用以签名请求,非常适合无服务器环境。
- Cloudflare R2:支持对 Cloudflare R2 存储进行签名请求,使其易于与 Cloudflare 的对象存储解决方案集成。
贡献
欢迎贡献!请提交问题或拉取请求以帮助改进此库。
您的支持将有助于该库的持续开发、维护以及添加新功能。谢谢!
许可证
本库采用MIT许可证。有关详细信息,请参阅LICENSE文件。
致谢
- 基于AWS Signature Version 4签名过程
- 受到其他语言中类似库的启发
依赖项
~6–17MB
~241K SLoC