Parses and generates HTTP Authorization and Proxy-Authorization headers strictly following RFC-7235. Supports legacy style auth-schemes (Basic, Digest, Bearer) as well as the more modern key-value auth params.
npm install --save @mitmaro/http-authorization-header
const http = require('http');
const {parse} = require('@mitmaro/http-authorization-header');
const httpServer = http.createServer((req, res) => {
const authHeader = req.getHeader('Authorization');
// authHeader => 'myscheme foo=bar, baz=foobar, buzz="quoted \"value!\""
const authData = parse(authHeader);
console.log(authData);
/*
{
scheme: 'myscheme',
values: [
['foo', 'bar'],
['baz', 'foobar],
['buzz', 'quotes "value!"']
]
}
*/
}).listen();
const {create, createToken68} = require('@mitmaro/http-authorization-header');
// legacy header value support (Basic, Digest, Bearer)
const basicAuthHeader = createToken68('Basic', Buffer.from('username:password').toString('base64'));
// Basic dXNlcm5hbWU6cGFzc3dvcmQ=
// modern form
const rfc7235Header = create('Custom', [['foo', 'bar'], ['foo', 'fuzz'], ['buzz', 'quoted "value!"']]);
// Custom foo=bar,foo=fuzz,buzz="quoted \"value!\""
const {
create,
createUnsafe,
createToken68,
createToken68Unsafe,
parse,
InvalidHeaderError,
InvalidInputError,
} = require('@mitmaro/http-authorization-header');
If the library is not in compliance with RFC-7235 then create an issue explaining the issue with sample data, or even better create a pull request that adds a test that fails.
Development is done using Node 8 and NPM 5, and tested against both Node 6 and Node 8. To get started
git clone git@github.com:MitMaro/http-authorization-header.git
cd http-authorization-header
npm install
npm run test
Based on auth-header which was licensed under CC0-1.0. This project is released under the ISC license.
The auth scheme
An array of tuple pairs of key and value
A formatted authorization header value
Used to generate legacy auth-schemes (Basic, Digest, Bearer) Authorization header values. It takes a scheme
and an
optional token
. You are responsible for encoding the token
using base64, base64url, base32, base16 or another
compatible encoding. An InvalidInputError
will be thrown if any of the input values are invalid.
createToken68('Basic', Buffer.from('username:password').toString('base64'));
// Basic dXNlcm5hbWU6cGFzc3dvcmQ=
The auth scheme
A Token68 formatted auth parameter
A formatted authorization header value
The createToken68Unsafe
function is identical to createToken68
in every way except that it does not perform any
input validation. It is faster for cases where you can be sure the values provided will not cause an error.
The auth scheme
A Token68 formatted auth parameter
A formatted authorization header value
The createUnsafe
function is identical to create
in every way except that it does not perform any input
validation. It is faster for cases where you can be sure the values provided will not cause an error.
The auth scheme
An array of tuple pairs of key and value
A formatted authorization header value
Parses a authorization header value returning the parsed data as a JavaScript object. If the header cannot be
successfully parsed due to invalid input, a InvalidHeaderError
will be thrown.
For legacy headers the return will contain values for the properties that are strings, a scheme
and a value
.
// Basic Zm9vOmJhcg==
{
scheme: 'Basic',
value: 'Zm9vOmJhcg=='
}
For modern headers the return will contain important properties, a scheme
and values
. scheme
is astring while
values
in an array of 2-tuples, where each 2-tuple contains the auth param name and value, respectively.
// Custom foo=bar,foo=fuzz,buzz="quoted \"value!\""
{
scheme: 'Custom',
values: [
['foo', 'bar'],
['foo', 'fuzz'],
['buzz', 'quoted "value!"']
]
}
The value of an authorization header
The parsed header params
Generated using TypeDoc
Creates a Authorization header value from a scheme as an optional array of 2-tuple, where each 2-tuple contains the auth-param name and value, respectively. Auth param values are automatically quotes only when needed. A
InvalidInputError
will be thrown if the provided values are not valid.create('Custom', [ ['foo', 'bar'], ['foo', 'fuzz'], ['buzz', 'quoted "value!"'] ]); // Custom foo=bar,foo=fuzz,buzz="quoted \"value!\""
{InvalidInputError} If
scheme
or a param name are not valid values