Skip to main content

HTTP Message Signatures plugin for HTTPie

Project description

httpie-http-message-signatures

An authentication plugin for HTTPie, implementing the IETF HTTP Message Signatures draft specification.

This is an incompatible replacement for and not to be confused with the "Cavage" HTTP Signatures draft.

Installation

The preferred installation method is via the httpie cli plugins utility:

$ httpie cli plugins install httpie-http-message-signatures

You may also download this repository and install from a local source:

$ cd httpie-http-message-signatures
$ httpie cli plugins install .

Last but not least, you can install via pip as well:

$ pip install --upgrade httpie-http-message-signatures

Usage

Use message-signature as the auth-type:

http -A message-signature ...

The HTTP Message Signature draft allows for a whole bunch of parameters to influence the signature. Because this can get somewhat overwhelming quickly, this plugin allows the parameters to be passed in two different ways:

  1. -a/--auth command line parameter

    This allows passing arguments inline, in the following format:

    key_id ":" key [":" covered_component_ids]
    

    In other words, the key id, followed by a :, followed by the private key as base 64 encoded string, optionally followed by another : and a list of comma-separated covered component ids. For example:

    $ http -A message-signature -a foobar:cDf/J30Q7EtXmZZ91j4OLg== example.com
    $ http -A message-signature -a foobar:cDf/J30Q7EtXmZZ91j4OLg==:@authority,@method example.com
    
  2. ~/.httpmessagesignaturesrc file

    If no parameters are passed via -a/--auth, the plugin will look for a file called .httpmessagesignaturesrc in the home directory. This file is a simple INI-like file format, which contains sections for different hosts, each with their own settings. A [DEFAULT] section can be used to set defaults for all hosts. For example:

    [DEFAULT]
    covered_component_ids = @method,@authority,@target-uri,content-digest
    
    [example.com]
    key_id = foobar
    key = cDf/J30Q7EtXmZZ91j4OLg==
    
    [*.example.com]
    key_id = uydnfpw0xnegmpx2op3rhw2qm
    key = nkAFfoSEN/rXWu6PrqsmntUeeSZ+aEoGD9YmxIxwjNxdlHPO4QYcSS+4aRroRHl92vEEipRCsr+j2tFVlPimfA==
    covered_component_ids = @method,@authority,@path,@query-params,content-digest
    

    Host names allow for wildcard patterns.

Covered component ids

Different parts of the HTTP request can be included in the signature. By default, these components are included:

  • @method
  • @authority
  • @target-uri

You can override this default list via the optional third command line argument or the covered_component_ids value in the ~/.httpmessagesignaturesrc file. The plugin recognizes two special component ids:

  1. content-digest

    When specifying content-digest as a covered component, and the request has a request body, the plugin will add a Content-Digest header to the request and include it in the signature. This allows easy signing of request bodies.

  2. @query-params

    The default @target-uri component signs the entire URI, including query parameters. Depending on your use case, you may need to sign the request path and query parameters separately. For this case the specification requires for every signed query parameter to be listed separately as its own component. E.g. a request to http://example.com/foo/?bar=baz&quux=42 would have to look like this:

    $ http -A message-signature \
           -a 'foobar:cDf/J30Q7EtXmZZ91j4OLg==:"@query-params";name="bar","@query-params";name="quux"' \
           example.com bar==baz quux==42
    

    Since this is of course highly inconvenient, the special component id @query-params will automatically be expanded to include all passed query parameters. So the above request can be shortened to:

    $ http -A message-signature -a foobar:cDf/J30Q7EtXmZZ91j4OLg==:@query-params example.com bar==baz quux==42
    

See the specification for a complete list of derived component names, but an incomplete list is presented here:

  • @method
  • @target-uri
  • @authority
  • @scheme
  • @request-target
  • @path
  • @query
  • @query-param

Implementation

This plugin is a wrapper around http-message-signatures.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

httpie_http_message_signatures-0.0.1.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file httpie_http_message_signatures-0.0.1.tar.gz.

File metadata

File hashes

Hashes for httpie_http_message_signatures-0.0.1.tar.gz
Algorithm Hash digest
SHA256 262d9fcf5bcb3f27d7ead5631c9b73a44c8b60b148b1788bf5f500c7a6dd1ed6
MD5 783438ff24716b12ac5cca4a7f4febfc
BLAKE2b-256 fa7f954c4b06a30250468af664d41c42bc2c5b3bcea3834fae7481bf03972fbe

See more details on using hashes here.

File details

Details for the file httpie_http_message_signatures-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for httpie_http_message_signatures-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0f61dd31744596cb2d51352def9ed7394eeb1a5383a74f5ae5fe1293e5ace82f
MD5 f13000ad941a693aa0365fcd9535ac30
BLAKE2b-256 550d65ad2dc097173ecd8cc138c30d20232c73e79dee6ccd80ae58fca87a0a70

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page