[6a3a178] | 1 | # node-http-signature
|
---|
| 2 |
|
---|
| 3 | node-http-signature is a node.js library that has client and server components
|
---|
| 4 | for Joyent's [HTTP Signature Scheme](http_signing.md).
|
---|
| 5 |
|
---|
| 6 | ## Usage
|
---|
| 7 |
|
---|
| 8 | Note the example below signs a request with the same key/cert used to start an
|
---|
| 9 | HTTP server. This is almost certainly not what you actually want, but is just
|
---|
| 10 | used to illustrate the API calls; you will need to provide your own key
|
---|
| 11 | management in addition to this library.
|
---|
| 12 |
|
---|
| 13 | ### Client
|
---|
| 14 |
|
---|
| 15 | ```js
|
---|
| 16 | var fs = require('fs');
|
---|
| 17 | var https = require('https');
|
---|
| 18 | var httpSignature = require('http-signature');
|
---|
| 19 |
|
---|
| 20 | var key = fs.readFileSync('./key.pem', 'ascii');
|
---|
| 21 |
|
---|
| 22 | var options = {
|
---|
| 23 | host: 'localhost',
|
---|
| 24 | port: 8443,
|
---|
| 25 | path: '/',
|
---|
| 26 | method: 'GET',
|
---|
| 27 | headers: {}
|
---|
| 28 | };
|
---|
| 29 |
|
---|
| 30 | // Adds a 'Date' header in, signs it, and adds the
|
---|
| 31 | // 'Authorization' header in.
|
---|
| 32 | var req = https.request(options, function(res) {
|
---|
| 33 | console.log(res.statusCode);
|
---|
| 34 | });
|
---|
| 35 |
|
---|
| 36 |
|
---|
| 37 | httpSignature.sign(req, {
|
---|
| 38 | key: key,
|
---|
| 39 | keyId: './cert.pem'
|
---|
| 40 | });
|
---|
| 41 |
|
---|
| 42 | req.end();
|
---|
| 43 | ```
|
---|
| 44 |
|
---|
| 45 | ### Server
|
---|
| 46 |
|
---|
| 47 | ```js
|
---|
| 48 | var fs = require('fs');
|
---|
| 49 | var https = require('https');
|
---|
| 50 | var httpSignature = require('http-signature');
|
---|
| 51 |
|
---|
| 52 | var options = {
|
---|
| 53 | key: fs.readFileSync('./key.pem'),
|
---|
| 54 | cert: fs.readFileSync('./cert.pem')
|
---|
| 55 | };
|
---|
| 56 |
|
---|
| 57 | https.createServer(options, function (req, res) {
|
---|
| 58 | var rc = 200;
|
---|
| 59 | var parsed = httpSignature.parseRequest(req);
|
---|
| 60 | var pub = fs.readFileSync(parsed.keyId, 'ascii');
|
---|
| 61 | if (!httpSignature.verifySignature(parsed, pub))
|
---|
| 62 | rc = 401;
|
---|
| 63 |
|
---|
| 64 | res.writeHead(rc);
|
---|
| 65 | res.end();
|
---|
| 66 | }).listen(8443);
|
---|
| 67 | ```
|
---|
| 68 |
|
---|
| 69 | ## Installation
|
---|
| 70 |
|
---|
| 71 | npm install http-signature
|
---|
| 72 |
|
---|
| 73 | ## License
|
---|
| 74 |
|
---|
| 75 | MIT.
|
---|
| 76 |
|
---|
| 77 | ## Bugs
|
---|
| 78 |
|
---|
| 79 | See <https://github.com/joyent/node-http-signature/issues>.
|
---|