18 个版本 (11 个重大变更)
0.12.0 | 2024年4月15日 |
---|---|
0.11.0 | 2023年11月26日 |
0.10.0 | 2023年8月17日 |
0.9.0 | 2023年7月6日 |
0.1.3 | 2020年9月30日 |
#17 in #signatures
1,366 每月下载量
在 17 个 crate 中使用 (直接使用 4)
68KB
1.5K SLoC
HTTP Signature Normaliztion Reqwest
由你负责签名的 HTTP 签名库
Http Signature Normalization 是一个最小依赖的 crate,用于生成用户提供的签名和验证的 HTTP 签名。API 简单;有一系列创建和验证步骤,使用类型确保合理使用。
用法
此 crate 为 reqwest 的 RequestBuilder 类型提供扩展
首先,将此 crate 添加到您的依赖中
http-signature-normalization-reqwest = { version = "0.2.0", default-features = false, features = ["sha-2"] }
reqwest = "0.11"
sha2 = "0.9"
thiserror = "0.1"
tokio = "1"
然后,在您的客户端中使用它
use http_signature_normalization_reqwest::prelude::*;
use reqwest::{header::DATE, Client};
use sha2::{Digest, Sha256};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = Config::default().require_header("accept");
let digest = Sha256::new();
let response = Client::new()
.post("http://127.0.0.1:8010/")
.header("User-Agent", "Reqwest")
.header("Accept", "text/plain")
.signature_with_digest(config, "my-key-id", digest, "my request body", |s| {
println!("Signing String\n{}", s);
Ok(base64::encode(s)) as Result<_, MyError>
})
.await?;
let body = response.bytes().await.map_err(MyError::Body)?;
println!("{:?}", body);
Ok(())
}
#[derive(Debug, thiserror::Error)]
pub enum MyError {
#[error("Failed to create signing string, {0}")]
Convert(#[from] SignError),
#[error("Failed to send request")]
SendRequest(#[from] reqwest::Error),
#[error("Failed to retrieve request body")]
Body(reqwest::Error),
}
贡献
请随意打开任何您发现问题的 issue。请注意,任何贡献的代码都将根据 AGPLv3 许可。
许可
版权所有 © 2022 Riley Trautman
HTTP Signature Normalization Reqwest 是免费软件:您可以在自由软件基金会发布的 GNU 通用公共许可证的条款下重新分配它和/或修改它,无论是许可证的第 3 版,还是(根据您的选择)任何更晚的版本。
HTTP Signature Normalization Reqwest 是希望它将是有用的,但没有任何保证;甚至没有关于适销性或特定用途的暗示保证。有关更多详细信息,请参阅 GNU 通用公共许可证。此文件是 HTTP Signature Normalization Reqwest 的一部分。
您应该已经随 HTTP Signature Normalization Reqwest 一起收到 GNU 通用公共许可证的副本。如果没有,请参阅 http://www.gnu.org/licenses/。
依赖关系
~4–16MB
~260K SLoC