#oauth #oauth1

no-std oauth1-request

Yet yet yet another OAuth 1.0 client library

19 releases

0.6.0 Jun 12, 2022
0.5.1 Oct 6, 2021
0.5.0 Jan 11, 2021
0.4.3 Nov 19, 2020
0.2.0 Oct 28, 2018

#215 in Authentication

Download history 909/week @ 2023-10-28 740/week @ 2023-11-04 660/week @ 2023-11-11 878/week @ 2023-11-18 1483/week @ 2023-11-25 1356/week @ 2023-12-02 1212/week @ 2023-12-09 1068/week @ 2023-12-16 962/week @ 2023-12-23 1076/week @ 2023-12-30 1202/week @ 2024-01-06 969/week @ 2024-01-13 897/week @ 2024-01-20 982/week @ 2024-01-27 493/week @ 2024-02-03 763/week @ 2024-02-10

3,273 downloads per month
Used in 14 crates (8 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–2.1MB
~40K SLoC