#oauth

no-std oauth1-request

Yet yet yet another OAuth 1.0 client library

20 releases

0.6.1 Jun 19, 2024
0.6.0 Jun 12, 2022
0.5.1 Oct 6, 2021
0.5.0 Jan 11, 2021
0.2.0 Oct 28, 2018

#53 in Authentication

Download history 1939/week @ 2024-07-11 1175/week @ 2024-07-18 775/week @ 2024-07-25 970/week @ 2024-08-01 1379/week @ 2024-08-08 671/week @ 2024-08-15 675/week @ 2024-08-22 980/week @ 2024-08-29 948/week @ 2024-09-05 590/week @ 2024-09-12 1058/week @ 2024-09-19 1012/week @ 2024-09-26 753/week @ 2024-10-03 748/week @ 2024-10-10 885/week @ 2024-10-17 1110/week @ 2024-10-24

3,672 downloads per month
Used in 18 crates (11 directly)

MIT/Apache

145KB
2.5K SLoC

oauth1-request

Build Status Current Version Documentation

Yet yet yet another OAuth 1.0 client library for Rust.

Usage

Add this to your Cargo.toml:

[dependencies]
oauth = { version = "0.6", package = "oauth1-request" }

A typical authorization flow looks like this:

// Define a type to represent your request.
#[derive(oauth::Request)]
struct CreateComment<'a> {
    article_id: u64,
    text: &'a str,
}

let uri = "https://example.com/api/v1/comments/create.json";

let request = CreateComment {
    article_id: 123456789,
    text: "A request signed with OAuth & Rust 🦀 🔏",
};

// Prepare your credentials.
let token =
    oauth::Token::from_parts("consumer_key", "consumer_secret", "token", "token_secret");

// Create the `Authorization` header.
let authorization_header = oauth::post(uri, &request, &token, oauth::HmacSha1);
// `oauth_nonce` and `oauth_timestamp` vary on each execution.
assert_eq!(
    authorization_header,
    "OAuth \
         oauth_consumer_key=\"consumer_key\",\
         oauth_nonce=\"Dk-OGluFEQ4f\",\
         oauth_signature_method=\"HMAC-SHA1\",\
         oauth_timestamp=\"1234567890\",\
         oauth_token=\"token\",\
         oauth_signature=\"n%2FrUgos4CFFZbZK8Z8wFR7drU4c%3D\"",
);

// You can create an `x-www-form-urlencoded` string or a URI with query pairs from the request.

let form = oauth::to_form(&request);
assert_eq!(
    form,
    "article_id=123456789&text=A%20request%20signed%20with%20OAuth%20%26%20Rust%20%F0%9F%A6%80%20%F0%9F%94%8F",
);

let uri = oauth::to_query(uri.to_owned(), &request);
assert_eq!(
    uri,
    "https://example.com/api/v1/comments/create.json?article_id=123456789&text=A%20request%20signed%20with%20OAuth%20%26%20Rust%20%F0%9F%A6%80%20%F0%9F%94%8F",
);

Dependencies

~0.6–2MB
~38K SLoC