#http-request #http #signatures #digest #signature #extension

http-signature-normalization-reqwest

由你负责签名的 HTTP 签名库

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

Download history 320/week @ 2024-04-20 330/week @ 2024-04-27 285/week @ 2024-05-04 329/week @ 2024-05-11 289/week @ 2024-05-18 534/week @ 2024-05-25 541/week @ 2024-06-01 273/week @ 2024-06-08 345/week @ 2024-06-15 279/week @ 2024-06-22 170/week @ 2024-06-29 283/week @ 2024-07-06 266/week @ 2024-07-13 348/week @ 2024-07-20 484/week @ 2024-07-27 244/week @ 2024-08-03

1,366 每月下载量
17 个 crate 中使用 (直接使用 4)

AGPL-3.0

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