Crate http_auth

source ·
Expand description

HTTP authentication. Currently meant for clients; to be extended for servers.

As described in the following documents and specifications:

This framework is primarily used with HTTP, as suggested by the name. It is also used by some other protocols such as RTSP.

Cargo Features

basic-schemeyessupport for the Basic auth scheme
digest-schemeyessupport for the Digest auth scheme
httpnoconvenient conversion from http crate types, version 0.2
http10noconvenient conversion from http crate types, version 1.0


In most cases, callers only need to use PasswordClient and PasswordParams to handle Basic and Digest authentication schemes.

use std::convert::TryFrom as _;
use http_auth::PasswordClient;

let WWW_AUTHENTICATE_VAL = "UnsupportedSchemeA, Basic realm=\"foo\", UnsupportedSchemeB";
let mut pw_client = http_auth::PasswordClient::try_from(WWW_AUTHENTICATE_VAL).unwrap();
assert!(matches!(pw_client, http_auth::PasswordClient::Basic(_)));
let response = pw_client.respond(&http_auth::PasswordParams {
    username: "Aladdin",
    password: "open sesame",
    uri: "/",
    method: "GET",
    body: Some(&[]),
assert_eq!(response, "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");

The http or http10 features allow parsing all WWW-Authenticate headers within a http::HeaderMap in one call.

use http::header::{HeaderMap, WWW_AUTHENTICATE};

let mut headers = HeaderMap::new();
headers.append(WWW_AUTHENTICATE, "UnsupportedSchemeA".parse().unwrap());
headers.append(WWW_AUTHENTICATE, "Basic realm=\"foo\", UnsupportedSchemeB".parse().unwrap());

let mut pw_client = PasswordClient::try_from(headers.get_all(WWW_AUTHENTICATE)).unwrap();
assert!(matches!(pw_client, http_auth::PasswordClient::Basic(_)));






  • A trait for the parts needed from http crate 0.2 or 1.0’s HeaderValue type.